diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0590-drm-amd-dal-clean-up-watermark-structs.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0590-drm-amd-dal-clean-up-watermark-structs.patch | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0590-drm-amd-dal-clean-up-watermark-structs.patch b/common/recipes-kernel/linux/files/0590-drm-amd-dal-clean-up-watermark-structs.patch new file mode 100644 index 00000000..acf3a3dc --- /dev/null +++ b/common/recipes-kernel/linux/files/0590-drm-amd-dal-clean-up-watermark-structs.patch @@ -0,0 +1,236 @@ +From 26cb0f6a249c7a51de01fec74b8a8a07e47aacb5 Mon Sep 17 00:00:00 2001 +From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> +Date: Thu, 3 Dec 2015 16:33:14 -0500 +Subject: [PATCH 0590/1110] drm/amd/dal: clean up watermark structs + +Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> +Signed-off-by: Harry Wentland <harry.wentland@amd.com> +Acked-by: Harry Wentland <harry.wentland@amd.com> +--- + drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c | 58 ++++++++++------------ + drivers/gpu/drm/amd/dal/dc/core/dc.c | 2 +- + .../drm/amd/dal/dc/dce110/dce110_hw_sequencer.c | 6 +-- + .../gpu/drm/amd/dal/dc/dce110/dce110_resource.c | 2 +- + drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h | 9 ++-- + 5 files changed, 35 insertions(+), 42 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 542b3d7..2b54eb6 100644 +--- a/drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c ++++ b/drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c +@@ -3367,85 +3367,79 @@ bool bw_calcs(struct dc_context *ctx, const struct bw_calcs_input_dceip *dceip, + + if (bw_data_internal->number_of_displays != 0) { + struct bw_fixed high_sclk = vbios->high_sclk_mhz; ++ struct bw_fixed mid_sclk = vbios->mid_sclk_mhz; + struct bw_fixed low_sclk = vbios->low_sclk_mhz; + struct bw_fixed high_yclk = vbios->high_yclk_mhz; + struct bw_fixed low_yclk = vbios->low_yclk_mhz; + +- ((struct bw_calcs_input_vbios *)vbios)->low_yclk_mhz = low_yclk; +- ((struct bw_calcs_input_vbios *)vbios)->high_yclk_mhz = low_yclk; +- ((struct bw_calcs_input_vbios *)vbios)->low_sclk_mhz = low_sclk; +- ((struct bw_calcs_input_vbios *)vbios)->mid_sclk_mhz = low_sclk; +- ((struct bw_calcs_input_vbios *)vbios)->high_sclk_mhz = low_sclk; + calculate_bandwidth(dceip, vbios, bw_data_internal, + bw_results_internal); + + /* units: nanosecond, 16bit storage. */ +- calcs_output->nbp_state_change_watermark[0].b_mark = ++ calcs_output->nbp_state_change_wm_ns[0].b_mark = + mul(bw_results_internal->nbp_state_change_watermark[4], + int_to_fixed(1000)).value >> 24; +- calcs_output->nbp_state_change_watermark[1].b_mark = ++ calcs_output->nbp_state_change_wm_ns[1].b_mark = + mul(bw_results_internal->nbp_state_change_watermark[5], + int_to_fixed(1000)).value >> 24; +- calcs_output->nbp_state_change_watermark[2].b_mark = ++ calcs_output->nbp_state_change_wm_ns[2].b_mark = + mul(bw_results_internal->nbp_state_change_watermark[6], + int_to_fixed(1000)).value >> 24; + +- calcs_output->stutter_exit_watermark[0].b_mark = ++ calcs_output->stutter_exit_wm_ns[0].b_mark = + mul(bw_results_internal->stutter_exit_watermark[4], + int_to_fixed(1000)).value >> 24; +- calcs_output->stutter_exit_watermark[1].b_mark = ++ calcs_output->stutter_exit_wm_ns[1].b_mark = + mul(bw_results_internal->stutter_exit_watermark[5], + int_to_fixed(1000)).value >> 24; +- calcs_output->stutter_exit_watermark[2].b_mark = ++ calcs_output->stutter_exit_wm_ns[2].b_mark = + mul(bw_results_internal->stutter_exit_watermark[6], + int_to_fixed(1000)).value >> 24; + +- calcs_output->urgent_watermark[0].b_mark = ++ calcs_output->urgent_wm_ns[0].b_mark = + mul(bw_results_internal->urgent_watermark[4], + int_to_fixed(1000)).value >> 24; +- calcs_output->urgent_watermark[1].b_mark = ++ calcs_output->urgent_wm_ns[1].b_mark = + mul(bw_results_internal->urgent_watermark[5], + int_to_fixed(1000)).value >> 24; +- calcs_output->urgent_watermark[2].b_mark = ++ calcs_output->urgent_wm_ns[2].b_mark = + mul(bw_results_internal->urgent_watermark[6], + int_to_fixed(1000)).value >> 24; + + ((struct bw_calcs_input_vbios *)vbios)->low_yclk_mhz = high_yclk; +- ((struct bw_calcs_input_vbios *)vbios)->high_yclk_mhz = high_yclk; + ((struct bw_calcs_input_vbios *)vbios)->low_sclk_mhz = high_sclk; + ((struct bw_calcs_input_vbios *)vbios)->mid_sclk_mhz = high_sclk; +- ((struct bw_calcs_input_vbios *)vbios)->high_sclk_mhz = high_sclk; + + calculate_bandwidth(dceip, vbios, bw_data_internal, + bw_results_internal); + +- calcs_output->nbp_state_change_watermark[0].a_mark = ++ calcs_output->nbp_state_change_wm_ns[0].a_mark = + mul(bw_results_internal->nbp_state_change_watermark[4], + int_to_fixed(1000)).value >> 24; +- calcs_output->nbp_state_change_watermark[1].a_mark = ++ calcs_output->nbp_state_change_wm_ns[1].a_mark = + mul(bw_results_internal->nbp_state_change_watermark[5], + int_to_fixed(1000)).value >> 24; +- calcs_output->nbp_state_change_watermark[2].a_mark = ++ calcs_output->nbp_state_change_wm_ns[2].a_mark = + mul(bw_results_internal->nbp_state_change_watermark[6], + int_to_fixed(1000)).value >> 24; + +- calcs_output->stutter_exit_watermark[0].a_mark = ++ calcs_output->stutter_exit_wm_ns[0].a_mark = + mul(bw_results_internal->stutter_exit_watermark[4], + int_to_fixed(1000)).value >> 24; +- calcs_output->stutter_exit_watermark[1].a_mark = ++ calcs_output->stutter_exit_wm_ns[1].a_mark = + mul(bw_results_internal->stutter_exit_watermark[5], + int_to_fixed(1000)).value >> 24; +- calcs_output->stutter_exit_watermark[2].a_mark = ++ calcs_output->stutter_exit_wm_ns[2].a_mark = + mul(bw_results_internal->stutter_exit_watermark[6], + int_to_fixed(1000)).value >> 24; + +- calcs_output->urgent_watermark[0].a_mark = ++ calcs_output->urgent_wm_ns[0].a_mark = + mul(bw_results_internal->urgent_watermark[4], + int_to_fixed(1000)).value >> 24; +- calcs_output->urgent_watermark[1].a_mark = ++ calcs_output->urgent_wm_ns[1].a_mark = + mul(bw_results_internal->urgent_watermark[5], + int_to_fixed(1000)).value >> 24; +- calcs_output->urgent_watermark[2].a_mark = ++ calcs_output->urgent_wm_ns[2].a_mark = + mul(bw_results_internal->urgent_watermark[6], + int_to_fixed(1000)).value >> 24; + +@@ -3460,25 +3454,23 @@ bool bw_calcs(struct dc_context *ctx, const struct bw_calcs_input_dceip *dceip, + calcs_output->dispclk_khz = + mul(bw_results_internal->dispclk, + int_to_fixed(1000)).value >> 24; +- calcs_output->blackout_recovery_time_us = +- mul(bw_results_internal->blackout_recovery_time, +- int_to_fixed(1000)).value >> 24; ++ /*TODO:fix formula to unhardcode use levels*/ ++ calcs_output->required_blackout_duration_us = ++ add(bw_results_internal->blackout_duration_margin[2][2], ++ vbios->blackout_duration).value >> 24; + calcs_output->required_sclk = + mul(bw_results_internal->required_sclk, + int_to_fixed(1000)).value >> 24; + calcs_output->required_sclk_deep_sleep = + mul(bw_results_internal->sclk_deep_sleep, + int_to_fixed(1000)).value >> 24; +- /*TODO:fix formula to unhardcode*/ ++ /*TODO:fix formula to unhardcode use levels*/ + calcs_output->required_yclk = + mul(high_yclk, int_to_fixed(1000)).value >> 24; + + ((struct bw_calcs_input_vbios *)vbios)->low_yclk_mhz = low_yclk; +- ((struct bw_calcs_input_vbios *)vbios)->high_yclk_mhz = +- high_yclk; + ((struct bw_calcs_input_vbios *)vbios)->low_sclk_mhz = low_sclk; +- ((struct bw_calcs_input_vbios *)vbios)->mid_sclk_mhz = high_sclk; +- ((struct bw_calcs_input_vbios *)vbios)->high_sclk_mhz = high_sclk; ++ ((struct bw_calcs_input_vbios *)vbios)->mid_sclk_mhz = mid_sclk; + } else { + calcs_output->nbp_state_change_enable = true; + calcs_output->cpuc_state_change_enable = true; +diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c +index feda859..6351ef5 100644 +--- a/drivers/gpu/drm/amd/dal/dc/core/dc.c ++++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c +@@ -579,7 +579,7 @@ static void pplib_apply_display_requirements( + pp_display_cfg.cpu_pstate_disable = + context->bw_results.cpup_state_change_enable == false; + pp_display_cfg.cpu_pstate_separation_time = +- context->bw_results.blackout_recovery_time_us; ++ context->bw_results.required_blackout_duration_us; + + pp_display_cfg.min_memory_clock_khz = context->bw_results.required_yclk; + pp_display_cfg.min_engine_clock_khz = context->bw_results.required_sclk; +diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c +index edbf3ce..10cc727 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c ++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c +@@ -1155,11 +1155,11 @@ static void set_displaymarks( + dce110_mem_input_program_display_marks( + stream->mi, + context->bw_results +- .nbp_state_change_watermark[total_streams], ++ .nbp_state_change_wm_ns[total_streams], + context->bw_results +- .stutter_exit_watermark[total_streams], ++ .stutter_exit_wm_ns[total_streams], + context->bw_results +- .urgent_watermark[total_streams], ++ .urgent_wm_ns[total_streams], + stream->public.timing.h_total, + stream->public.timing.pix_clk_khz, + 1000 * dc->bw_vbios.blackout_duration +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 6121277..400271e 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c ++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c +@@ -575,7 +575,7 @@ enum dc_status dce110_validate_bandwidth( + LOG_MINOR_BWM_REQUIRED_BANDWIDTH_CALCS, + "%s: Finish bandwidth calculations\n nbpMark: %d", + __func__, +- context->bw_results.nbp_state_change_watermark[0].b_mark); ++ context->bw_results.nbp_state_change_wm_ns[0].b_mark); + + return result; + } +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 6422298..fb04ce3 100644 +--- a/drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h ++++ b/drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h +@@ -242,6 +242,7 @@ struct bw_calcs_input_mode_data { + * Output data structure(s). + ******************************************************************************/ + #define maximum_number_of_surfaces 12 ++/*Units : MHz, us */ + struct bw_results_internal { + bool cpup_state_change_enable; + bool cpuc_state_change_enable; +@@ -430,14 +431,14 @@ struct bw_calcs_output { + bool cpup_state_change_enable; + bool stutter_mode_enable; + bool nbp_state_change_enable; +- struct bw_watermarks urgent_watermark[4]; +- struct bw_watermarks stutter_exit_watermark[4]; +- struct bw_watermarks nbp_state_change_watermark[4]; ++ struct bw_watermarks urgent_wm_ns[4]; ++ struct bw_watermarks stutter_exit_wm_ns[4]; ++ struct bw_watermarks nbp_state_change_wm_ns[4]; + uint32_t required_sclk; + uint32_t required_sclk_deep_sleep; + uint32_t required_yclk; + uint32_t dispclk_khz; +- uint32_t blackout_recovery_time_us; ++ uint32_t required_blackout_duration_us; + }; + + +-- +2.7.4 + |