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.

Signed-off-by: Rodrigo Siqueira <rodrigo.sique...@amd.com>
Co-developed-by: Aurabindo Pillai <aurabindo.pil...@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pil...@amd.com>
---
 drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c 
b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
index e001b138b2ac..ba2d4347f722 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
@@ -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]);
-- 
2.38.0

Reply via email to