aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2652-drm-amd-display-Not-reset-front-end-when-program-bac.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2652-drm-amd-display-Not-reset-front-end-when-program-bac.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2652-drm-amd-display-Not-reset-front-end-when-program-bac.patch136
1 files changed, 136 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2652-drm-amd-display-Not-reset-front-end-when-program-bac.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2652-drm-amd-display-Not-reset-front-end-when-program-bac.patch
new file mode 100644
index 00000000..6afe72fc
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2652-drm-amd-display-Not-reset-front-end-when-program-bac.patch
@@ -0,0 +1,136 @@
+From f33aaf5505a4b7b5822f2f6f95305e9b61d8ba54 Mon Sep 17 00:00:00 2001
+From: Yongqiang Sun <yongqiang.sun@amd.com>
+Date: Tue, 17 Oct 2017 14:24:28 -0400
+Subject: [PATCH 2652/4131] drm/amd/display: Not reset front end when program
+ back end.
+
+Since front end is programmed before back end programming,
+no need to reset front end in back end programming.
+
+Signed-off-by: Yongqiang Sun <yongqiang.sun@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 | 3 +-
+ .../drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 76 ----------------------
+ 2 files changed, 2 insertions(+), 77 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index c690b48..1c1f08a 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -809,6 +809,8 @@ static enum dc_status dc_commit_state_no_check(struct dc *dc, struct dc_state *c
+ if (!dcb->funcs->is_accelerated_mode(dcb))
+ dc->hwss.enable_accelerated_mode(dc);
+
++
++
+ for (i = 0; i < context->stream_count; i++) {
+ const struct dc_sink *sink = context->streams[i]->sink;
+
+@@ -889,7 +891,6 @@ bool dc_commit_state(struct dc *dc, struct dc_state *context)
+ return (result == DC_OK);
+ }
+
+-
+ bool dc_post_update_surfaces_to_stream(struct dc *dc)
+ {
+ int i;
+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 4fc2bc4..77ba1bf 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
+@@ -617,32 +617,6 @@ static void plane_atomic_disable(struct dc *dc,
+ verify_allow_pstate_change_high(dc->hwseq);
+ }
+
+-/*
+- * kill power to plane hw
+- * note: cannot power down until plane is disable
+- */
+-static void plane_atomic_power_down(struct dc *dc, int fe_idx)
+-{
+- struct dce_hwseq *hws = dc->hwseq;
+- struct dpp *dpp = dc->res_pool->dpps[fe_idx];
+-
+- if (REG(DC_IP_REQUEST_CNTL)) {
+- REG_SET(DC_IP_REQUEST_CNTL, 0,
+- IP_REQUEST_EN, 1);
+- dpp_pg_control(hws, fe_idx, false);
+- hubp_pg_control(hws, fe_idx, false);
+- dpp->funcs->dpp_reset(dpp);
+- REG_SET(DC_IP_REQUEST_CNTL, 0,
+- IP_REQUEST_EN, 0);
+- dm_logger_write(dc->ctx->logger, LOG_DEBUG,
+- "Power gated front end %d\n", fe_idx);
+-
+- if (dc->debug.sanity_checks)
+- verify_allow_pstate_change_high(dc->hwseq);
+- }
+-}
+-
+-
+ static void reset_front_end(
+ struct dc *dc,
+ int fe_idx)
+@@ -792,56 +766,6 @@ static void reset_hw_ctx_wrap(
+ {
+ int i;
+
+- /* Reset Front End*/
+- /* Lock*/
+- for (i = 0; i < dc->res_pool->pipe_count; i++) {
+- struct pipe_ctx *cur_pipe_ctx = &dc->current_state->res_ctx.pipe_ctx[i];
+- struct timing_generator *tg = cur_pipe_ctx->stream_res.tg;
+-
+- if (cur_pipe_ctx->stream)
+- tg->funcs->lock(tg);
+- }
+- /* Disconnect*/
+- for (i = dc->res_pool->pipe_count - 1; i >= 0 ; i--) {
+- struct pipe_ctx *pipe_ctx_old =
+- &dc->current_state->res_ctx.pipe_ctx[i];
+- struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[i];
+-
+- if (!pipe_ctx->stream ||
+- !pipe_ctx->plane_state ||
+- pipe_need_reprogram(pipe_ctx_old, pipe_ctx)) {
+-
+- plane_atomic_disconnect(dc, i);
+- }
+- }
+- /* Unlock*/
+- for (i = dc->res_pool->pipe_count - 1; i >= 0; i--) {
+- struct pipe_ctx *cur_pipe_ctx = &dc->current_state->res_ctx.pipe_ctx[i];
+- struct timing_generator *tg = cur_pipe_ctx->stream_res.tg;
+-
+- if (cur_pipe_ctx->stream)
+- tg->funcs->unlock(tg);
+- }
+-
+- /* Disable and Powerdown*/
+- for (i = dc->res_pool->pipe_count - 1; i >= 0 ; i--) {
+- struct pipe_ctx *pipe_ctx_old =
+- &dc->current_state->res_ctx.pipe_ctx[i];
+- struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[i];
+-
+- /*if (!pipe_ctx_old->stream)
+- continue;*/
+-
+- if (pipe_ctx->stream && pipe_ctx->plane_state
+- && !pipe_need_reprogram(pipe_ctx_old, pipe_ctx))
+- continue;
+-
+- plane_atomic_disable(dc, i);
+-
+- if (!pipe_ctx->stream || !pipe_ctx->plane_state)
+- plane_atomic_power_down(dc, i);
+- }
+-
+ /* Reset Back End*/
+ for (i = dc->res_pool->pipe_count - 1; i >= 0 ; i--) {
+ struct pipe_ctx *pipe_ctx_old =
+--
+2.7.4
+