aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0590-drm-amd-dal-clean-up-watermark-structs.patch
diff options
context:
space:
mode:
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.patch236
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
+