diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0889-drm-amd-dal-Allow-for-ASIC-specific-bw_calcs.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0889-drm-amd-dal-Allow-for-ASIC-specific-bw_calcs.patch | 399 |
1 files changed, 0 insertions, 399 deletions
diff --git a/common/recipes-kernel/linux/files/0889-drm-amd-dal-Allow-for-ASIC-specific-bw_calcs.patch b/common/recipes-kernel/linux/files/0889-drm-amd-dal-Allow-for-ASIC-specific-bw_calcs.patch deleted file mode 100644 index ee50a086..00000000 --- a/common/recipes-kernel/linux/files/0889-drm-amd-dal-Allow-for-ASIC-specific-bw_calcs.patch +++ /dev/null @@ -1,399 +0,0 @@ -From 07981bae0a25f2a3dfbc171245b5dd6a8903cb61 Mon Sep 17 00:00:00 2001 -From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> -Date: Mon, 7 Mar 2016 11:08:23 -0500 -Subject: [PATCH 0889/1110] drm/amd/dal: Allow for ASIC specific bw_calcs - -Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> -Acked-by: Harry Wentland <harry.wentland@amd.com> -Signed-off-by: Alex Deucher <alexander.deucher@amd.com> ---- - drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c | 199 ++++++++++++--------- - drivers/gpu/drm/amd/dal/dc/core/dc.c | 50 ------ - .../gpu/drm/amd/dal/dc/dce110/dce110_resource.c | 51 ++++++ - drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h | 8 +- - 4 files changed, 168 insertions(+), 140 deletions(-) - -diff --git a/drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c b/drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c -index ca17b25..52557db 100644 ---- a/drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c -+++ b/drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c -@@ -3568,101 +3568,122 @@ static void calculate_bandwidth( - /******************************************************************************* - * Public functions - ******************************************************************************/ -- - void bw_calcs_init(struct bw_calcs_dceip *bw_dceip, -- struct bw_calcs_vbios *bw_vbios) -+ struct bw_calcs_vbios *bw_vbios, -+ enum bw_calcs_version version) - { - struct bw_calcs_dceip dceip = {{ 0 }}; - struct bw_calcs_vbios vbios = { 0 }; - -- vbios.number_of_dram_channels = 2; -- vbios.dram_channel_width_in_bits = 64; -- vbios.number_of_dram_banks = 8; -- vbios.high_yclk = bw_int_to_fixed(1600); -- vbios.mid_yclk = bw_int_to_fixed(1600); -- vbios.low_yclk = bw_frc_to_fixed(66666, 100); -- vbios.low_sclk = bw_int_to_fixed(200); -- vbios.mid_sclk = bw_int_to_fixed(300); -- vbios.high_sclk = bw_frc_to_fixed(62609, 100); -- vbios.low_voltage_max_dispclk = bw_int_to_fixed(352); -- vbios.mid_voltage_max_dispclk = bw_int_to_fixed(467); -- vbios.high_voltage_max_dispclk = bw_int_to_fixed(643); -- vbios.data_return_bus_width = bw_int_to_fixed(32); -- vbios.trc = bw_int_to_fixed(50); -- vbios.dmifmc_urgent_latency = bw_int_to_fixed(4); -- vbios.stutter_self_refresh_exit_latency = bw_frc_to_fixed(153, 10); -- vbios.nbp_state_change_latency = bw_frc_to_fixed(19649, 1000); -- vbios.mcifwrmc_urgent_latency = bw_int_to_fixed(10); -- vbios.scatter_gather_enable = true; -- vbios.down_spread_percentage = bw_frc_to_fixed(5, 10); -- vbios.cursor_width = 32; -- vbios.average_compression_rate = 4; -- vbios.number_of_request_slots_gmc_reserves_for_dmif_per_channel = 256; -- vbios.blackout_duration = bw_int_to_fixed(18); /* us */ -- vbios.maximum_blackout_recovery_time = bw_int_to_fixed(20); -- -- dceip.dmif_request_buffer_size = bw_int_to_fixed(768); -- dceip.de_tiling_buffer = bw_int_to_fixed(0); -- dceip.dcfclk_request_generation = 0; -- dceip.lines_interleaved_into_lb = 2; -- dceip.chunk_width = 256; -- dceip.number_of_graphics_pipes = 3; -- dceip.number_of_underlay_pipes = 1; -- dceip.display_write_back_supported = false; -- dceip.argb_compression_support = false; -- dceip.underlay_vscaler_efficiency6_bit_per_component = bw_frc_to_fixed( -- 35556, 10000); -- dceip.underlay_vscaler_efficiency8_bit_per_component = bw_frc_to_fixed( -- 34286, 10000); -- dceip.underlay_vscaler_efficiency10_bit_per_component = bw_frc_to_fixed(32, -- 10); -- dceip.underlay_vscaler_efficiency12_bit_per_component = bw_int_to_fixed(3); -- dceip.graphics_vscaler_efficiency6_bit_per_component = bw_frc_to_fixed(35, -- 10); -- dceip.graphics_vscaler_efficiency8_bit_per_component = bw_frc_to_fixed( -- 34286, 10000); -- dceip.graphics_vscaler_efficiency10_bit_per_component = bw_frc_to_fixed(32, -- 10); -- dceip.graphics_vscaler_efficiency12_bit_per_component = bw_int_to_fixed(3); -- dceip.alpha_vscaler_efficiency = bw_int_to_fixed(3); -- dceip.max_dmif_buffer_allocated = 2; -- dceip.graphics_dmif_size = 12288; -- dceip.underlay_luma_dmif_size = 19456; -- dceip.underlay_chroma_dmif_size = 23552; -- dceip.pre_downscaler_enabled = true; -- dceip.underlay_downscale_prefetch_enabled = true; -- dceip.lb_write_pixels_per_dispclk = bw_int_to_fixed(1); -- dceip.lb_size_per_component444 = bw_int_to_fixed(82176); -- dceip.graphics_lb_nodownscaling_multi_line_prefetching = false; -- dceip.stutter_and_dram_clock_state_change_gated_before_cursor = -- bw_int_to_fixed(0); -- dceip.underlay420_luma_lb_size_per_component = bw_int_to_fixed(82176); -- dceip.underlay420_chroma_lb_size_per_component = bw_int_to_fixed(164352); -- dceip.underlay422_lb_size_per_component = bw_int_to_fixed(82176); -- dceip.cursor_chunk_width = bw_int_to_fixed(64); -- dceip.cursor_dcp_buffer_lines = bw_int_to_fixed(4); -- dceip.cursor_memory_interface_buffer_pixels = bw_int_to_fixed(64); -- dceip.underlay_maximum_width_efficient_for_tiling = bw_int_to_fixed(1920); -- dceip.underlay_maximum_height_efficient_for_tiling = bw_int_to_fixed(1080); -- dceip.peak_pte_request_to_eviction_ratio_limiting_multiple_displays_or_single_rotated_display = -- bw_frc_to_fixed(3, 10); -- dceip.peak_pte_request_to_eviction_ratio_limiting_single_display_no_rotation = -- bw_int_to_fixed(25); -- dceip.minimum_outstanding_pte_request_limit = bw_int_to_fixed(2); -- dceip.maximum_total_outstanding_pte_requests_allowed_by_saw = -- bw_int_to_fixed(128); -- dceip.limit_excessive_outstanding_dmif_requests = true; -- dceip.linear_mode_line_request_alternation_slice = bw_int_to_fixed(64); -- dceip.scatter_gather_lines_of_pte_prefetching_in_linear_mode = 32; -- dceip.display_write_back420_luma_mcifwr_buffer_size = 12288; -- dceip.display_write_back420_chroma_mcifwr_buffer_size = 8192; -- dceip.request_efficiency = bw_frc_to_fixed(8, 10); -- dceip.dispclk_per_request = bw_int_to_fixed(2); -- dceip.dispclk_ramping_factor = bw_frc_to_fixed(11, 10); -- dceip.display_pipe_throughput_factor = bw_frc_to_fixed(105, 100); -- dceip.scatter_gather_pte_request_rows_in_tiling_mode = 2; -- dceip.mcifwr_all_surfaces_burst_time = bw_int_to_fixed(0); /* todo: this is a bug*/ -+ switch (version) { -+ case BW_CALCS_VERSION_CARRIZO: -+ vbios.number_of_dram_channels = 2; -+ vbios.dram_channel_width_in_bits = 64; -+ vbios.number_of_dram_banks = 8; -+ vbios.high_yclk = bw_int_to_fixed(1600); -+ vbios.mid_yclk = bw_int_to_fixed(1600); -+ vbios.low_yclk = bw_frc_to_fixed(66666, 100); -+ vbios.low_sclk = bw_int_to_fixed(200); -+ vbios.mid_sclk = bw_int_to_fixed(300); -+ vbios.high_sclk = bw_frc_to_fixed(62609, 100); -+ vbios.low_voltage_max_dispclk = bw_int_to_fixed(352); -+ vbios.mid_voltage_max_dispclk = bw_int_to_fixed(467); -+ vbios.high_voltage_max_dispclk = bw_int_to_fixed(643); -+ vbios.data_return_bus_width = bw_int_to_fixed(32); -+ vbios.trc = bw_int_to_fixed(50); -+ vbios.dmifmc_urgent_latency = bw_int_to_fixed(4); -+ vbios.stutter_self_refresh_exit_latency = bw_frc_to_fixed( -+ 153, -+ 10); -+ vbios.nbp_state_change_latency = bw_frc_to_fixed(19649, 1000); -+ vbios.mcifwrmc_urgent_latency = bw_int_to_fixed(10); -+ vbios.scatter_gather_enable = true; -+ vbios.down_spread_percentage = bw_frc_to_fixed(5, 10); -+ vbios.cursor_width = 32; -+ vbios.average_compression_rate = 4; -+ vbios.number_of_request_slots_gmc_reserves_for_dmif_per_channel = -+ 256; -+ vbios.blackout_duration = bw_int_to_fixed(18); /* us */ -+ vbios.maximum_blackout_recovery_time = bw_int_to_fixed(20); - -+ dceip.dmif_request_buffer_size = bw_int_to_fixed(768); -+ dceip.de_tiling_buffer = bw_int_to_fixed(0); -+ dceip.dcfclk_request_generation = 0; -+ dceip.lines_interleaved_into_lb = 2; -+ dceip.chunk_width = 256; -+ dceip.number_of_graphics_pipes = 3; -+ dceip.number_of_underlay_pipes = 1; -+ dceip.display_write_back_supported = false; -+ dceip.argb_compression_support = false; -+ dceip.underlay_vscaler_efficiency6_bit_per_component = -+ bw_frc_to_fixed(35556, 10000); -+ dceip.underlay_vscaler_efficiency8_bit_per_component = -+ bw_frc_to_fixed(34286, 10000); -+ dceip.underlay_vscaler_efficiency10_bit_per_component = -+ bw_frc_to_fixed(32, 10); -+ dceip.underlay_vscaler_efficiency12_bit_per_component = -+ bw_int_to_fixed(3); -+ dceip.graphics_vscaler_efficiency6_bit_per_component = -+ bw_frc_to_fixed(35, 10); -+ dceip.graphics_vscaler_efficiency8_bit_per_component = -+ bw_frc_to_fixed(34286, 10000); -+ dceip.graphics_vscaler_efficiency10_bit_per_component = -+ bw_frc_to_fixed(32, 10); -+ dceip.graphics_vscaler_efficiency12_bit_per_component = -+ bw_int_to_fixed(3); -+ dceip.alpha_vscaler_efficiency = bw_int_to_fixed(3); -+ dceip.max_dmif_buffer_allocated = 2; -+ dceip.graphics_dmif_size = 12288; -+ dceip.underlay_luma_dmif_size = 19456; -+ dceip.underlay_chroma_dmif_size = 23552; -+ dceip.pre_downscaler_enabled = true; -+ dceip.underlay_downscale_prefetch_enabled = true; -+ dceip.lb_write_pixels_per_dispclk = bw_int_to_fixed(1); -+ dceip.lb_size_per_component444 = bw_int_to_fixed(82176); -+ dceip.graphics_lb_nodownscaling_multi_line_prefetching = false; -+ dceip.stutter_and_dram_clock_state_change_gated_before_cursor = -+ bw_int_to_fixed(0); -+ dceip.underlay420_luma_lb_size_per_component = bw_int_to_fixed( -+ 82176); -+ dceip.underlay420_chroma_lb_size_per_component = -+ bw_int_to_fixed(164352); -+ dceip.underlay422_lb_size_per_component = bw_int_to_fixed( -+ 82176); -+ dceip.cursor_chunk_width = bw_int_to_fixed(64); -+ dceip.cursor_dcp_buffer_lines = bw_int_to_fixed(4); -+ dceip.cursor_memory_interface_buffer_pixels = bw_int_to_fixed( -+ 64); -+ dceip.underlay_maximum_width_efficient_for_tiling = -+ bw_int_to_fixed(1920); -+ dceip.underlay_maximum_height_efficient_for_tiling = -+ bw_int_to_fixed(1080); -+ dceip.peak_pte_request_to_eviction_ratio_limiting_multiple_displays_or_single_rotated_display = -+ bw_frc_to_fixed(3, 10); -+ dceip.peak_pte_request_to_eviction_ratio_limiting_single_display_no_rotation = -+ bw_int_to_fixed(25); -+ dceip.minimum_outstanding_pte_request_limit = bw_int_to_fixed( -+ 2); -+ dceip.maximum_total_outstanding_pte_requests_allowed_by_saw = -+ bw_int_to_fixed(128); -+ dceip.limit_excessive_outstanding_dmif_requests = true; -+ dceip.linear_mode_line_request_alternation_slice = -+ bw_int_to_fixed(64); -+ dceip.scatter_gather_lines_of_pte_prefetching_in_linear_mode = -+ 32; -+ dceip.display_write_back420_luma_mcifwr_buffer_size = 12288; -+ dceip.display_write_back420_chroma_mcifwr_buffer_size = 8192; -+ dceip.request_efficiency = bw_frc_to_fixed(8, 10); -+ dceip.dispclk_per_request = bw_int_to_fixed(2); -+ dceip.dispclk_ramping_factor = bw_frc_to_fixed(11, 10); -+ dceip.display_pipe_throughput_factor = bw_frc_to_fixed( -+ 105, -+ 100); -+ dceip.scatter_gather_pte_request_rows_in_tiling_mode = 2; -+ dceip.mcifwr_all_surfaces_burst_time = bw_int_to_fixed(0); /* todo: this is a bug*/ -+ break; -+ default: -+ break; -+ } - *bw_dceip = dceip; - *bw_vbios = vbios; - } -diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c -index 4c775f6..f8459a3 100644 ---- a/drivers/gpu/drm/amd/dal/dc/core/dc.c -+++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c -@@ -200,52 +200,6 @@ static struct adapter_service *create_as( - return as; - } - --static void bw_calcs_data_update_from_pplib(struct core_dc *dc) --{ -- struct dm_pp_clock_levels clks = {0}; -- -- /*do system clock*/ -- dm_pp_get_clock_levels_by_type( -- dc->ctx, -- DM_PP_CLOCK_TYPE_ENGINE_CLK, -- &clks); -- /* convert all the clock fro kHz to fix point mHz */ -- dc->bw_vbios.high_sclk = bw_frc_to_fixed( -- clks.clocks_in_khz[clks.num_levels-1], 1000); -- dc->bw_vbios.mid_sclk = bw_frc_to_fixed( -- clks.clocks_in_khz[clks.num_levels>>1], 1000); -- dc->bw_vbios.low_sclk = bw_frc_to_fixed( -- clks.clocks_in_khz[0], 1000); -- -- /*do display clock*/ -- dm_pp_get_clock_levels_by_type( -- dc->ctx, -- DM_PP_CLOCK_TYPE_DISPLAY_CLK, -- &clks); -- -- dc->bw_vbios.high_voltage_max_dispclk = bw_frc_to_fixed( -- clks.clocks_in_khz[clks.num_levels-1], 1000); -- dc->bw_vbios.mid_voltage_max_dispclk = bw_frc_to_fixed( -- clks.clocks_in_khz[clks.num_levels>>1], 1000); -- dc->bw_vbios.low_voltage_max_dispclk = bw_frc_to_fixed( -- clks.clocks_in_khz[0], 1000); -- -- /*do memory clock*/ -- dm_pp_get_clock_levels_by_type( -- dc->ctx, -- DM_PP_CLOCK_TYPE_MEMORY_CLK, -- &clks); -- -- dc->bw_vbios.low_yclk = bw_frc_to_fixed( -- clks.clocks_in_khz[0] * MEMORY_TYPE_MULTIPLIER, 1000); -- dc->bw_vbios.mid_yclk = bw_frc_to_fixed( -- clks.clocks_in_khz[clks.num_levels>>1] * MEMORY_TYPE_MULTIPLIER, -- 1000); -- dc->bw_vbios.high_yclk = bw_frc_to_fixed( -- clks.clocks_in_khz[clks.num_levels-1] * MEMORY_TYPE_MULTIPLIER, -- 1000); --} -- - static bool construct(struct core_dc *dc, const struct dc_init_data *init_params) - { - struct dal_logger *logger; -@@ -305,10 +259,6 @@ static bool construct(struct core_dc *dc, const struct dc_init_data *init_params - - if (!create_links(dc, as, init_params->num_virtual_links)) - goto create_links_fail; -- -- bw_calcs_init(&dc->bw_dceip, &dc->bw_vbios); -- -- bw_calcs_data_update_from_pplib(dc); - } else { - - /* Resource should construct all asic specific resources. -diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c -index f02335e..b8fc445 100644 ---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c -+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c -@@ -1000,6 +1000,52 @@ static void underlay_create(struct dc_context *ctx, struct resource_pool *pool) - pool->pipe_count++; - } - -+static void bw_calcs_data_update_from_pplib(struct core_dc *dc) -+{ -+ struct dm_pp_clock_levels clks = {0}; -+ -+ /*do system clock*/ -+ dm_pp_get_clock_levels_by_type( -+ dc->ctx, -+ DM_PP_CLOCK_TYPE_ENGINE_CLK, -+ &clks); -+ /* convert all the clock fro kHz to fix point mHz */ -+ dc->bw_vbios.high_sclk = bw_frc_to_fixed( -+ clks.clocks_in_khz[clks.num_levels-1], 1000); -+ dc->bw_vbios.mid_sclk = bw_frc_to_fixed( -+ clks.clocks_in_khz[clks.num_levels>>1], 1000); -+ dc->bw_vbios.low_sclk = bw_frc_to_fixed( -+ clks.clocks_in_khz[0], 1000); -+ -+ /*do display clock*/ -+ dm_pp_get_clock_levels_by_type( -+ dc->ctx, -+ DM_PP_CLOCK_TYPE_DISPLAY_CLK, -+ &clks); -+ -+ dc->bw_vbios.high_voltage_max_dispclk = bw_frc_to_fixed( -+ clks.clocks_in_khz[clks.num_levels-1], 1000); -+ dc->bw_vbios.mid_voltage_max_dispclk = bw_frc_to_fixed( -+ clks.clocks_in_khz[clks.num_levels>>1], 1000); -+ dc->bw_vbios.low_voltage_max_dispclk = bw_frc_to_fixed( -+ clks.clocks_in_khz[0], 1000); -+ -+ /*do memory clock*/ -+ dm_pp_get_clock_levels_by_type( -+ dc->ctx, -+ DM_PP_CLOCK_TYPE_MEMORY_CLK, -+ &clks); -+ -+ dc->bw_vbios.low_yclk = bw_frc_to_fixed( -+ clks.clocks_in_khz[0] * MEMORY_TYPE_MULTIPLIER, 1000); -+ dc->bw_vbios.mid_yclk = bw_frc_to_fixed( -+ clks.clocks_in_khz[clks.num_levels>>1] * MEMORY_TYPE_MULTIPLIER, -+ 1000); -+ dc->bw_vbios.high_yclk = bw_frc_to_fixed( -+ clks.clocks_in_khz[clks.num_levels-1] * MEMORY_TYPE_MULTIPLIER, -+ 1000); -+} -+ - bool dce110_construct_resource_pool( - struct adapter_service *as, - uint8_t num_virtual_links, -@@ -1181,10 +1227,15 @@ bool dce110_construct_resource_pool( - pool->stream_enc_count++; - } - -+ - /* Create hardware sequencer */ - if (!dc_construct_hw_sequencer(as, dc)) - goto stream_enc_create_fail; - -+ bw_calcs_init(&dc->bw_dceip, &dc->bw_vbios, BW_CALCS_VERSION_CARRIZO); -+ -+ bw_calcs_data_update_from_pplib(dc); -+ - return true; - - stream_enc_create_fail: -diff --git a/drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h b/drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h -index 2adad08..ff1ea09 100644 ---- a/drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h -+++ b/drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h -@@ -483,12 +483,18 @@ struct bw_calcs_output { - int32_t required_blackout_duration_us; - }; - -+enum bw_calcs_version { -+ BW_CALCS_VERSION_INVALID, -+ BW_CALCS_VERSION_CARRIZO -+}; -+ - /** - * Initialize structures with data which will NOT change at runtime. - */ - void bw_calcs_init( - struct bw_calcs_dceip *bw_dceip, -- struct bw_calcs_vbios *bw_vbios); -+ struct bw_calcs_vbios *bw_vbios, -+ enum bw_calcs_version version); - - /** - * Return: --- -2.7.4 - |