From: Alex Hung <alex.h...@amd.com>

[ Upstream commit 8adbb2a98b00926315fd513b5fe2596b5716b82d ]

[WHAT & HOW]
hpo_stream_to_link_encoder_mapping has size MAX_HPO_DP2_ENCODERS(=4),
but location can have size up to 6. As a result, it is necessary to
check location against MAX_HPO_DP2_ENCODERS.

Similiarly, disp_cfg_stream_location can be used as an array index which
should be 0..5, so the ASSERT's conditions should be less without equal.

Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3904
Reviewed-by: Austin Zheng <austin.zh...@amd.com>
Reviewed-by: Rodrigo Siqueira <rodrigo.sique...@amd.com>
Signed-off-by: Alex Hung <alex.h...@amd.com>
Tested-by: Daniel Wheeler <daniel.whee...@amd.com>
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 .../amd/display/dc/dml2/dml21/dml21_translation_helper.c    | 4 ++--
 .../gpu/drm/amd/display/dc/dml2/dml2_translation_helper.c   | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git 
a/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_translation_helper.c 
b/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_translation_helper.c
index c6a5a86146797..de2b6e954fbd2 100644
--- a/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_translation_helper.c
+++ b/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_translation_helper.c
@@ -1010,7 +1010,7 @@ bool dml21_map_dc_state_into_dml_display_cfg(const struct 
dc *in_dc, struct dc_s
                if (disp_cfg_stream_location < 0)
                        disp_cfg_stream_location = dml_dispcfg->num_streams++;
 
-               ASSERT(disp_cfg_stream_location >= 0 && 
disp_cfg_stream_location <= __DML2_WRAPPER_MAX_STREAMS_PLANES__);
+               ASSERT(disp_cfg_stream_location >= 0 && 
disp_cfg_stream_location < __DML2_WRAPPER_MAX_STREAMS_PLANES__);
                
populate_dml21_timing_config_from_stream_state(&dml_dispcfg->stream_descriptors[disp_cfg_stream_location].timing,
 context->streams[stream_index], dml_ctx);
                
adjust_dml21_hblank_timing_config_from_pipe_ctx(&dml_dispcfg->stream_descriptors[disp_cfg_stream_location].timing,
 &context->res_ctx.pipe_ctx[stream_index]);
                
populate_dml21_output_config_from_stream_state(&dml_dispcfg->stream_descriptors[disp_cfg_stream_location].output,
 context->streams[stream_index], &context->res_ctx.pipe_ctx[stream_index]);
@@ -1035,7 +1035,7 @@ bool dml21_map_dc_state_into_dml_display_cfg(const struct 
dc *in_dc, struct dc_s
                                if (disp_cfg_plane_location < 0)
                                        disp_cfg_plane_location = 
dml_dispcfg->num_planes++;
 
-                               ASSERT(disp_cfg_plane_location >= 0 && 
disp_cfg_plane_location <= __DML2_WRAPPER_MAX_STREAMS_PLANES__);
+                               ASSERT(disp_cfg_plane_location >= 0 && 
disp_cfg_plane_location < __DML2_WRAPPER_MAX_STREAMS_PLANES__);
 
                                
populate_dml21_surface_config_from_plane_state(in_dc, 
&dml_dispcfg->plane_descriptors[disp_cfg_plane_location].surface, 
context->stream_status[stream_index].plane_states[plane_index]);
                                
populate_dml21_plane_config_from_plane_state(dml_ctx, 
&dml_dispcfg->plane_descriptors[disp_cfg_plane_location], 
context->stream_status[stream_index].plane_states[plane_index], context, 
stream_index);
diff --git a/drivers/gpu/drm/amd/display/dc/dml2/dml2_translation_helper.c 
b/drivers/gpu/drm/amd/display/dc/dml2/dml2_translation_helper.c
index bde4250853b10..81ba8809a3b4c 100644
--- a/drivers/gpu/drm/amd/display/dc/dml2/dml2_translation_helper.c
+++ b/drivers/gpu/drm/amd/display/dc/dml2/dml2_translation_helper.c
@@ -746,7 +746,7 @@ static void 
populate_dml_output_cfg_from_stream_state(struct dml_output_cfg_st *
        case SIGNAL_TYPE_DISPLAY_PORT_MST:
        case SIGNAL_TYPE_DISPLAY_PORT:
                out->OutputEncoder[location] = dml_dp;
-               if 
(dml2->v20.scratch.hpo_stream_to_link_encoder_mapping[location] != -1)
+               if (location < MAX_HPO_DP2_ENCODERS && 
dml2->v20.scratch.hpo_stream_to_link_encoder_mapping[location] != -1)
                        
out->OutputEncoder[dml2->v20.scratch.hpo_stream_to_link_encoder_mapping[location]]
 = dml_dp2p0;
                break;
        case SIGNAL_TYPE_EDP:
@@ -1303,7 +1303,7 @@ void map_dc_state_into_dml_display_cfg(struct 
dml2_context *dml2, struct dc_stat
                if (disp_cfg_stream_location < 0)
                        disp_cfg_stream_location = dml_dispcfg->num_timings++;
 
-               ASSERT(disp_cfg_stream_location >= 0 && 
disp_cfg_stream_location <= __DML2_WRAPPER_MAX_STREAMS_PLANES__);
+               ASSERT(disp_cfg_stream_location >= 0 && 
disp_cfg_stream_location < __DML2_WRAPPER_MAX_STREAMS_PLANES__);
 
                populate_dml_timing_cfg_from_stream_state(&dml_dispcfg->timing, 
disp_cfg_stream_location, context->streams[i]);
                populate_dml_output_cfg_from_stream_state(&dml_dispcfg->output, 
disp_cfg_stream_location, context->streams[i], current_pipe_context, dml2);
@@ -1343,7 +1343,7 @@ void map_dc_state_into_dml_display_cfg(struct 
dml2_context *dml2, struct dc_stat
                                if (disp_cfg_plane_location < 0)
                                        disp_cfg_plane_location = 
dml_dispcfg->num_surfaces++;
 
-                               ASSERT(disp_cfg_plane_location >= 0 && 
disp_cfg_plane_location <= __DML2_WRAPPER_MAX_STREAMS_PLANES__);
+                               ASSERT(disp_cfg_plane_location >= 0 && 
disp_cfg_plane_location < __DML2_WRAPPER_MAX_STREAMS_PLANES__);
 
                                
populate_dml_surface_cfg_from_plane_state(dml2->v20.dml_core_ctx.project, 
&dml_dispcfg->surface, disp_cfg_plane_location, 
context->stream_status[i].plane_states[j]);
                                populate_dml_plane_cfg_from_plane_state(
-- 
2.39.5

Reply via email to