drm/amd/display: Handle seamless boot stream
authorRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Tue, 18 Oct 2022 12:28:22 +0000 (08:28 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 24 Oct 2022 18:34:46 +0000 (14:34 -0400)
A seamless boot stream has hardware resources assigned to it, and adding
a new stream means rebuilding the current assignment. It is desirable to
avoid this situation since it may cause light-up issues on the VGA
monitor on USB-C. This commit swaps the seamless boot stream to pipe 0
(if necessary) to ensure that the pipe context matches.

Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Co-developed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_resource.c

index e001b13..ba2d434 100644 (file)
@@ -2765,6 +2765,21 @@ enum dc_status dc_validate_with_context(struct dc *dc,
                        goto fail;
        }
 
+       /* Swap seamless boot stream to pipe 0 (if needed) to ensure pipe_ctx
+        * matches. This may change in the future if seamless_boot_stream can be
+        * multiple.
+        */
+       for (i = 0; i < add_streams_count; i++) {
+               mark_seamless_boot_stream(dc, add_streams[i]);
+               if (add_streams[i]->apply_seamless_boot_optimization && i != 0) {
+                       struct dc_stream_state *temp = add_streams[0];
+
+                       add_streams[0] = add_streams[i];
+                       add_streams[i] = temp;
+                       break;
+               }
+       }
+
        /* Add new streams and then add all planes for the new stream */
        for (i = 0; i < add_streams_count; i++) {
                calculate_phy_pix_clks(add_streams[i]);