diff options
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.patch | 125 |
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 + |