aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2785-drm-amd-display-Only-program-watermark-for-full-upda.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2785-drm-amd-display-Only-program-watermark-for-full-upda.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2785-drm-amd-display-Only-program-watermark-for-full-upda.patch163
1 files changed, 163 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2785-drm-amd-display-Only-program-watermark-for-full-upda.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2785-drm-amd-display-Only-program-watermark-for-full-upda.patch
new file mode 100644
index 00000000..9a99042f
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2785-drm-amd-display-Only-program-watermark-for-full-upda.patch
@@ -0,0 +1,163 @@
+From 75fd34454169e6e57063c19274780c2b5d439d22 Mon Sep 17 00:00:00 2001
+From: Yongqiang Sun <yongqiang.sun@amd.com>
+Date: Mon, 13 Nov 2017 17:22:17 -0500
+Subject: [PATCH 2785/4131] drm/amd/display: Only program watermark for full
+ update.
+
+For scaling and position change, it isn't necessary to program
+watermark and check P-State as well.
+
+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 | 4 +-
+ .../gpu/drm/amd/display/dc/dcn10/dcn10_dpp_dscl.c | 3 ++
+ .../drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 46 +++++++++-------------
+ 3 files changed, 23 insertions(+), 30 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index ba775a1..26de748 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -1139,9 +1139,7 @@ static void commit_planes_for_stream(struct dc *dc,
+ if (update_type == UPDATE_TYPE_FULL) {
+ dc->hwss.set_bandwidth(dc, context, false);
+ context_clock_trace(dc, context);
+- }
+
+- if (update_type > UPDATE_TYPE_FAST) {
+ for (j = 0; j < dc->res_pool->pipe_count; j++) {
+ struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j];
+
+@@ -1176,7 +1174,7 @@ static void commit_planes_for_stream(struct dc *dc,
+ }
+ }
+
+- if (update_type > UPDATE_TYPE_FAST)
++ if (update_type == UPDATE_TYPE_FULL)
+ context_timing_trace(dc, &context->res_ctx);
+
+ /* Perform requested Updates */
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_dscl.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_dscl.c
+index 4b5b709..3eb824d 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_dscl.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_dscl.c
+@@ -651,6 +651,8 @@ void dpp1_dscl_set_scaler_manual_scale(
+ if (memcmp(&dpp->scl_data, scl_data, sizeof(*scl_data)) == 0)
+ return;
+
++ PERF_TRACE();
++
+ dpp->scl_data = *scl_data;
+
+ /* Recout */
+@@ -704,4 +706,5 @@ void dpp1_dscl_set_scaler_manual_scale(
+ SCL_H_NUM_TAPS_C, scl_data->taps.h_taps_c - 1);
+
+ dpp1_dscl_set_scl_filter(dpp, scl_data, ycbcr);
++ PERF_TRACE();
+ }
+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 ab79cf2..7255f5c 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
+@@ -2056,11 +2056,6 @@ static void program_all_pipe_in_tree(
+ {
+ if (pipe_ctx->top_pipe == NULL) {
+
+- if (dc->debug.sanity_checks) {
+- /* pstate stuck check after watermark update */
+- dcn10_verify_allow_pstate_change_high(dc);
+- }
+-
+ pipe_ctx->stream_res.tg->dlg_otg_param.vready_offset = pipe_ctx->pipe_dlg_param.vready_offset;
+ pipe_ctx->stream_res.tg->dlg_otg_param.vstartup_start = pipe_ctx->pipe_dlg_param.vstartup_start;
+ pipe_ctx->stream_res.tg->dlg_otg_param.vupdate_offset = pipe_ctx->pipe_dlg_param.vupdate_offset;
+@@ -2094,11 +2089,6 @@ static void program_all_pipe_in_tree(
+ dc->hwss.set_output_transfer_func(pipe_ctx, pipe_ctx->stream);
+ }
+
+- if (dc->debug.sanity_checks) {
+- /* pstate stuck check after each pipe is programmed */
+- dcn10_verify_allow_pstate_change_high(dc);
+- }
+-
+ if (pipe_ctx->bottom_pipe != NULL && pipe_ctx->bottom_pipe != pipe_ctx)
+ program_all_pipe_in_tree(dc, pipe_ctx->bottom_pipe, context);
+ }
+@@ -2183,6 +2173,7 @@ static void dcn10_apply_ctx_for_surface(
+ struct timing_generator *tg;
+ bool removed_pipe[4] = { false };
+ unsigned int ref_clk_mhz = dc->res_pool->ref_clock_inKhz/1000;
++ bool program_water_mark = false;
+
+ struct pipe_ctx *top_pipe_to_program =
+ find_top_pipe_for_stream(dc, context, stream);
+@@ -2192,9 +2183,6 @@ static void dcn10_apply_ctx_for_surface(
+
+ tg = top_pipe_to_program->stream_res.tg;
+
+- if (dc->debug.sanity_checks)
+- dcn10_verify_allow_pstate_change_high(dc);
+-
+ tg->funcs->lock(tg);
+
+ if (num_planes == 0) {
+@@ -2261,24 +2249,31 @@ static void dcn10_apply_ctx_for_surface(
+ for (i = 0; i < dc->res_pool->pipe_count; i++) {
+ struct pipe_ctx *old_pipe_ctx =
+ &dc->current_state->res_ctx.pipe_ctx[i];
++ struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[i];
++
++ if (pipe_ctx->stream == stream &&
++ pipe_ctx->plane_state &&
++ pipe_ctx->plane_state->update_flags.bits.full_update)
++ program_water_mark = true;
+
+ if (removed_pipe[i] && num_planes == 0)
+ dcn10_disable_plane(dc, old_pipe_ctx);
+ }
+
+- if (dc->debug.sanity_checks) {
+- /* pstate stuck check after watermark update */
+- dcn10_verify_allow_pstate_change_high(dc);
+- }
+- /* watermark is for all pipes */
+- hubbub1_program_watermarks(dc->res_pool->hubbub,
+- &context->bw.dcn.watermarks, ref_clk_mhz);
++ if (program_water_mark) {
++ if (dc->debug.sanity_checks) {
++ /* pstate stuck check after watermark update */
++ dcn10_verify_allow_pstate_change_high(dc);
++ }
++ /* watermark is for all pipes */
++ hubbub1_program_watermarks(dc->res_pool->hubbub,
++ &context->bw.dcn.watermarks, ref_clk_mhz);
+
+- if (dc->debug.sanity_checks) {
+- /* pstate stuck check after watermark update */
+- dcn10_verify_allow_pstate_change_high(dc);
++ if (dc->debug.sanity_checks) {
++ /* pstate stuck check after watermark update */
++ dcn10_verify_allow_pstate_change_high(dc);
++ }
+ }
+-
+ /* dm_logger_write(dc->ctx->logger, LOG_BANDWIDTH_CALCS,
+ "\n============== Watermark parameters ==============\n"
+ "a.urgent_ns: %d \n"
+@@ -2326,9 +2321,6 @@ static void dcn10_apply_ctx_for_surface(
+ context->bw.dcn.watermarks.d.pte_meta_urgent_ns
+ );
+ */
+-
+- if (dc->debug.sanity_checks)
+- dcn10_verify_allow_pstate_change_high(dc);
+ }
+
+ static void dcn10_set_bandwidth(
+--
+2.7.4
+