From c84879b7633f16e0af616fbd65a944f1d10ab8ea Mon Sep 17 00:00:00 2001 From: Wenjing Liu Date: Thu, 3 Sep 2026 17:25:26 -0400 Subject: [PATCH] drm/amd/display: Fix DCN60 UTM QoS override for invalid PMFW table [Why] The QoS model override for a display IP block was silently skipped whenever the firmware-populated table was invalid. [How] Always re-point the bandwidth params at the driver's own persistent QoS model storage before applying the override, instead of returning early when the firmware-populated model is NULL. Signed-off-by: Wenjing Liu Signed-off-by: Fangzhi Zuo Reviewed-by: Alvin Lee Tested-by: Dan Wheeler Signed-off-by: Alex Deucher --- .../display/dc/clk_mgr/dcn60/dcn60_clk_mgr.c | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) 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 338f477b192e..bd2601cbbcfd 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 @@ -706,20 +706,18 @@ static void dcn60_copy_utm_qos_model_to_soc_table( /** * dcn60_override_utm_qos_model - Override the UTM QoS model. + * @clk_mgr: clock manager instance * @bw_params: clock manager bandwidth parameters */ -static void dcn60_override_utm_qos_model(struct clk_bw_params *bw_params) +static void dcn60_override_utm_qos_model(struct clk_mgr_internal *clk_mgr, + struct clk_bw_params *bw_params) { - struct utm_qos_model *qos_model; - struct utm_qos_model_dchub_v3 *dchub; + struct dcn60_clk_mgr *dcn60_clk_mgr = + container_of(clk_mgr, struct dcn60_clk_mgr, base); + struct utm_qos_model *qos_model = &dcn60_clk_mgr->utm_qos_model; + struct utm_qos_model_dchub_v3 *dchub = &dcn60_clk_mgr->dchub_v3; - if (!bw_params->utm_qos_model - || bw_params->utm_qos_model->version != utm_qos_model_version_v3 - || !bw_params->utm_qos_model->dchub_v3) - return; - - qos_model = (struct utm_qos_model *)bw_params->utm_qos_model; - dchub = (struct utm_qos_model_dchub_v3 *)qos_model->dchub_v3; + bw_params->utm_qos_model = qos_model; dcn6_test_initialize_utm_qos_model_v3(qos_model, dchub); @@ -735,7 +733,7 @@ static void dcn60_override_bw_params(struct clk_mgr_internal *clk_mgr, dcn60_override_dc_mode_limit(clk_mgr, bw_params); if (dcn60_should_apply_temp_utm_override) - dcn60_override_utm_qos_model(bw_params); + dcn60_override_utm_qos_model(clk_mgr, bw_params); } /**