[AMD Official Use Only - Internal Distribution Only]

As workaround, the patch looks good.
Reviewed-by: Hersen Wu <hersenxs...@amd.com>

-----Original Message-----
From: Nicholas Kazlauskas <nicholas.kazlaus...@amd.com> 
Sent: Tuesday, June 2, 2020 8:54 PM
To: amd-gfx@lists.freedesktop.org
Cc: Kazlauskas, Nicholas <nicholas.kazlaus...@amd.com>; Wu, Hersen 
<hersenxs...@amd.com>; Wentland, Harry <harry.wentl...@amd.com>; Li, Sun peng 
(Leo) <sunpeng...@amd.com>
Subject: [PATCH] drm/amd/display: Revalidate bandwidth before commiting DC 
updates

[Why]
Whenever we switch between tiled formats without also switching pixel formats 
or doing anything else that recreates the DC plane state we can run into 
underflow or hangs since we're not updating the DML parameters before 
committing to the hardware.

[How]
If the update type is FULL then call validate_bandwidth again to update the DML 
parmeters before committing the state.

This is basically just a workaround and protective measure against update types 
being added DC where we could run into this issue in the future.

We can only fully validate the state in advance before applying it to the 
hardware if we recreate all the plane and stream states since we can't modify 
what's currently in use.

The next step is to update DM to ensure that we're creating the plane and 
stream states for whatever could potentially be a full update in DC to 
pre-emptively recreate the state for DC global validation.

The workaround can stay until this has been fixed in DM.

Cc: Hersen Wu <hersenxs...@amd.com>
Cc: Harry Wentland <harry.wentl...@amd.com>
Cc: Leo Li <sunpeng...@amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlaus...@amd.com>
---
 drivers/gpu/drm/amd/display/dc/core/dc.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c 
b/drivers/gpu/drm/amd/display/dc/core/dc.c
index 04c3d9f7e323..00a4f679759f 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -2523,6 +2523,12 @@ void dc_commit_updates_for_stream(struct dc *dc,
 
        copy_stream_update_to_stream(dc, context, stream, stream_update);
 
+       if (!dc->res_pool->funcs->validate_bandwidth(dc, context, false)) {
+               DC_ERROR("Mode validation failed for stream update!\n");
+               dc_release_state(context);
+               return;
+       }
+
        commit_planes_for_stream(
                                dc,
                                srf_updates,
--
2.17.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to