[PATCH] drm/amd/powerplay: minor cleanups

Alex Deucher alexdeucher at gmail.com
Fri Aug 14 05:01:39 UTC 2020


On Mon, Aug 10, 2020 at 11:38 PM Evan Quan <evan.quan at amd.com> wrote:
>
> Drop unnecessary lock protections during hw setup which was confirmed
> to have no race condition. Drop also unnecessary null pointer checker.
>

I think this would be cleaner as 4 patches:

1. remove the feature mutex locking and explain why it's safe.
2. remove baco mutex locking and explain why it's safe.
3. Removing smu_set_active_display_count
4. the rest.

> Change-Id: Ida301ae7bad1abae15285c4e019eda4f7dc6e297
> Signed-off-by: Evan Quan <evan.quan at amd.com>
> ---
>  drivers/gpu/drm/amd/powerplay/amdgpu_smu.c    | 20 --------
>  drivers/gpu/drm/amd/powerplay/arcturus_ppt.c  |  2 -
>  .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h    |  1 -
>  drivers/gpu/drm/amd/powerplay/navi10_ppt.c    |  2 -
>  .../drm/amd/powerplay/sienna_cichlid_ppt.c    |  2 -
>  drivers/gpu/drm/amd/powerplay/smu_internal.h  |  1 +
>  drivers/gpu/drm/amd/powerplay/smu_v11_0.c     | 50 ++++---------------
>  7 files changed, 11 insertions(+), 67 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
> index 1ffacc712e53..c70f94377644 100644
> --- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
> +++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
> @@ -361,20 +361,16 @@ static int smu_get_driver_allowed_feature_mask(struct smu_context *smu)
>         int ret = 0;
>         uint32_t allowed_feature_mask[SMU_FEATURE_MAX/32];
>
> -       mutex_lock(&feature->mutex);
>         bitmap_zero(feature->allowed, SMU_FEATURE_MAX);
> -       mutex_unlock(&feature->mutex);
>
>         ret = smu_get_allowed_feature_mask(smu, allowed_feature_mask,
>                                              SMU_FEATURE_MAX/32);
>         if (ret)
>                 return ret;
>
> -       mutex_lock(&feature->mutex);
>         bitmap_or(feature->allowed, feature->allowed,
>                       (unsigned long *)allowed_feature_mask,
>                       feature->feature_num);
> -       mutex_unlock(&feature->mutex);
>
>         return ret;
>  }
> @@ -576,9 +572,6 @@ static int smu_fini_fb_allocations(struct smu_context *smu)
>         struct smu_table *tables = smu_table->tables;
>         struct smu_table *driver_table = &(smu_table->driver_table);
>
> -       if (!tables)
> -               return 0;
> -
>         if (tables[SMU_TABLE_PMSTATUSLOG].mc_address)
>                 amdgpu_bo_free_kernel(&tables[SMU_TABLE_PMSTATUSLOG].bo,
>                                       &tables[SMU_TABLE_PMSTATUSLOG].mc_address,
> @@ -2250,19 +2243,6 @@ int smu_set_deep_sleep_dcefclk(struct smu_context *smu, int clk)
>         return ret;
>  }
>
> -int smu_set_active_display_count(struct smu_context *smu, uint32_t count)
> -{
> -       int ret = 0;
> -
> -       if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
> -               return -EOPNOTSUPP;
> -
> -       if (smu->ppt_funcs->set_active_display_count)
> -               ret = smu->ppt_funcs->set_active_display_count(smu, count);
> -
> -       return ret;
> -}
> -
>  int smu_get_clock_by_type(struct smu_context *smu,
>                           enum amd_pp_clock_type type,
>                           struct amd_pp_clocks *clocks)
> diff --git a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
> index 8b1025dc54fd..25679d60f7b4 100644
> --- a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
> +++ b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
> @@ -386,11 +386,9 @@ static int arcturus_check_powerplay_table(struct smu_context *smu)
>                 table_context->power_play_table;
>         struct smu_baco_context *smu_baco = &smu->smu_baco;
>
> -       mutex_lock(&smu_baco->mutex);
>         if (powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_BACO ||
>             powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_MACO)
>                 smu_baco->platform_support = true;
> -       mutex_unlock(&smu_baco->mutex);
>
>         table_context->thermal_controller_type =
>                 powerplay_table->thermal_controller_type;
> diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> index 23c2279bd500..8de39b31e7c2 100644
> --- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> +++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> @@ -698,7 +698,6 @@ int smu_set_fan_speed_percent(struct smu_context *smu, uint32_t speed);
>  int smu_get_fan_speed_rpm(struct smu_context *smu, uint32_t *speed);
>
>  int smu_set_deep_sleep_dcefclk(struct smu_context *smu, int clk);
> -int smu_set_active_display_count(struct smu_context *smu, uint32_t count);
>
>  int smu_get_clock_by_type(struct smu_context *smu,
>                           enum amd_pp_clock_type type,
> diff --git a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
> index 42a60769c52f..61e2971be9f3 100644
> --- a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
> +++ b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
> @@ -346,11 +346,9 @@ static int navi10_check_powerplay_table(struct smu_context *smu)
>         if (powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_HARDWAREDC)
>                 smu->dc_controlled_by_gpio = true;
>
> -       mutex_lock(&smu_baco->mutex);
>         if (powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_BACO ||
>             powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_MACO)
>                 smu_baco->platform_support = true;
> -       mutex_unlock(&smu_baco->mutex);
>
>         table_context->thermal_controller_type =
>                 powerplay_table->thermal_controller_type;
> diff --git a/drivers/gpu/drm/amd/powerplay/sienna_cichlid_ppt.c b/drivers/gpu/drm/amd/powerplay/sienna_cichlid_ppt.c
> index c5935f0a065b..f55dd0c2f3c8 100644
> --- a/drivers/gpu/drm/amd/powerplay/sienna_cichlid_ppt.c
> +++ b/drivers/gpu/drm/amd/powerplay/sienna_cichlid_ppt.c
> @@ -294,11 +294,9 @@ static int sienna_cichlid_check_powerplay_table(struct smu_context *smu)
>                 table_context->power_play_table;
>         struct smu_baco_context *smu_baco = &smu->smu_baco;
>
> -       mutex_lock(&smu_baco->mutex);
>         if (powerplay_table->platform_caps & SMU_11_0_7_PP_PLATFORM_CAP_BACO ||
>             powerplay_table->platform_caps & SMU_11_0_7_PP_PLATFORM_CAP_MACO)
>                 smu_baco->platform_support = true;
> -       mutex_unlock(&smu_baco->mutex);
>
>         table_context->thermal_controller_type =
>                 powerplay_table->thermal_controller_type;
> diff --git a/drivers/gpu/drm/amd/powerplay/smu_internal.h b/drivers/gpu/drm/amd/powerplay/smu_internal.h
> index 264073d4e263..e44d705780b9 100644
> --- a/drivers/gpu/drm/amd/powerplay/smu_internal.h
> +++ b/drivers/gpu/drm/amd/powerplay/smu_internal.h
> @@ -42,6 +42,7 @@
>  #define smu_check_fw_version(smu)                                      smu_ppt_funcs(check_fw_version, 0, smu)
>  #define smu_write_pptable(smu)                                         smu_ppt_funcs(write_pptable, 0, smu)
>  #define smu_set_min_dcef_deep_sleep(smu, clk)                          smu_ppt_funcs(set_min_dcef_deep_sleep, 0, smu, clk)
> +#define smu_set_active_display_count(smu, count)                       smu_ppt_funcs(set_active_display_count, 0, smu, count)
>  #define smu_set_driver_table_location(smu)                             smu_ppt_funcs(set_driver_table_location, 0, smu)
>  #define smu_set_tool_table_location(smu)                               smu_ppt_funcs(set_tool_table_location, 0, smu)
>  #define smu_notify_memory_pool_location(smu)                           smu_ppt_funcs(notify_memory_pool_location, 0, smu)
> diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> index 580889a02a94..4b6162863ed6 100644
> --- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> +++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> @@ -453,9 +453,6 @@ int smu_v11_0_init_power(struct smu_context *smu)
>  {
>         struct smu_power_context *smu_power = &smu->smu_power;
>
> -       if (smu_power->power_context || smu_power->power_context_size != 0)
> -               return -EINVAL;
> -
>         smu_power->power_context = kzalloc(sizeof(struct smu_11_0_dpm_context),
>                                            GFP_KERNEL);
>         if (!smu_power->power_context)
> @@ -469,9 +466,6 @@ int smu_v11_0_fini_power(struct smu_context *smu)
>  {
>         struct smu_power_context *smu_power = &smu->smu_power;
>
> -       if (!smu_power->power_context || smu_power->power_context_size == 0)
> -               return -EINVAL;
> -
>         kfree(smu_power->power_context);
>         smu_power->power_context = NULL;
>         smu_power->power_context_size = 0;
> @@ -700,18 +694,16 @@ int smu_v11_0_set_tool_table_location(struct smu_context *smu)
>
>  int smu_v11_0_init_display_count(struct smu_context *smu, uint32_t count)
>  {
> -       int ret = 0;
>         struct amdgpu_device *adev = smu->adev;
>
>         /* Navy_Flounder do not support to change display num currently */
>         if (adev->asic_type == CHIP_NAVY_FLOUNDER)
>                 return 0;
>
> -       if (!smu->pm_enabled)
> -               return ret;
> -
> -       ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_NumOfDisplays, count, NULL);
> -       return ret;
> +       return smu_cmn_send_smc_msg_with_param(smu,
> +                                              SMU_MSG_NumOfDisplays,
> +                                              count,
> +                                              NULL);
>  }
>
>
> @@ -721,7 +713,6 @@ int smu_v11_0_set_allowed_mask(struct smu_context *smu)
>         int ret = 0;
>         uint32_t feature_mask[2];
>
> -       mutex_lock(&feature->mutex);
>         if (bitmap_empty(feature->allowed, SMU_FEATURE_MAX) || feature->feature_num < 64)
>                 goto failed;
>
> @@ -738,7 +729,6 @@ int smu_v11_0_set_allowed_mask(struct smu_context *smu)
>                 goto failed;
>
>  failed:
> -       mutex_unlock(&feature->mutex);
>         return ret;
>  }
>
> @@ -775,9 +765,6 @@ int smu_v11_0_notify_display_change(struct smu_context *smu)
>  {
>         int ret = 0;
>
> -       if (!smu->pm_enabled)
> -               return ret;
> -
>         if (smu_cmn_feature_is_enabled(smu, SMU_FEATURE_DPM_UCLK_BIT) &&
>             smu->adev->gmc.vram_type == AMDGPU_VRAM_TYPE_HBM)
>                 ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetUclkFastSwitch, 1, NULL);
> @@ -1185,12 +1172,10 @@ int smu_v11_0_set_fan_speed_rpm(struct smu_context *smu,
>  int smu_v11_0_set_xgmi_pstate(struct smu_context *smu,
>                                      uint32_t pstate)
>  {
> -       int ret = 0;
> -       ret = smu_cmn_send_smc_msg_with_param(smu,
> -                                         SMU_MSG_SetXgmiMode,
> -                                         pstate ? XGMI_MODE_PSTATE_D0 : XGMI_MODE_PSTATE_D3,
> +       return smu_cmn_send_smc_msg_with_param(smu,
> +                                              SMU_MSG_SetXgmiMode,
> +                                              pstate ? XGMI_MODE_PSTATE_D0 : XGMI_MODE_PSTATE_D3,
>                                           NULL);
> -       return ret;
>  }
>
>  static int smu_v11_0_set_irq_state(struct amdgpu_device *adev,
> @@ -1421,11 +1406,7 @@ int smu_v11_0_get_max_sustainable_clocks_by_dc(struct smu_context *smu,
>
>  int smu_v11_0_set_azalia_d3_pme(struct smu_context *smu)
>  {
> -       int ret = 0;
> -
> -       ret = smu_cmn_send_smc_msg(smu, SMU_MSG_BacoAudioD3PME, NULL);
> -
> -       return ret;
> +       return smu_cmn_send_smc_msg(smu, SMU_MSG_BacoAudioD3PME, NULL);
>  }
>
>  static int smu_v11_0_baco_set_armd3_sequence(struct smu_context *smu, enum smu_v11_0_baco_seq baco_seq)
> @@ -1436,13 +1417,8 @@ static int smu_v11_0_baco_set_armd3_sequence(struct smu_context *smu, enum smu_v
>  bool smu_v11_0_baco_is_support(struct smu_context *smu)
>  {
>         struct smu_baco_context *smu_baco = &smu->smu_baco;
> -       bool baco_support;
> -
> -       mutex_lock(&smu_baco->mutex);
> -       baco_support = smu_baco->platform_support;
> -       mutex_unlock(&smu_baco->mutex);
>
> -       if (!baco_support)
> +       if (!smu_baco->platform_support)
>                 return false;
>
>         /* Arcturus does not support this bit mask */
> @@ -1529,13 +1505,7 @@ int smu_v11_0_baco_enter(struct smu_context *smu)
>
>  int smu_v11_0_baco_exit(struct smu_context *smu)
>  {
> -       int ret = 0;
> -
> -       ret = smu_v11_0_baco_set_state(smu, SMU_BACO_STATE_EXIT);
> -       if (ret)
> -               return ret;
> -
> -       return ret;
> +       return smu_v11_0_baco_set_state(smu, SMU_BACO_STATE_EXIT);
>  }
>
>  int smu_v11_0_mode1_reset(struct smu_context *smu)
> --
> 2.28.0
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list