aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3260-drm-amd-display-revert-to-hacking-bounding-box-for-p.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3260-drm-amd-display-revert-to-hacking-bounding-box-for-p.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3260-drm-amd-display-revert-to-hacking-bounding-box-for-p.patch123
1 files changed, 123 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3260-drm-amd-display-revert-to-hacking-bounding-box-for-p.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3260-drm-amd-display-revert-to-hacking-bounding-box-for-p.patch
new file mode 100644
index 00000000..10b4a5be
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3260-drm-amd-display-revert-to-hacking-bounding-box-for-p.patch
@@ -0,0 +1,123 @@
+From 199fad30a618dd6c94bb1e188beab0dd1a81ea16 Mon Sep 17 00:00:00 2001
+From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Date: Tue, 9 Jan 2018 16:37:03 -0500
+Subject: [PATCH 3260/4131] drm/amd/display: revert to hacking bounding box for
+ pipe split
+
+Directly editing pipe config outside of formula is error prone
+and results in higher clocks being used when splitting.
+For this reason we reverted to using bounding box hacking
+to split. Since sometimes this erroneusly results in higher dpm
+being required we unhack the bounding box and recalculate to allow
+dpm0 is possible.
+Side effect is we will lose some stutter efficiency
+in non dpm0 cases. This is not a big concern since increased stutter
+efficiency saves an order of magnitude less power than lower dpm.
+
+Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c | 43 ++++++++++--------------
+ 1 file changed, 18 insertions(+), 25 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
+index c6a7507..c9aa686 100644
+--- a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
++++ b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
+@@ -626,7 +626,7 @@ static bool dcn_bw_apply_registry_override(struct dc *dc)
+ return updated;
+ }
+
+-void hack_disable_optional_pipe_split(struct dcn_bw_internal_vars *v)
++static void hack_disable_optional_pipe_split(struct dcn_bw_internal_vars *v)
+ {
+ /*
+ * disable optional pipe split by lower dispclk bounding box
+@@ -635,7 +635,7 @@ void hack_disable_optional_pipe_split(struct dcn_bw_internal_vars *v)
+ v->max_dispclk[0] = v->max_dppclk_vmin0p65;
+ }
+
+-void hack_force_pipe_split(struct dcn_bw_internal_vars *v,
++static void hack_force_pipe_split(struct dcn_bw_internal_vars *v,
+ unsigned int pixel_rate_khz)
+ {
+ float pixel_rate_mhz = pixel_rate_khz / 1000;
+@@ -648,25 +648,20 @@ void hack_force_pipe_split(struct dcn_bw_internal_vars *v,
+ v->max_dppclk[0] = pixel_rate_mhz;
+ }
+
+-void hack_bounding_box(struct dcn_bw_internal_vars *v,
++static void hack_bounding_box(struct dcn_bw_internal_vars *v,
+ struct dc_debug *dbg,
+ struct dc_state *context)
+ {
+- if (dbg->pipe_split_policy == MPC_SPLIT_AVOID) {
++ if (dbg->pipe_split_policy == MPC_SPLIT_AVOID)
+ hack_disable_optional_pipe_split(v);
+- }
+
+ if (dbg->pipe_split_policy == MPC_SPLIT_AVOID_MULT_DISP &&
+- context->stream_count >= 2) {
++ context->stream_count >= 2)
+ hack_disable_optional_pipe_split(v);
+- }
+
+ if (context->stream_count == 1 &&
+- dbg->force_single_disp_pipe_split) {
+- struct dc_stream_state *stream0 = context->streams[0];
+-
+- hack_force_pipe_split(v, stream0->timing.pix_clk_khz);
+- }
++ dbg->force_single_disp_pipe_split)
++ hack_force_pipe_split(v, context->streams[0]->timing.pix_clk_khz);
+ }
+
+ bool dcn_validate_bandwidth(
+@@ -800,23 +795,10 @@ bool dcn_validate_bandwidth(
+ v->phyclk_per_state[2] = v->phyclkv_nom0p8;
+ v->phyclk_per_state[1] = v->phyclkv_mid0p72;
+ v->phyclk_per_state[0] = v->phyclkv_min0p65;
+-
+- hack_bounding_box(v, &dc->debug, context);
+-
+- if (v->voltage_override == dcn_bw_v_max0p9) {
+- v->voltage_override_level = number_of_states - 1;
+- } else if (v->voltage_override == dcn_bw_v_nom0p8) {
+- v->voltage_override_level = number_of_states - 2;
+- } else if (v->voltage_override == dcn_bw_v_mid0p72) {
+- v->voltage_override_level = number_of_states - 3;
+- } else {
+- v->voltage_override_level = 0;
+- }
+ v->synchronized_vblank = dcn_bw_no;
+ v->ta_pscalculation = dcn_bw_override;
+ v->allow_different_hratio_vratio = dcn_bw_yes;
+
+-
+ for (i = 0, input_idx = 0; i < pool->pipe_count; i++) {
+ struct pipe_ctx *pipe = &context->res_ctx.pipe_ctx[i];
+
+@@ -949,8 +931,19 @@ bool dcn_validate_bandwidth(
+ v->number_of_active_planes = input_idx;
+
+ scaler_settings_calculation(v);
++
++ hack_bounding_box(v, &dc->debug, context);
++
+ mode_support_and_system_configuration(v);
+
++ /* Unhack dppclk: dont bother with trying to pipe split if we cannot maintain dpm0 */
++ if (v->voltage_level != 0
++ && context->stream_count == 1
++ && dc->debug.force_single_disp_pipe_split) {
++ v->max_dppclk[0] = v->max_dppclk_vmin0p65;
++ mode_support_and_system_configuration(v);
++ }
++
+ if (v->voltage_level == 0 &&
+ (dc->debug.sr_exit_time_dpm0_ns
+ || dc->debug.sr_enter_plus_exit_time_dpm0_ns)) {
+--
+2.7.4
+