aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1262-drm-amd-display-Ungate-stream-before-programming-reg.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1262-drm-amd-display-Ungate-stream-before-programming-reg.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1262-drm-amd-display-Ungate-stream-before-programming-reg.patch99
1 files changed, 99 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1262-drm-amd-display-Ungate-stream-before-programming-reg.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1262-drm-amd-display-Ungate-stream-before-programming-reg.patch
new file mode 100644
index 00000000..7fa81365
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1262-drm-amd-display-Ungate-stream-before-programming-reg.patch
@@ -0,0 +1,99 @@
+From cdc905abe2dde45f96c54025bf5160cd8173e575 Mon Sep 17 00:00:00 2001
+From: Gary Kattan <gary.kattan@amd.com>
+Date: Fri, 25 Jan 2019 15:04:14 -0800
+Subject: [PATCH 1262/2940] drm/amd/display: Ungate stream before programming
+ registers
+
+[Why]
+Certain tests fail after a fresh reboot. This is caused by writing to
+registers prior to ungating the stream we're trying to program.
+
+[How]
+Make sure the stream is ungated before writing to its registers.
+This also enables power-gating plane resources before init_hw
+initializes them.
+Additionally, this does some refactoring to move gating/ungating
+from enable/disable_plane functions to where stream resources are
+enabled/disabled.
+
+Signed-off-by: Gary Kattan <gary.kattan@amd.com>
+Reviewed-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+---
+ .../gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c | 6 ++++++
+ drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 8 ++++++--
+ drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h | 4 ++++
+ 3 files changed, 16 insertions(+), 2 deletions(-)
+
+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 a28fade62752..b5fe3eb3c93c 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
+@@ -1300,6 +1300,10 @@ static enum dc_status apply_single_controller_ctx_to_hw(
+ struct drr_params params = {0};
+ unsigned int event_triggers = 0;
+
++ if (dc->hwss.disable_stream_gating) {
++ dc->hwss.disable_stream_gating(dc, pipe_ctx);
++ }
++
+ if (pipe_ctx->stream_res.audio != NULL) {
+ struct audio_output audio_output;
+
+@@ -2684,6 +2688,8 @@ static const struct hw_sequencer_funcs dce110_funcs = {
+ .set_static_screen_control = set_static_screen_control,
+ .reset_hw_ctx_wrap = dce110_reset_hw_ctx_wrap,
+ .enable_stream_timing = dce110_enable_stream_timing,
++ .disable_stream_gating = NULL,
++ .enable_stream_gating = NULL,
+ .setup_stereo = NULL,
+ .set_avmute = dce110_set_avmute,
+ .wait_for_mpcc_disconnect = dce110_wait_for_mpcc_disconnect,
+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 05e5aa13602f..23b85a3f1b79 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
+@@ -1165,11 +1165,13 @@ static void reset_hw_ctx_wrap(
+ struct clock_source *old_clk = pipe_ctx_old->clock_source;
+
+ reset_back_end_for_pipe(dc, pipe_ctx_old, dc->current_state);
++ if (dc->hwss.enable_stream_gating) {
++ dc->hwss.enable_stream_gating(dc, pipe_ctx);
++ }
+ if (old_clk)
+ old_clk->funcs->cs_power_down(old_clk);
+ }
+ }
+-
+ }
+
+ static bool patch_address_for_sbs_tb_stereo(
+@@ -2785,7 +2787,9 @@ static const struct hw_sequencer_funcs dcn10_funcs = {
+ .edp_wait_for_hpd_ready = hwss_edp_wait_for_hpd_ready,
+ .set_cursor_position = dcn10_set_cursor_position,
+ .set_cursor_attribute = dcn10_set_cursor_attribute,
+- .set_cursor_sdr_white_level = dcn10_set_cursor_sdr_white_level
++ .set_cursor_sdr_white_level = dcn10_set_cursor_sdr_white_level,
++ .disable_stream_gating = NULL,
++ .enable_stream_gating = NULL
+ };
+
+
+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 341b4810288c..fc03320c81a1 100644
+--- a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
++++ b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
+@@ -68,6 +68,10 @@ struct stream_resource;
+
+ struct hw_sequencer_funcs {
+
++ void (*disable_stream_gating)(struct dc *dc, struct pipe_ctx *pipe_ctx);
++
++ void (*enable_stream_gating)(struct dc *dc, struct pipe_ctx *pipe_ctx);
++
+ void (*init_hw)(struct dc *dc);
+
+ void (*init_pipes)(struct dc *dc, struct dc_state *context);
+--
+2.17.1
+