drm/amd/display: Check if PSR enabled when entering MALL
authorAlvin Lee <Alvin.Lee2@amd.com>
Tue, 8 Nov 2022 23:46:52 +0000 (18:46 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 23 Nov 2022 14:47:14 +0000 (09:47 -0500)
[Description]
- When attempting to enter MALL SS when a PSR panel
  is connected, we have to check that the PSR panel
  has already entered PSR because the vsync interrupt
  call is per display index (can be called for the
  non-PSR panel first)
- Also don't override link settings when programming
  phantom stream (main and phantom pipe share the same link)

Reviewed-by: Jun Lei <Jun.Lei@amd.com>
Acked-by: Brian Chang <Brian.Chang@amd.com>
Signed-off-by: Alvin Lee <Alvin.Lee2@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/dce110/dce110_hw_sequencer.c
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c

index c5380ce7065358d233d88a677fb4cd001bafa127..913a1fe6b3dafb3e5c5385f4b1cb8d7ec8807e38 100644 (file)
@@ -1561,8 +1561,13 @@ static enum dc_status apply_single_controller_ctx_to_hw(
 
        pipe_ctx->plane_res.scl_data.lb_params.alpha_en = pipe_ctx->bottom_pipe != NULL;
 
-       pipe_ctx->stream->link->psr_settings.psr_feature_enabled = false;
-
+       /* Phantom and main stream share the same link (because the stream
+        * is constructed with the same sink). Make sure not to override
+        * and link programming on the main.
+        */
+       if (pipe_ctx->stream->mall_stream_config.type != SUBVP_PHANTOM) {
+               pipe_ctx->stream->link->psr_settings.psr_feature_enabled = false;
+       }
        return DC_OK;
 }
 
index 763311ffb9671ad41fefd1d411320c18d63a0092..61f129faf2519b1f9b3fa3babc3dfbe38ecf1cfc 100644 (file)
@@ -227,8 +227,13 @@ static uint32_t dcn32_calculate_cab_allocation(struct dc *dc, struct dc_state *c
        for (i = 0; i < dc->res_pool->pipe_count; i++) {
                struct pipe_ctx *pipe = &dc->current_state->res_ctx.pipe_ctx[i];
 
+               /* If PSR is supported on an eDP panel that's connected, but that panel is
+                * not in PSR at the time of trying to enter MALL SS, we have to include it
+                * in the static screen CAB calculation
+                */
                if (!pipe->stream || !pipe->plane_state ||
-                               pipe->stream->link->psr_settings.psr_version != DC_PSR_VERSION_UNSUPPORTED ||
+                               (pipe->stream->link->psr_settings.psr_version != DC_PSR_VERSION_UNSUPPORTED &&
+                               pipe->stream->link->psr_settings.psr_allow_active) ||
                                pipe->stream->mall_stream_config.type == SUBVP_PHANTOM)
                        continue;