aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4794-drm-amd-display-move-dcn-watermark-programming-to-se.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4794-drm-amd-display-move-dcn-watermark-programming-to-se.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4794-drm-amd-display-move-dcn-watermark-programming-to-se.patch170
1 files changed, 170 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4794-drm-amd-display-move-dcn-watermark-programming-to-se.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4794-drm-amd-display-move-dcn-watermark-programming-to-se.patch
new file mode 100644
index 00000000..8c1f1ce0
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4794-drm-amd-display-move-dcn-watermark-programming-to-se.patch
@@ -0,0 +1,170 @@
+From 4b5cdf02087ab62f1ee31ff6758920ff8d7ecc92 Mon Sep 17 00:00:00 2001
+From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Date: Thu, 24 May 2018 14:39:01 -0400
+Subject: [PATCH 4794/5725] drm/amd/display: move dcn watermark programming to
+ set_bandwidth
+
+Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@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>
+---
+ .../drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 107 ++++-----------------
+ drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h | 2 +-
+ 2 files changed, 19 insertions(+), 90 deletions(-)
+
+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 d78802e..da82c6a 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
+@@ -2234,8 +2234,6 @@ static void dcn10_apply_ctx_for_surface(
+ int i;
+ 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);
+ DC_LOGGER_INIT(dc->ctx->logger);
+@@ -2296,107 +2294,38 @@ static void dcn10_apply_ctx_for_surface(
+ if (num_planes == 0)
+ false_optc_underflow_wa(dc, stream, tg);
+
+- 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;
+-
++ for (i = 0; i < dc->res_pool->pipe_count; i++)
+ if (removed_pipe[i])
+- dcn10_disable_plane(dc, old_pipe_ctx);
+- }
+-
+- 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, true);
+-
+- if (dc->hwseq->wa.DEGVIDCN10_254)
+- hubbub1_wm_change_req_wa(dc->res_pool->hubbub);
++ dcn10_disable_plane(dc, &dc->current_state->res_ctx.pipe_ctx[i]);
+
+- if (dc->debug.sanity_checks) {
+- /* pstate stuck check after watermark update */
+- dcn10_verify_allow_pstate_change_high(dc);
+- }
+- }
+-/* DC_LOG_BANDWIDTH_CALCS(dc->ctx->logger,
+- "\n============== Watermark parameters ==============\n"
+- "a.urgent_ns: %d \n"
+- "a.cstate_enter_plus_exit: %d \n"
+- "a.cstate_exit: %d \n"
+- "a.pstate_change: %d \n"
+- "a.pte_meta_urgent: %d \n"
+- "b.urgent_ns: %d \n"
+- "b.cstate_enter_plus_exit: %d \n"
+- "b.cstate_exit: %d \n"
+- "b.pstate_change: %d \n"
+- "b.pte_meta_urgent: %d \n",
+- context->bw.dcn.watermarks.a.urgent_ns,
+- context->bw.dcn.watermarks.a.cstate_pstate.cstate_enter_plus_exit_ns,
+- context->bw.dcn.watermarks.a.cstate_pstate.cstate_exit_ns,
+- context->bw.dcn.watermarks.a.cstate_pstate.pstate_change_ns,
+- context->bw.dcn.watermarks.a.pte_meta_urgent_ns,
+- context->bw.dcn.watermarks.b.urgent_ns,
+- context->bw.dcn.watermarks.b.cstate_pstate.cstate_enter_plus_exit_ns,
+- context->bw.dcn.watermarks.b.cstate_pstate.cstate_exit_ns,
+- context->bw.dcn.watermarks.b.cstate_pstate.pstate_change_ns,
+- context->bw.dcn.watermarks.b.pte_meta_urgent_ns
+- );
+- DC_LOG_BANDWIDTH_CALCS(dc->ctx->logger,
+- "\nc.urgent_ns: %d \n"
+- "c.cstate_enter_plus_exit: %d \n"
+- "c.cstate_exit: %d \n"
+- "c.pstate_change: %d \n"
+- "c.pte_meta_urgent: %d \n"
+- "d.urgent_ns: %d \n"
+- "d.cstate_enter_plus_exit: %d \n"
+- "d.cstate_exit: %d \n"
+- "d.pstate_change: %d \n"
+- "d.pte_meta_urgent: %d \n"
+- "========================================================\n",
+- context->bw.dcn.watermarks.c.urgent_ns,
+- context->bw.dcn.watermarks.c.cstate_pstate.cstate_enter_plus_exit_ns,
+- context->bw.dcn.watermarks.c.cstate_pstate.cstate_exit_ns,
+- context->bw.dcn.watermarks.c.cstate_pstate.pstate_change_ns,
+- context->bw.dcn.watermarks.c.pte_meta_urgent_ns,
+- context->bw.dcn.watermarks.d.urgent_ns,
+- context->bw.dcn.watermarks.d.cstate_pstate.cstate_enter_plus_exit_ns,
+- context->bw.dcn.watermarks.d.cstate_pstate.cstate_exit_ns,
+- context->bw.dcn.watermarks.d.cstate_pstate.pstate_change_ns,
+- context->bw.dcn.watermarks.d.pte_meta_urgent_ns
+- );
+-*/
++ if (dc->hwseq->wa.DEGVIDCN10_254)
++ hubbub1_wm_change_req_wa(dc->res_pool->hubbub);
+ }
+
+ static void dcn10_set_bandwidth(
+ struct dc *dc,
+ struct dc_state *context,
+- bool decrease_allowed)
++ bool safe_to_lower)
+ {
+ if (dc->debug.sanity_checks)
+ dcn10_verify_allow_pstate_change_high(dc);
+
+- if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment))
+- return;
++ if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) {
++ if (context->stream_count == 0)
++ context->bw.dcn.clk.phyclk_khz = 0;
+
+- if (context->stream_count == 0)
+- context->bw.dcn.clk.phyclk_khz = 0;
++ dc->res_pool->dccg->funcs->update_clocks(
++ dc->res_pool->dccg,
++ &context->bw.dcn.clk,
++ safe_to_lower);
+
+- dc->res_pool->dccg->funcs->update_clocks(
+- dc->res_pool->dccg,
+- &context->bw.dcn.clk,
+- decrease_allowed);
++ dcn10_pplib_apply_display_requirements(dc, context);
++ }
+
+- dcn10_pplib_apply_display_requirements(dc, context);
++ hubbub1_program_watermarks(dc->res_pool->hubbub,
++ &context->bw.dcn.watermarks,
++ dc->res_pool->ref_clock_inKhz / 1000,
++ true);
+
+ if (dc->debug.sanity_checks)
+ dcn10_verify_allow_pstate_change_high(dc);
+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 1c94dae..2506601 100644
+--- a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
++++ b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
+@@ -172,7 +172,7 @@ struct hw_sequencer_funcs {
+ void (*set_bandwidth)(
+ struct dc *dc,
+ struct dc_state *context,
+- bool decrease_allowed);
++ bool safe_to_lower);
+
+ void (*set_drr)(struct pipe_ctx **pipe_ctx, int num_pipes,
+ int vmin, int vmax);
+--
+2.7.4
+