dc->clk_mgr is checked for NULL earlier in dcn50_init_hw() and
dcn60_init_hw(), but dcn50_initialize_min_clocks() and
dcn401_initialize_min_clocks() are called without any guard,
causing Smatch to report potential NULL dereferences.

Guard both call sites with the same pattern used throughout
both functions:

  if (dc->clk_mgr && dc->clk_mgr->funcs)

Also fix dcn50_initialize_min_clocks() which calls
get_dispclk_from_dentist without checking the function pointer,
unlike the dcn401 equivalent which guards that call.

Fix kernel-doc in dcn60_hwseq.c by adding missing parameter descriptions
for @probe in dcn60_update_probe_status() and @type in
is_probe_measurement_type_for_hubbub().

Fixes: 04d9a88decbc ("drm/amd/display: Add new sources for DCN6")
Reported-by: Dan Carpenter <[email protected]>
Cc: Aurabindo Pillai <[email protected]>
Cc: Ivan Lipski <[email protected]>
Cc: Dan Wheeler <[email protected]>
Cc: Roman Li <[email protected]>
Cc: Alex Hung <[email protected]>
Cc: Tom Chung <[email protected]>
Signed-off-by: Srinivasan Shanmugam <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/hwss/dcn50/dcn50_hwseq.c | 7 +++++--
 drivers/gpu/drm/amd/display/dc/hwss/dcn60/dcn60_hwseq.c | 5 ++++-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn50/dcn50_hwseq.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn50/dcn50_hwseq.c
index 8b63e75e5ee2..a02f03311da9 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn50/dcn50_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn50/dcn50_hwseq.c
@@ -67,7 +67,9 @@ static void dcn50_initialize_min_clocks(struct dc *dc)
                 * audio corruption. Read current DISPCLK from DENTIST and 
request the same
                 * freq to ensure that the timing is valid and unchanged.
                 */
-               clocks->dispclk_khz = 
dc->clk_mgr->funcs->get_dispclk_from_dentist(dc->clk_mgr);
+                       if (dc->clk_mgr->funcs->get_dispclk_from_dentist)
+                               clocks->dispclk_khz =
+                                       
dc->clk_mgr->funcs->get_dispclk_from_dentist(dc->clk_mgr);
        }
        clocks->ref_dtbclk_khz = 
dc->clk_mgr->bw_params->clk_table.entries[0].dtbclk_mhz * 1000;
        clocks->fclk_p_state_change_support = true;
@@ -644,7 +646,8 @@ void dcn50_init_hw(struct dc *dc)
                        
dc->res_pool->hubbub->funcs->allow_self_refresh_control(dc->res_pool->hubbub,
                                        
!dc->res_pool->hubbub->ctx->dc->debug.disable_stutter);
 
-               dcn50_initialize_min_clocks(dc);
+               if (dc->clk_mgr && dc->clk_mgr->funcs)
+                       dcn50_initialize_min_clocks(dc);
 
                /* On HW init, allow idle optimizations after pipes have been 
turned off.
                 *
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn60/dcn60_hwseq.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn60/dcn60_hwseq.c
index a13d36ad8a9c..ef1c10bc9bfa 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn60/dcn60_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn60/dcn60_hwseq.c
@@ -769,7 +769,8 @@ void dcn60_init_hw(struct dc *dc)
                        
dc->res_pool->hubbub->funcs->allow_self_refresh_control(dc->res_pool->hubbub,
                                
!dc->res_pool->hubbub->ctx->dc->debug.disable_stutter);
 
-               dcn401_initialize_min_clocks(dc);
+               if (dc->clk_mgr && dc->clk_mgr->funcs)
+                       dcn401_initialize_min_clocks(dc);
 
                /* On HW init, allow idle optimizations after pipes have been 
turned off.
                 *
@@ -1150,6 +1151,7 @@ static void dcn60_build_hubbub_perfmon_sequence(
 /**
  * dcn60_update_probe_status - Set the valid flag on a latched probe result.
  * @status: result sink whose u was written by the GET BLS step during execute
+ * @probe: current probe state used to determine measurement type and validity
  */
 static void dcn60_update_probe_status(
                struct dc_probe_status *status,
@@ -1187,6 +1189,7 @@ static void dcn60_update_probe_status(
 /**
  * is_probe_measurement_type_for_hubbub - Returns true if the probe type is
  * served by the hubbub perfmon block on DCN60.
+ * @type: the probe measurement type to classify
  */
 static bool is_probe_measurement_type_for_hubbub(enum dc_probe_type type)
 {
-- 
2.34.1

Reply via email to