mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 22:14:03 +02:00
drm/amd/display: Fix NULL dereference in dcn50/dcn60 init_hw
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: 7f7d7ea1fa ("drm/amd/display: Add new sources for DCN6")
Reported-by: Dan Carpenter <error27@gmail.com>
Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
Cc: Ivan Lipski <ivan.lipski@amd.com>
Cc: Dan Wheeler <daniel.wheeler@amd.com>
Cc: Roman Li <roman.li@amd.com>
Cc: Alex Hung <alex.hung@amd.com>
Cc: Tom Chung <chiahsuan.chung@amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Reviewed-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 325c9a827cdd748e126eafeadaffc556204773d2)
This commit is contained in:
parent
8ee521b8b1
commit
0d2f4cfa56
|
|
@ -67,7 +67,8 @@ 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;
|
||||
|
|
@ -639,7 +640,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.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -643,7 +643,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.
|
||||
*
|
||||
|
|
@ -1001,6 +1002,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)
|
||||
{
|
||||
|
|
@ -1024,6 +1026,7 @@ static void dcn60_update_probe_status(struct dc_probe_status *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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user