diff options
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0555-drm-amd-display-remove-unneeded-FBC-hw-programming-c.patch')
-rw-r--r-- | meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0555-drm-amd-display-remove-unneeded-FBC-hw-programming-c.patch | 725 |
1 files changed, 0 insertions, 725 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0555-drm-amd-display-remove-unneeded-FBC-hw-programming-c.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0555-drm-amd-display-remove-unneeded-FBC-hw-programming-c.patch deleted file mode 100644 index 84fba255..00000000 --- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0555-drm-amd-display-remove-unneeded-FBC-hw-programming-c.patch +++ /dev/null @@ -1,725 +0,0 @@ -From 6d662274722c3f578f4090be82054aed9bb10010 Mon Sep 17 00:00:00 2001 -From: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> -Date: Fri, 23 Jun 2017 13:35:53 -0400 -Subject: [PATCH 0555/4131] drm/amd/display: remove unneeded FBC hw programming - code - -- Removed uneeded FBC code. -- Initial placeholder for FBC implementation on stoney/carrizo - -Signed-off-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> -Reviewed-by: Roman Li <Roman.Li@amd.com> -Acked-by: Harry Wentland <Harry.Wentland@amd.com> -Signed-off-by: Alex Deucher <alexander.deucher@amd.com> ---- - .../drm/amd/display/dc/dce110/dce110_compressor.c | 534 ++++----------------- - .../drm/amd/display/dc/dce110/dce110_compressor.h | 3 + - drivers/gpu/drm/amd/display/dc/inc/compressor.h | 46 +- - 3 files changed, 137 insertions(+), 446 deletions(-) - -diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.c -index 518150a..5fe8304 100644 ---- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.c -+++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.c -@@ -94,199 +94,8 @@ enum fbc_idle_force { - FBC_IDLE_FORCE_CG_STATIC_SCREEN_IS_INACTIVE = 0x20000000, - }; - --static uint32_t lpt_size_alignment(struct dce110_compressor *cp110) --{ -- /*LPT_ALIGNMENT (in bytes) = ROW_SIZE * #BANKS * # DRAM CHANNELS. */ -- return cp110->base.raw_size * cp110->base.banks_num * -- cp110->base.dram_channels_num; --} -- --static uint32_t lpt_memory_control_config(struct dce110_compressor *cp110, -- uint32_t lpt_control) --{ -- /*LPT MC Config */ -- if (cp110->base.options.bits.LPT_MC_CONFIG == 1) { -- /* POSSIBLE VALUES for LPT NUM_PIPES (DRAM CHANNELS): -- * 00 - 1 CHANNEL -- * 01 - 2 CHANNELS -- * 02 - 4 OR 6 CHANNELS -- * (Only for discrete GPU, N/A for CZ) -- * 03 - 8 OR 12 CHANNELS -- * (Only for discrete GPU, N/A for CZ) */ -- switch (cp110->base.dram_channels_num) { -- case 2: -- set_reg_field_value( -- lpt_control, -- 1, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_NUM_PIPES); -- break; -- case 1: -- set_reg_field_value( -- lpt_control, -- 0, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_NUM_PIPES); -- break; -- default: -- dm_logger_write( -- cp110->base.ctx->logger, LOG_WARNING, -- "%s: Invalid LPT NUM_PIPES!!!", -- __func__); -- break; -- } -- -- /* The mapping for LPT NUM_BANKS is in -- * GRPH_CONTROL.GRPH_NUM_BANKS register field -- * Specifies the number of memory banks for tiling -- * purposes. Only applies to 2D and 3D tiling modes. -- * POSSIBLE VALUES: -- * 00 - DCP_GRPH_NUM_BANKS_2BANK: ADDR_SURF_2_BANK -- * 01 - DCP_GRPH_NUM_BANKS_4BANK: ADDR_SURF_4_BANK -- * 02 - DCP_GRPH_NUM_BANKS_8BANK: ADDR_SURF_8_BANK -- * 03 - DCP_GRPH_NUM_BANKS_16BANK: ADDR_SURF_16_BANK */ -- switch (cp110->base.banks_num) { -- case 16: -- set_reg_field_value( -- lpt_control, -- 3, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_NUM_BANKS); -- break; -- case 8: -- set_reg_field_value( -- lpt_control, -- 2, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_NUM_BANKS); -- break; -- case 4: -- set_reg_field_value( -- lpt_control, -- 1, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_NUM_BANKS); -- break; -- case 2: -- set_reg_field_value( -- lpt_control, -- 0, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_NUM_BANKS); -- break; -- default: -- dm_logger_write( -- cp110->base.ctx->logger, LOG_WARNING, -- "%s: Invalid LPT NUM_BANKS!!!", -- __func__); -- break; -- } -- -- /* The mapping is in DMIF_ADDR_CALC. -- * ADDR_CONFIG_PIPE_INTERLEAVE_SIZE register field for -- * Carrizo specifies the memory interleave per pipe. -- * It effectively specifies the location of pipe bits in -- * the memory address. -- * POSSIBLE VALUES: -- * 00 - ADDR_CONFIG_PIPE_INTERLEAVE_256B: 256 byte -- * interleave -- * 01 - ADDR_CONFIG_PIPE_INTERLEAVE_512B: 512 byte -- * interleave -- */ -- switch (cp110->base.channel_interleave_size) { -- case 256: /*256B */ -- set_reg_field_value( -- lpt_control, -- 0, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_PIPE_INTERLEAVE_SIZE); -- break; -- case 512: /*512B */ -- set_reg_field_value( -- lpt_control, -- 1, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_PIPE_INTERLEAVE_SIZE); -- break; -- default: -- dm_logger_write( -- cp110->base.ctx->logger, LOG_WARNING, -- "%s: Invalid LPT INTERLEAVE_SIZE!!!", -- __func__); -- break; -- } - -- /* The mapping for LOW_POWER_TILING_ROW_SIZE is in -- * DMIF_ADDR_CALC.ADDR_CONFIG_ROW_SIZE register field -- * for Carrizo. Specifies the size of dram row in bytes. -- * This should match up with NOOFCOLS field in -- * MC_ARB_RAMCFG (ROW_SIZE = 4 * 2 ^^ columns). -- * This register DMIF_ADDR_CALC is not used by the -- * hardware as it is only used for addrlib assertions. -- * POSSIBLE VALUES: -- * 00 - ADDR_CONFIG_1KB_ROW: Treat 1KB as DRAM row -- * boundary -- * 01 - ADDR_CONFIG_2KB_ROW: Treat 2KB as DRAM row -- * boundary -- * 02 - ADDR_CONFIG_4KB_ROW: Treat 4KB as DRAM row -- * boundary */ -- switch (cp110->base.raw_size) { -- case 4096: /*4 KB */ -- set_reg_field_value( -- lpt_control, -- 2, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_ROW_SIZE); -- break; -- case 2048: -- set_reg_field_value( -- lpt_control, -- 1, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_ROW_SIZE); -- break; -- case 1024: -- set_reg_field_value( -- lpt_control, -- 0, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_ROW_SIZE); -- break; -- default: -- dm_logger_write( -- cp110->base.ctx->logger, LOG_WARNING, -- "%s: Invalid LPT ROW_SIZE!!!", -- __func__); -- break; -- } -- } else { -- dm_logger_write( -- cp110->base.ctx->logger, LOG_WARNING, -- "%s: LPT MC Configuration is not provided", -- __func__); -- } -- -- return lpt_control; --} -- --static bool is_source_bigger_than_epanel_size( -- struct dce110_compressor *cp110, -- uint32_t source_view_width, -- uint32_t source_view_height) --{ -- if (cp110->base.embedded_panel_h_size != 0 && -- cp110->base.embedded_panel_v_size != 0 && -- ((source_view_width * source_view_height) > -- (cp110->base.embedded_panel_h_size * -- cp110->base.embedded_panel_v_size))) -- return true; -- -- return false; --} -- --static uint32_t align_to_chunks_number_per_line( -- struct dce110_compressor *cp110, -- uint32_t pixels) -+static uint32_t align_to_chunks_number_per_line(uint32_t pixels) - { - return 256 * ((pixels + 255) / 256); - } -@@ -372,25 +181,11 @@ void dce110_compressor_enable_fbc( - struct dce110_compressor *cp110 = TO_DCE110_COMPRESSOR(compressor); - - if (compressor->options.bits.FBC_SUPPORT && -- (compressor->options.bits.DUMMY_BACKEND == 0) && -- (!dce110_compressor_is_fbc_enabled_in_hw(compressor, NULL)) && -- (!is_source_bigger_than_epanel_size( -- cp110, -- params->source_view_width, -- params->source_view_height))) { -+ (!dce110_compressor_is_fbc_enabled_in_hw(compressor, NULL))) { - - uint32_t addr; - uint32_t value; - -- /* Before enabling FBC first need to enable LPT if applicable -- * LPT state should always be changed (enable/disable) while FBC -- * is disabled */ -- if (compressor->options.bits.LPT_SUPPORT && (paths_num < 2) && -- (params->source_view_width * -- params->source_view_height <= -- dce11_one_lpt_channel_max_resolution)) { -- dce110_compressor_enable_lpt(compressor); -- } - - addr = mmFBC_CNTL; - value = dm_read_reg(compressor->ctx, addr); -@@ -432,11 +227,6 @@ void dce110_compressor_disable_fbc(struct compressor *compressor) - compressor->attached_inst = 0; - compressor->is_enabled = false; - -- /* Whenever disabling FBC make sure LPT is disabled if LPT -- * supported */ -- if (compressor->options.bits.LPT_SUPPORT) -- dce110_compressor_disable_lpt(compressor); -- - wait_for_fbc_state_changed(cp110, false); - } - } -@@ -469,17 +259,6 @@ bool dce110_compressor_is_fbc_enabled_in_hw( - return false; - } - --bool dce110_compressor_is_lpt_enabled_in_hw(struct compressor *compressor) --{ -- /* Check the hardware register */ -- uint32_t value = dm_read_reg(compressor->ctx, -- mmLOW_POWER_TILING_CONTROL); -- -- return get_reg_field_value( -- value, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_ENABLE); --} - - void dce110_compressor_program_compressed_surface_address_and_pitch( - struct compressor *compressor, -@@ -499,17 +278,6 @@ void dce110_compressor_program_compressed_surface_address_and_pitch( - dm_write_reg(compressor->ctx, - DCP_REG(mmGRPH_COMPRESS_SURFACE_ADDRESS), 0); - -- if (compressor->options.bits.LPT_SUPPORT) { -- uint32_t lpt_alignment = lpt_size_alignment(cp110); -- -- if (lpt_alignment != 0) { -- compressed_surf_address_low_part = -- ((compressed_surf_address_low_part -- + (lpt_alignment - 1)) / lpt_alignment) -- * lpt_alignment; -- } -- } -- - /* Write address, HIGH has to be first. */ - dm_write_reg(compressor->ctx, - DCP_REG(mmGRPH_COMPRESS_SURFACE_ADDRESS_HIGH), -@@ -518,9 +286,7 @@ void dce110_compressor_program_compressed_surface_address_and_pitch( - DCP_REG(mmGRPH_COMPRESS_SURFACE_ADDRESS), - compressed_surf_address_low_part); - -- fbc_pitch = align_to_chunks_number_per_line( -- cp110, -- params->source_view_width); -+ fbc_pitch = align_to_chunks_number_per_line(params->source_view_width); - - if (compressor->min_compress_ratio == FBC_COMPRESS_RATIO_1TO1) - fbc_pitch = fbc_pitch / 8; -@@ -543,197 +309,6 @@ void dce110_compressor_program_compressed_surface_address_and_pitch( - - } - --void dce110_compressor_disable_lpt(struct compressor *compressor) --{ -- struct dce110_compressor *cp110 = TO_DCE110_COMPRESSOR(compressor); -- uint32_t value; -- uint32_t addr; -- uint32_t inx; -- -- /* Disable all pipes LPT Stutter */ -- for (inx = 0; inx < 3; inx++) { -- value = -- dm_read_reg( -- compressor->ctx, -- DMIF_REG(mmDPG_PIPE_STUTTER_CONTROL_NONLPTCH)); -- set_reg_field_value( -- value, -- 0, -- DPG_PIPE_STUTTER_CONTROL_NONLPTCH, -- STUTTER_ENABLE_NONLPTCH); -- dm_write_reg( -- compressor->ctx, -- DMIF_REG(mmDPG_PIPE_STUTTER_CONTROL_NONLPTCH), -- value); -- } -- /* Disable Underlay pipe LPT Stutter */ -- addr = mmDPGV0_PIPE_STUTTER_CONTROL_NONLPTCH; -- value = dm_read_reg(compressor->ctx, addr); -- set_reg_field_value( -- value, -- 0, -- DPGV0_PIPE_STUTTER_CONTROL_NONLPTCH, -- STUTTER_ENABLE_NONLPTCH); -- dm_write_reg(compressor->ctx, addr, value); -- -- /* Disable LPT */ -- addr = mmLOW_POWER_TILING_CONTROL; -- value = dm_read_reg(compressor->ctx, addr); -- set_reg_field_value( -- value, -- 0, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_ENABLE); -- dm_write_reg(compressor->ctx, addr, value); -- -- /* Clear selection of Channel(s) containing Compressed Surface */ -- addr = mmGMCON_LPT_TARGET; -- value = dm_read_reg(compressor->ctx, addr); -- set_reg_field_value( -- value, -- 0xFFFFFFFF, -- GMCON_LPT_TARGET, -- STCTRL_LPT_TARGET); -- dm_write_reg(compressor->ctx, mmGMCON_LPT_TARGET, value); --} -- --void dce110_compressor_enable_lpt(struct compressor *compressor) --{ -- struct dce110_compressor *cp110 = TO_DCE110_COMPRESSOR(compressor); -- uint32_t value; -- uint32_t addr; -- uint32_t value_control; -- uint32_t channels; -- -- /* Enable LPT Stutter from Display pipe */ -- value = dm_read_reg(compressor->ctx, -- DMIF_REG(mmDPG_PIPE_STUTTER_CONTROL_NONLPTCH)); -- set_reg_field_value( -- value, -- 1, -- DPG_PIPE_STUTTER_CONTROL_NONLPTCH, -- STUTTER_ENABLE_NONLPTCH); -- dm_write_reg(compressor->ctx, -- DMIF_REG(mmDPG_PIPE_STUTTER_CONTROL_NONLPTCH), value); -- -- /* Enable Underlay pipe LPT Stutter */ -- addr = mmDPGV0_PIPE_STUTTER_CONTROL_NONLPTCH; -- value = dm_read_reg(compressor->ctx, addr); -- set_reg_field_value( -- value, -- 1, -- DPGV0_PIPE_STUTTER_CONTROL_NONLPTCH, -- STUTTER_ENABLE_NONLPTCH); -- dm_write_reg(compressor->ctx, addr, value); -- -- /* Selection of Channel(s) containing Compressed Surface: 0xfffffff -- * will disable LPT. -- * STCTRL_LPT_TARGETn corresponds to channel n. */ -- addr = mmLOW_POWER_TILING_CONTROL; -- value_control = dm_read_reg(compressor->ctx, addr); -- channels = get_reg_field_value(value_control, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_MODE); -- -- addr = mmGMCON_LPT_TARGET; -- value = dm_read_reg(compressor->ctx, addr); -- set_reg_field_value( -- value, -- channels + 1, /* not mentioned in programming guide, -- but follow DCE8.1 */ -- GMCON_LPT_TARGET, -- STCTRL_LPT_TARGET); -- dm_write_reg(compressor->ctx, addr, value); -- -- /* Enable LPT */ -- addr = mmLOW_POWER_TILING_CONTROL; -- value = dm_read_reg(compressor->ctx, addr); -- set_reg_field_value( -- value, -- 1, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_ENABLE); -- dm_write_reg(compressor->ctx, addr, value); --} -- --void dce110_compressor_program_lpt_control( -- struct compressor *compressor, -- struct compr_addr_and_pitch_params *params) --{ -- struct dce110_compressor *cp110 = TO_DCE110_COMPRESSOR(compressor); -- uint32_t rows_per_channel; -- uint32_t lpt_alignment; -- uint32_t source_view_width; -- uint32_t source_view_height; -- uint32_t lpt_control = 0; -- -- if (!compressor->options.bits.LPT_SUPPORT) -- return; -- -- lpt_control = dm_read_reg(compressor->ctx, -- mmLOW_POWER_TILING_CONTROL); -- -- /* POSSIBLE VALUES for Low Power Tiling Mode: -- * 00 - Use channel 0 -- * 01 - Use Channel 0 and 1 -- * 02 - Use Channel 0,1,2,3 -- * 03 - reserved */ -- switch (compressor->lpt_channels_num) { -- /* case 2: -- * Use Channel 0 & 1 / Not used for DCE 11 */ -- case 1: -- /*Use Channel 0 for LPT for DCE 11 */ -- set_reg_field_value( -- lpt_control, -- 0, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_MODE); -- break; -- default: -- dm_logger_write( -- compressor->ctx->logger, LOG_WARNING, -- "%s: Invalid selected DRAM channels for LPT!!!", -- __func__); -- break; -- } -- -- lpt_control = lpt_memory_control_config(cp110, lpt_control); -- -- /* Program LOW_POWER_TILING_ROWS_PER_CHAN field which depends on -- * FBC compressed surface pitch. -- * LOW_POWER_TILING_ROWS_PER_CHAN = Roundup ((Surface Height * -- * Surface Pitch) / (Row Size * Number of Channels * -- * Number of Banks)). */ -- rows_per_channel = 0; -- lpt_alignment = lpt_size_alignment(cp110); -- source_view_width = -- align_to_chunks_number_per_line( -- cp110, -- params->source_view_width); -- source_view_height = (params->source_view_height + 1) & (~0x1); -- -- if (lpt_alignment != 0) { -- rows_per_channel = source_view_width * source_view_height * 4; -- rows_per_channel = -- (rows_per_channel % lpt_alignment) ? -- (rows_per_channel / lpt_alignment + 1) : -- rows_per_channel / lpt_alignment; -- } -- -- set_reg_field_value( -- lpt_control, -- rows_per_channel, -- LOW_POWER_TILING_CONTROL, -- LOW_POWER_TILING_ROWS_PER_CHAN); -- -- dm_write_reg(compressor->ctx, -- mmLOW_POWER_TILING_CONTROL, lpt_control); --} -- --/* -- * DCE 11 Frame Buffer Compression Implementation -- */ -- - void dce110_compressor_set_fbc_invalidation_triggers( - struct compressor *compressor, - uint32_t fbc_trigger) -@@ -792,21 +367,20 @@ void dce110_compressor_set_fbc_invalidation_triggers( - } - - bool dce110_compressor_construct(struct dce110_compressor *compressor, -- struct dc_context *ctx) -+ struct dc_context *ctx) - { -- struct dc_bios *bp = ctx->dc_bios; -- struct embedded_panel_info panel_info; - - compressor->base.options.bits.FBC_SUPPORT = true; -- compressor->base.options.bits.LPT_SUPPORT = true; -- /* For DCE 11 always use one DRAM channel for LPT */ -+ -+ /* for dce 11 always use one dram channel for lpt */ - compressor->base.lpt_channels_num = 1; - compressor->base.options.bits.DUMMY_BACKEND = false; - -- /* Check if this system has more than 1 DRAM channel; if only 1 then LPT -- * should not be supported */ -- if (compressor->base.memory_bus_width == 64) -- compressor->base.options.bits.LPT_SUPPORT = false; -+ /* -+ * check if this system has more than 1 dram channel; if only 1 then lpt -+ * should not be supported -+ */ -+ - - compressor->base.options.bits.CLK_GATING_DISABLED = false; - -@@ -826,13 +400,6 @@ bool dce110_compressor_construct(struct dce110_compressor *compressor, - compressor->base.attached_inst = 0; - compressor->base.is_enabled = false; - -- if (BP_RESULT_OK == -- bp->funcs->get_embedded_panel_info(bp, &panel_info)) { -- compressor->base.embedded_panel_h_size = -- panel_info.lcd_timing.horizontal_addressable; -- compressor->base.embedded_panel_v_size = -- panel_info.lcd_timing.vertical_addressable; -- } - return true; - } - -@@ -857,3 +424,82 @@ void dce110_compressor_destroy(struct compressor **compressor) - dm_free(TO_DCE110_COMPRESSOR(*compressor)); - *compressor = NULL; - } -+ -+bool dce110_get_required_compressed_surfacesize(struct fbc_input_info fbc_input_info, -+ struct fbc_requested_compressed_size size) -+{ -+ bool result = false; -+ -+ unsigned int max_x = FBC_MAX_X, max_y = FBC_MAX_Y; -+ -+ get_max_support_fbc_buffersize(&max_x, &max_y); -+ -+ if (fbc_input_info.dynamic_fbc_buffer_alloc == 0) { -+ /* -+ * For DCE11 here use Max HW supported size: HW Support up to 3840x2400 resolution -+ * or 18000 chunks. -+ */ -+ size.preferred_size = size.min_size = align_to_chunks_number_per_line(max_x) * max_y * 4; /* (For FBC when LPT not supported). */ -+ size.preferred_size_alignment = size.min_size_alignment = 0x100; /* For FBC when LPT not supported */ -+ size.bits.preferred_must_be_framebuffer_pool = 1; -+ size.bits.min_must_be_framebuffer_pool = 1; -+ -+ result = true; -+ } -+ /* -+ * Maybe to add registry key support with optional size here to override above -+ * for debugging purposes -+ */ -+ -+ return result; -+} -+ -+ -+void get_max_support_fbc_buffersize(unsigned int *max_x, unsigned int *max_y) -+{ -+ *max_x = FBC_MAX_X; -+ *max_y = FBC_MAX_Y; -+ -+ /* if (m_smallLocalFrameBufferMemory == 1) -+ * { -+ * *max_x = FBC_MAX_X_SG; -+ * *max_y = FBC_MAX_Y_SG; -+ * } -+ */ -+} -+ -+ -+unsigned int controller_id_to_index(enum controller_id controller_id) -+{ -+ unsigned int index = 0; -+ -+ switch (controller_id) { -+ case CONTROLLER_ID_D0: -+ index = 0; -+ break; -+ case CONTROLLER_ID_D1: -+ index = 1; -+ break; -+ case CONTROLLER_ID_D2: -+ index = 2; -+ break; -+ case CONTROLLER_ID_D3: -+ index = 3; -+ break; -+ default: -+ break; -+ } -+ return index; -+} -+ -+ -+static const struct compressor_funcs dce110_compressor_funcs = { -+ .power_up_fbc = dce110_compressor_power_up_fbc, -+ .enable_fbc = dce110_compressor_enable_fbc, -+ .disable_fbc = dce110_compressor_disable_fbc, -+ .set_fbc_invalidation_triggers = dce110_compressor_set_fbc_invalidation_triggers, -+ .surface_address_and_pitch = dce110_compressor_program_compressed_surface_address_and_pitch, -+ .is_fbc_enabled_in_hw = dce110_compressor_is_fbc_enabled_in_hw -+}; -+ -+ -diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.h b/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.h -index 22af5be..ff21c86 100644 ---- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.h -+++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_compressor.h -@@ -75,4 +75,7 @@ void dce110_compressor_program_lpt_control(struct compressor *cp, - - bool dce110_compressor_is_lpt_enabled_in_hw(struct compressor *cp); - -+void get_max_support_fbc_buffersize(unsigned int *max_x, unsigned int *max_y); -+ - #endif -+ -diff --git a/drivers/gpu/drm/amd/display/dc/inc/compressor.h b/drivers/gpu/drm/amd/display/dc/inc/compressor.h -index af29259..5fdc2fc 100644 ---- a/drivers/gpu/drm/amd/display/dc/inc/compressor.h -+++ b/drivers/gpu/drm/amd/display/dc/inc/compressor.h -@@ -45,6 +45,7 @@ union fbc_physical_address { - }; - - struct compr_addr_and_pitch_params { -+ enum controller_id controller_id; - uint32_t inst; - uint32_t source_view_width; - uint32_t source_view_height; -@@ -52,14 +53,32 @@ struct compr_addr_and_pitch_params { - - enum fbc_hw_max_resolution_supported { - FBC_MAX_X = 3840, -- FBC_MAX_Y = 2400 -+ FBC_MAX_Y = 2400, -+ FBC_MAX_X_SG = 1920, -+ FBC_MAX_Y_SG = 1080, - }; - -+struct compressor; -+ -+struct compressor_funcs { -+ -+ void (*power_up_fbc)(struct compressor *cp); -+ void (*enable_fbc)(struct compressor *cp, uint32_t paths_num, -+ struct compr_addr_and_pitch_params *params); -+ void (*disable_fbc)(struct compressor *cp); -+ void (*set_fbc_invalidation_triggers)(struct compressor *cp, -+ uint32_t fbc_trigger); -+ void (*surface_address_and_pitch)( -+ struct compressor *cp, -+ struct compr_addr_and_pitch_params *params); -+ bool (*is_fbc_enabled_in_hw)(struct compressor *cp, -+ uint32_t *fbc_mapped_crtc_id); -+}; - struct compressor { - struct dc_context *ctx; - uint32_t attached_inst; - bool is_enabled; -- -+ const struct compressor_funcs funcs; - union { - uint32_t raw; - struct { -@@ -90,4 +109,27 @@ struct compressor { - enum fbc_compress_ratio min_compress_ratio; - }; - -+struct fbc_input_info { -+ bool dynamic_fbc_buffer_alloc; -+ unsigned int source_view_width; -+ unsigned int source_view_height; -+ unsigned int num_of_active_targets; -+}; -+ -+ -+struct fbc_requested_compressed_size { -+ unsigned int preferred_size; -+ unsigned int preferred_size_alignment; -+ unsigned int min_size; -+ unsigned int min_size_alignment; -+ union { -+ struct { -+ /* Above preferedSize must be allocated in FB pool */ -+ unsigned int preferred_must_be_framebuffer_pool : 1; -+ /* Above minSize must be allocated in FB pool */ -+ unsigned int min_must_be_framebuffer_pool : 1; -+ } bits; -+ unsigned int flags; -+ }; -+}; - #endif --- -2.7.4 - |