[PATCH] drm/amd/display: Use switch table for dc_to_smu_clock_type
Kazlauskas, Nicholas
Nicholas.Kazlauskas at amd.com
Thu Jul 25 17:48:19 UTC 2019
On 7/25/19 1:40 PM, sunpeng.li at amd.com wrote:
> From: Leo Li <sunpeng.li at amd.com>
>
> 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.
>
> Signed-off-by: Leo Li <sunpeng.li at amd.com>
> ---
> .../amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c | 38 +++++++++++++------
> 1 file changed, 26 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c
> index 20e82c9f6d67..df1efb8238d6 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c
> @@ -152,18 +152,32 @@ 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 = 0;
This shouldn't be 0, but an actual value from the enum.
Right now this modifies GFX clock if the clock is invalid, but we should
probably be returning SMU_CLK_COUNT instead.
Nicholas Kazlauskas
> +
> + 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);
> + smu_clk_type = 0;
> + break;
> + }
> +
> + return smu_clk_type;
> }
>
> static enum amd_pp_clock_type dc_to_pp_clock_type(
>
More information about the amd-gfx
mailing list