From: Wenjing Liu <[email protected]>

[Why]
The UTM QoS model population indexed into a firmware-provided
table without checking whether it reported any load levels or
SOPs, leaving a malformed table treated as valid instead of absent.

[How]
Bail out early and clear the output model pointer when the load
level count or SOP count is zero.

Reviewed-by: Alvin Lee <[email protected]>
Signed-off-by: Wenjing Liu <[email protected]>
Signed-off-by: James Lin <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn60/dcn60_clk_mgr.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn60/dcn60_clk_mgr.c 
b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn60/dcn60_clk_mgr.c
index 40e975e8a550..218856c5fe09 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn60/dcn60_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn60/dcn60_clk_mgr.c
@@ -625,6 +625,11 @@ static void dcn60_populate_utm_qos_model(
        const SocUtmTable_t *utm_table = &init_table->UtmTable;
        unsigned int ll, sop;
 
+       if (utm_table->Header.LoadLevelCount == 0 || utm_table->Header.SopCount 
== 0) {
+               *qos_model = NULL;
+               return;
+       }
+
        memset(dchub, 0, sizeof(*dchub));
        dchub->load_level_count = (uint8_t)utm_table->Header.LoadLevelCount;
        dchub->sop_count = (uint8_t)utm_table->Header.SopCount;
-- 
2.43.0

Reply via email to