Skip to content

Commit

Permalink
drm/amd/display: Use switch table for dc_to_smu_clock_type
Browse files Browse the repository at this point in the history
Using a static int array will cause errors if the given dm_pp_clk_type
is out-of-bounds. For robustness, use a switch table, with a default
case to handle all invalid values.

v2: 0 is a valid clock type for smu_clk_type. Return SMU_CLK_COUNT
    instead on invalid mapping.

Signed-off-by: Leo Li <sunpeng.li@amd.com>
Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
  • Loading branch information
Leo Li authored and Alex Deucher committed Aug 2, 2019
1 parent d196bbb commit d9ec5cf
Showing 1 changed file with 25 additions and 12 deletions.
37 changes: 25 additions & 12 deletions drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,18 +151,31 @@ static void get_default_clock_levels(
static enum smu_clk_type dc_to_smu_clock_type(
enum dm_pp_clock_type dm_pp_clk_type)
{
#define DCCLK_MAP_SMUCLK(dcclk, smuclk) \
[dcclk] = smuclk

static int dc_clk_type_map[] = {
DCCLK_MAP_SMUCLK(DM_PP_CLOCK_TYPE_DISPLAY_CLK, SMU_DISPCLK),
DCCLK_MAP_SMUCLK(DM_PP_CLOCK_TYPE_ENGINE_CLK, SMU_GFXCLK),
DCCLK_MAP_SMUCLK(DM_PP_CLOCK_TYPE_MEMORY_CLK, SMU_MCLK),
DCCLK_MAP_SMUCLK(DM_PP_CLOCK_TYPE_DCEFCLK, SMU_DCEFCLK),
DCCLK_MAP_SMUCLK(DM_PP_CLOCK_TYPE_SOCCLK, SMU_SOCCLK),
};

return dc_clk_type_map[dm_pp_clk_type];
enum smu_clk_type smu_clk_type = SMU_CLK_COUNT;

switch (dm_pp_clk_type) {
case DM_PP_CLOCK_TYPE_DISPLAY_CLK:
smu_clk_type = SMU_DISPCLK;
break;
case DM_PP_CLOCK_TYPE_ENGINE_CLK:
smu_clk_type = SMU_GFXCLK;
break;
case DM_PP_CLOCK_TYPE_MEMORY_CLK:
smu_clk_type = SMU_MCLK;
break;
case DM_PP_CLOCK_TYPE_DCEFCLK:
smu_clk_type = SMU_DCEFCLK;
break;
case DM_PP_CLOCK_TYPE_SOCCLK:
smu_clk_type = SMU_SOCCLK;
break;
default:
DRM_ERROR("DM_PPLIB: invalid clock type: %d!\n",
dm_pp_clk_type);
break;
}

return smu_clk_type;
}

static enum amd_pp_clock_type dc_to_pp_clock_type(
Expand Down

0 comments on commit d9ec5cf

Please sign in to comment.