aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2726-drm-amd-display-send-display_count-msg-so-SMU-can-en.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2726-drm-amd-display-send-display_count-msg-so-SMU-can-en.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2726-drm-amd-display-send-display_count-msg-so-SMU-can-en.patch125
1 files changed, 125 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2726-drm-amd-display-send-display_count-msg-so-SMU-can-en.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2726-drm-amd-display-send-display_count-msg-so-SMU-can-en.patch
new file mode 100644
index 00000000..28acb761
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2726-drm-amd-display-send-display_count-msg-so-SMU-can-en.patch
@@ -0,0 +1,125 @@
+From 80b43a8b7cf535d2fdf7fdcb2606ca9fa3de526d Mon Sep 17 00:00:00 2001
+From: Hersen Wu <hersenxs.wu@amd.com>
+Date: Tue, 31 Oct 2017 15:55:15 -0400
+Subject: [PATCH 2726/4131] drm/amd/display: send display_count msg so SMU can
+ enter S0i2
+
+SMU can future lower voltages in long idle case when all display is off.
+
+If all display output is turned off via DPMS, send display_count = 0
+after all output are turned off.
+
+otherwise send display_count msg before turning on display to make sure
+SMU exit S0i2 state. before is not neccessary as we are out of S0i2
+when driver execute code, but send message before anyways for correctness.
+
+Signed-off-by: Hersen Wu <hersenxs.wu@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc.c | 12 ++++++++++--
+ drivers/gpu/drm/amd/display/dc/dce100/dce100_hw_sequencer.c | 2 ++
+ drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c | 5 +++++
+ drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 2 ++
+ drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h | 4 ++++
+ 5 files changed, 23 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index 0705e50..8df4deb 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -383,11 +383,19 @@ void set_dpms(
+
+ if (stream->dpms_off != dpms_off) {
+ stream->dpms_off = dpms_off;
+- if (dpms_off)
++
++ if (dpms_off) {
+ core_link_disable_stream(pipe_ctx,
+ KEEP_ACQUIRED_RESOURCE);
+- else
++
++ dc->hwss.pplib_apply_display_requirements(
++ dc, dc->current_state);
++ } else {
++ dc->hwss.pplib_apply_display_requirements(
++ dc, dc->current_state);
++
+ core_link_enable_stream(dc->current_state, pipe_ctx);
++ }
+ }
+ }
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce100/dce100_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce100/dce100_hw_sequencer.c
+index e7a6948..469af05 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_hw_sequencer.c
++++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_hw_sequencer.c
+@@ -148,5 +148,7 @@ void dce100_hw_sequencer_construct(struct dc *dc)
+
+ dc->hwss.enable_display_power_gating = dce100_enable_display_power_gating;
+ dc->hwss.set_bandwidth = dce100_set_bandwidth;
++ dc->hwss.pplib_apply_display_requirements =
++ dce100_pplib_apply_display_requirements;
+ }
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+index 8d9a6b5..bf76698 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
++++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+@@ -2593,6 +2593,10 @@ void dce110_fill_display_configs(
+
+ ASSERT(pipe_ctx != NULL);
+
++ /* only notify active stream */
++ if (stream->dpms_off)
++ continue;
++
+ num_cfgs++;
+ cfg->signal = pipe_ctx->stream->signal;
+ cfg->pipe_idx = pipe_ctx->pipe_idx;
+@@ -3022,6 +3026,7 @@ static const struct hw_sequencer_funcs dce110_funcs = {
+ .wait_for_mpcc_disconnect = dce110_wait_for_mpcc_disconnect,
+ .ready_shared_resources = ready_shared_resources,
+ .optimize_shared_resources = optimize_shared_resources,
++ .pplib_apply_display_requirements = pplib_apply_display_requirements,
+ .edp_backlight_control = hwss_edp_backlight_control,
+ .edp_power_control = hwss_edp_power_control,
+ };
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+index 4ab7c77..13483ee 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+@@ -2567,6 +2567,8 @@ static const struct hw_sequencer_funcs dcn10_funcs = {
+ .wait_for_mpcc_disconnect = dcn10_wait_for_mpcc_disconnect,
+ .ready_shared_resources = ready_shared_resources,
+ .optimize_shared_resources = optimize_shared_resources,
++ .pplib_apply_display_requirements =
++ dcn10_pplib_apply_display_requirements,
+ .edp_backlight_control = hwss_edp_backlight_control,
+ .edp_power_control = hwss_edp_power_control
+ };
+diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
+index 19cfca9..1d88526 100644
+--- a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
++++ b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
+@@ -183,12 +183,16 @@ struct hw_sequencer_funcs {
+
+ void (*ready_shared_resources)(struct dc *dc, struct dc_state *context);
+ void (*optimize_shared_resources)(struct dc *dc);
++ void (*pplib_apply_display_requirements)(
++ struct dc *dc,
++ struct dc_state *context);
+ void (*edp_power_control)(
+ struct dc_link *link,
+ bool enable);
+ void (*edp_backlight_control)(
+ struct dc_link *link,
+ bool enable);
++
+ };
+
+ void color_space_to_black_color(
+--
+2.7.4
+