aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorVladimir Stempen <vladimir.stempen@amd.com>2023-01-17 14:14:42 -0500
committerAlex Deucher <alexander.deucher@amd.com>2023-01-31 14:01:51 -0500
commit972243f973eb0821084e5833d5f7f4ed025f42da (patch)
treee644715d3632694515e27741a9b6b6500bfffd5f
parentdrm/amd/display: Fix only one ABM pipe enabled under ODM combined case (diff)
downloadwireguard-linux-972243f973eb0821084e5833d5f7f4ed025f42da.tar.xz
wireguard-linux-972243f973eb0821084e5833d5f7f4ed025f42da.zip
drm/amd/display: fix FCLK pstate change underflow
[Why] Currently we set FCLK p-state change watermark calculated based on dummy p-state latency when UCLK p-state is not supported [How] Calculate FCLK p-state change watermark based on on FCLK pstate change latency in case UCLK p-state is not supported Reviewed-by: Nevenko Stupar <Nevenko.Stupar@amd.com> Acked-by: Alex Hung <alex.hung@amd.com> Signed-off-by: Vladimir Stempen <vladimir.stempen@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c b/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
index 0dc1a03999b6..28e9f3644bf4 100644
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
@@ -2126,6 +2126,10 @@ void dcn32_calculate_wm_and_dlg_fpu(struct dc *dc, struct dc_state *context,
*/
context->bw_ctx.bw.dcn.watermarks.a = context->bw_ctx.bw.dcn.watermarks.c;
context->bw_ctx.bw.dcn.watermarks.a.cstate_pstate.pstate_change_ns = 0;
+ /* Calculate FCLK p-state change watermark based on FCLK pstate change latency in case
+ * UCLK p-state is not supported, to avoid underflow in case FCLK pstate is supported
+ */
+ context->bw_ctx.bw.dcn.watermarks.a.cstate_pstate.fclk_pstate_change_ns = get_fclk_watermark(&context->bw_ctx.dml, pipes, pipe_cnt) * 1000;
} else {
/* Set A:
* All clocks min.