OSDN Git Service

drm/amd/display: Block zstate when more than one plane enabled
authorEric Yang <Eric.Yang2@amd.com>
Thu, 10 Mar 2022 22:20:38 +0000 (17:20 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Mar 2022 18:41:28 +0000 (14:41 -0400)
[Why]
Currently Z10 save/restore only covers 1 plane case. If we enter
Z10 with 2 planes enabled, 1 of the 2 planes will not be restored.
causing black screen.

[How]
Disable Zstate when more than 1 plane is enabled. Right now Z9 enable
but Z10 disable is not a supported config, so we disable both.

Reviewed-by: Nicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
Reviewed-by: Nevenko Stupar <Nevenko.Stupar@amd.com>
Acked-by: Agustin Gutierrez <agustin.gutierrez@amd.com>
Signed-off-by: Eric Yang <Eric.Yang2@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c

index 7cc8c78..2f61221 100644 (file)
@@ -730,18 +730,22 @@ static enum dcn_zstate_support_state  decide_zstate_support(struct dc *dc, struc
        }
 
        /*
-        * Zstate is allowed in following scenarios:
-        *      1. Single eDP with PSR enabled
-        *      2. 0 planes (No memory requests)
-        *      3. Single eDP without PSR but > 5ms stutter period
+        * Z9 and Z10 allowed cases:
+        *      1. 0 Planes enabled
+        *      2. single eDP, on link 0, 1 plane and stutter period > 5ms
+        * Z10 only cases:
+        *      1. single eDP, on link 0, 1 plane and stutter period >= 5ms
+        * Zstate not allowed cases:
+        *      1. Everything else
         */
        if (plane_count == 0)
                return DCN_ZSTATE_SUPPORT_ALLOW;
        else if (context->stream_count == 1 &&  context->streams[0]->signal == SIGNAL_TYPE_EDP) {
                struct dc_link *link = context->streams[0]->sink->link;
+               struct dc_stream_status *stream_status = &context->stream_status[0];
 
-               /* zstate only supported on PWRSEQ0 */
-               if (link->link_index != 0)
+               /* zstate only supported on PWRSEQ0  and when there's <2 planes*/
+               if (link->link_index != 0 || stream_status->plane_count > 1)
                        return DCN_ZSTATE_SUPPORT_DISALLOW;
 
                if (context->bw_ctx.dml.vba.StutterPeriod > 5000.0)