From: Noah Abradjian <noah.abradj...@amd.com>

[Why]
Currently, pipe resources are assigned to an index that matches the pipe 
position.
However, if pipe 1 or 2 is disabled, there will be a gap in the arrays which 
causes a crash when iterating based on pipe_count.

[How]
Fix resource construct to assign resources to minimum available array index.

Signed-off-by: Noah Abradjian <noah.abradj...@amd.com>
Reviewed-by: Yongqiang Sun <yongqiang....@amd.com>
Acked-by: Rodrigo Siqueira <rodrigo.sique...@amd.com>
---
 .../drm/amd/display/dc/dcn21/dcn21_resource.c | 20 +++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c 
b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
index 98f0267300a0..a662769b0c48 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
@@ -1774,41 +1774,41 @@ static bool dcn21_resource_construct(
                if ((pipe_fuses & (1 << i)) != 0)
                        continue;
 
-               pool->base.hubps[i] = dcn21_hubp_create(ctx, i);
-               if (pool->base.hubps[i] == NULL) {
+               pool->base.hubps[j] = dcn21_hubp_create(ctx, i);
+               if (pool->base.hubps[j] == NULL) {
                        BREAK_TO_DEBUGGER();
                        dm_error(
                                "DC: failed to create memory input!\n");
                        goto create_fail;
                }
 
-               pool->base.ipps[i] = dcn21_ipp_create(ctx, i);
-               if (pool->base.ipps[i] == NULL) {
+               pool->base.ipps[j] = dcn21_ipp_create(ctx, i);
+               if (pool->base.ipps[j] == NULL) {
                        BREAK_TO_DEBUGGER();
                        dm_error(
                                "DC: failed to create input pixel 
processor!\n");
                        goto create_fail;
                }
 
-               pool->base.dpps[i] = dcn21_dpp_create(ctx, i);
-               if (pool->base.dpps[i] == NULL) {
+               pool->base.dpps[j] = dcn21_dpp_create(ctx, i);
+               if (pool->base.dpps[j] == NULL) {
                        BREAK_TO_DEBUGGER();
                        dm_error(
                                "DC: failed to create dpps!\n");
                        goto create_fail;
                }
 
-               pool->base.opps[i] = dcn21_opp_create(ctx, i);
-               if (pool->base.opps[i] == NULL) {
+               pool->base.opps[j] = dcn21_opp_create(ctx, i);
+               if (pool->base.opps[j] == NULL) {
                        BREAK_TO_DEBUGGER();
                        dm_error(
                                "DC: failed to create output pixel 
processor!\n");
                        goto create_fail;
                }
 
-               pool->base.timing_generators[i] = dcn21_timing_generator_create(
+               pool->base.timing_generators[j] = dcn21_timing_generator_create(
                                ctx, i);
-               if (pool->base.timing_generators[i] == NULL) {
+               if (pool->base.timing_generators[j] == NULL) {
                        BREAK_TO_DEBUGGER();
                        dm_error("DC: failed to create tg!\n");
                        goto create_fail;
-- 
2.24.0

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to