]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
drm/amd/display: Initialise encoder assignment when initialising dc_state
authorJimmy Kizito <Jimmy.Kizito@amd.com>
Tue, 17 May 2022 08:28:00 +0000 (10:28 +0200)
committerStefan Bader <stefan.bader@canonical.com>
Wed, 15 Jun 2022 12:12:52 +0000 (14:12 +0200)
BugLink: https://bugs.launchpad.net/bugs/1971417
[Why]
Link encoder assignment tracking variables need to be (re)initialised
whenever dc_state is (re)initialised. Otherwise variables used for
dynamic encoder assignment (especially the link encoder availability
pool) are out of sync with dc_state and future encoder assignments are
invalid.

[How]
Initialise encoder assignment variables when creating new dc_state
resource.

Reviewed-by: Jun Lei <Jun.Lei@amd.com>
Acked-by: Anson Jacob <Anson.Jacob@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Jimmy Kizito <Jimmy.Kizito@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 7a47c8820a1d97e6cb5bcef6b65529f1389b0e13)
Signed-off-by: Koba Ko <koba.ko@canonical.com>
Acked-by: Tim Gardner <tim.gardner@canonical.com>
Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
Signed-off-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
drivers/gpu/drm/amd/display/dc/core/dc.c
drivers/gpu/drm/amd/display/dc/core/dc_link_enc_cfg.c
drivers/gpu/drm/amd/display/dc/core/dc_resource.c
drivers/gpu/drm/amd/display/dc/inc/link_enc_cfg.h

index 5a36bf97c250ea7c7d2a408171ef389ecb8d8849..fde19da86e30de8690336e94486b166a16e1c98d 100644 (file)
@@ -1001,8 +1001,6 @@ static bool dc_construct(struct dc *dc,
                goto fail;
        }
 
-       dc_resource_state_construct(dc, dc->current_state);
-
        if (!create_links(dc, init_params->num_virtual_links))
                goto fail;
 
@@ -1012,8 +1010,7 @@ static bool dc_construct(struct dc *dc,
        if (!create_link_encoders(dc))
                goto fail;
 
-       /* Initialise DIG link encoder resource tracking variables. */
-       link_enc_cfg_init(dc, dc->current_state);
+       dc_resource_state_construct(dc, dc->current_state);
 
        return true;
 
index 5376e1d7d69a24c9f3e1c613df2175dcb0ad7a3d..8f8c4482444e2021590011d9828d463bc6da350a 100644 (file)
@@ -227,7 +227,7 @@ static struct link_encoder *get_link_enc_used_by_link(
        return link_enc;
 }
 /* Clear all link encoder assignments. */
-static void clear_enc_assignments(struct dc *dc, struct dc_state *state)
+static void clear_enc_assignments(const struct dc *dc, struct dc_state *state)
 {
        int i;
 
@@ -246,7 +246,7 @@ static void clear_enc_assignments(struct dc *dc, struct dc_state *state)
 }
 
 void link_enc_cfg_init(
-               struct dc *dc,
+               const struct dc *dc,
                struct dc_state *state)
 {
        clear_enc_assignments(dc, state);
index 3e36eb9a479758d24724c4b54c5e34ff42a6a76d..1ff43caf2392ea7c3a4ba19956d84c05294a773a 100644 (file)
@@ -2118,6 +2118,9 @@ void dc_resource_state_construct(
                struct dc_state *dst_ctx)
 {
        dst_ctx->clk_mgr = dc->clk_mgr;
+
+       /* Initialise DIG link encoder resource tracking variables. */
+       link_enc_cfg_init(dc, dst_ctx);
 }
 
 
index 83b2199b2c83f52451c3c53646b71be996ad0a3b..cfacc7f2f238be92931a7a8ad096938c076a9413 100644 (file)
@@ -36,7 +36,7 @@
  * Initialise link encoder resource tracking.
  */
 void link_enc_cfg_init(
-               struct dc *dc,
+               const struct dc *dc,
                struct dc_state *state);
 
 /*