Re: [PATCH] drm/amd/pm: Remove unused functions in smu_v15_0

"Lazar, Lijo" <[email protected]> Mon, 10 Aug 2026 10:59:28 +0530
Newsgroups org.freedesktop.lists.amd-gfx
Message-ID <[email protected]>

On 10-Aug-26 10:12 AM, Srinivasan Shanmugam wrote:
> smu_v15_0_load_microcode() and smu_v15_0_set_single_dpm_table() are not
> called anywhere; the latter is a carry-over from a previous version. The
> static helpers smu_v15_0_get_dpm_freq_by_index(),
> smu_v15_0_get_dpm_level_count() and smu_v15_0_get_fine_grained_status()
> were only called from smu_v15_0_set_single_dpm_table(), so remove those
> as well. Remove all functions along with their declarations from the
> header.
> 
> Fixes: c7fc0f372374 ("drm/amd: Enable SMU 15_0_0 support")
> Fixes: f7bee962d92a ("drm/amd/pm: Update dpm table structs for smu_v15_0")

Not a bug fix, they are just unused functions; so this doesn't sound 
accurate.

> Reported-by: Dan Carpenter <[email protected]>
> Suggested-by: Lijo Lazar <[email protected]>
> Cc: Alex Deucher <[email protected]>
> Cc: Christian König <[email protected]>
> Cc: Asad Kamal <[email protected]>
> Signed-off-by: Srinivasan Shanmugam <[email protected]>

Reviewed-by: Lijo Lazar <[email protected]>

Thanks,
Lijo

> ---
>   drivers/gpu/drm/amd/pm/swsmu/inc/smu_v15_0.h  |   6 -
>   .../gpu/drm/amd/pm/swsmu/smu15/smu_v15_0.c    | 166 ------------------
>   2 files changed, 172 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v15_0.h b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v15_0.h
> index ec96dc775485..0c97bee2c4bb 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v15_0.h
> +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v15_0.h
> @@ -113,8 +113,6 @@ int smu_v15_0_init_microcode(struct smu_context *smu);
>   
>   void smu_v15_0_fini_microcode(struct smu_context *smu);
>   
> -int smu_v15_0_load_microcode(struct smu_context *smu);
> -
>   int smu_v15_0_init_smc_tables(struct smu_context *smu);
>   
>   int smu_v15_0_fini_smc_tables(struct smu_context *smu);
> @@ -183,10 +181,6 @@ int smu_v15_0_set_performance_level(struct smu_context *smu,
>   int smu_v15_0_set_power_source(struct smu_context *smu,
>   			       enum smu_power_src_type power_src);
>   
> -int smu_v15_0_set_single_dpm_table(struct smu_context *smu,
> -				   enum smu_clk_type clk_type,
> -				   struct smu_dpm_table *single_dpm_table);
> -
>   int smu_v15_0_gfx_ulv_control(struct smu_context *smu,
>   			      bool enablement);
>   
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0.c
> index 29f444aea73a..2269703869f9 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0.c
> @@ -106,44 +106,6 @@ void smu_v15_0_fini_microcode(struct smu_context *smu)
>   	adev->pm.fw_version = 0;
>   }
>   
> -int smu_v15_0_load_microcode(struct smu_context *smu)
> -{
> -	struct amdgpu_device *adev = smu->adev;
> -	const uint32_t *src;
> -	const struct smc_firmware_header_v1_0 *hdr;
> -	uint32_t addr_start = MP1_SRAM;
> -	uint32_t i;
> -	uint32_t smc_fw_size;
> -	uint32_t mp1_fw_flags = 0;
> -
> -	hdr = (const struct smc_firmware_header_v1_0 *) adev->pm.fw->data;
> -	src = (const uint32_t *)(adev->pm.fw->data +
> -				 le32_to_cpu(hdr->header.ucode_array_offset_bytes));
> -	smc_fw_size = hdr->header.ucode_size_bytes;
> -
> -	for (i = 1; i < smc_fw_size/4 - 1; i++) {
> -		WREG32_PCIE(addr_start, src[i]);
> -		addr_start += 4;
> -	}
> -
> -
> -	for (i = 0; i < adev->usec_timeout; i++) {
> -		if (smu->is_apu)
> -			mp1_fw_flags = RREG32_PCIE(MP1_Public |
> -						   (smnMP1_FIRMWARE_FLAGS & 0xffffffff));
> -
> -		if ((mp1_fw_flags & MP1_CRU1_MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED_MASK) >>
> -		    MP1_CRU1_MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED__SHIFT)
> -			break;
> -		udelay(1);
> -	}
> -
> -	if (i == adev->usec_timeout)
> -		return -ETIME;
> -
> -	return 0;
> -}
> -
>   int smu_v15_0_init_pptable_microcode(struct smu_context *smu)
>   {
>   	struct amdgpu_device *adev = smu->adev;
> @@ -1161,134 +1123,6 @@ int smu_v15_0_set_power_source(struct smu_context *smu,
>   					       NULL);
>   }
>   
> -static int smu_v15_0_get_dpm_freq_by_index(struct smu_context *smu,
> -					   enum smu_clk_type clk_type,
> -					   uint16_t level,
> -					   uint32_t *value)
> -{
> -	int ret = 0, clk_id = 0;
> -	uint32_t param;
> -
> -	if (!value)
> -		return -EINVAL;
> -
> -	if (!smu_cmn_clk_dpm_is_enabled(smu, clk_type))
> -		return 0;
> -
> -	clk_id = smu_cmn_to_asic_specific_index(smu,
> -						CMN2ASIC_MAPPING_CLK,
> -						clk_type);
> -	if (clk_id < 0)
> -		return clk_id;
> -
> -	param = (uint32_t)(((clk_id & 0xffff) << 16) | (level & 0xffff));
> -
> -	ret = smu_cmn_send_smc_msg_with_param(smu,
> -					      SMU_MSG_GetDpmFreqByIndex,
> -					      param,
> -					      value);
> -	if (ret)
> -		return ret;
> -
> -	*value = *value & 0x7fffffff;
> -
> -	return ret;
> -}
> -
> -static int smu_v15_0_get_dpm_level_count(struct smu_context *smu,
> -					 enum smu_clk_type clk_type,
> -					 uint32_t *value)
> -{
> -	int ret;
> -
> -	ret = smu_v15_0_get_dpm_freq_by_index(smu, clk_type, 0xff, value);
> -
> -	return ret;
> -}
> -
> -static int smu_v15_0_get_fine_grained_status(struct smu_context *smu,
> -					     enum smu_clk_type clk_type,
> -					     bool *is_fine_grained_dpm)
> -{
> -	int ret = 0, clk_id = 0;
> -	uint32_t param;
> -	uint32_t value;
> -
> -	if (!is_fine_grained_dpm)
> -		return -EINVAL;
> -
> -	if (!smu_cmn_clk_dpm_is_enabled(smu, clk_type))
> -		return 0;
> -
> -	clk_id = smu_cmn_to_asic_specific_index(smu,
> -						CMN2ASIC_MAPPING_CLK,
> -						clk_type);
> -	if (clk_id < 0)
> -		return clk_id;
> -
> -	param = (uint32_t)(((clk_id & 0xffff) << 16) | 0xff);
> -
> -	ret = smu_cmn_send_smc_msg_with_param(smu,
> -					      SMU_MSG_GetDpmFreqByIndex,
> -					      param,
> -					      &value);
> -	if (ret)
> -		return ret;
> -
> -	/*
> -	 * BIT31:  1 - Fine grained DPM, 0 - Dicrete DPM
> -	 * now, we un-support it
> -	 */
> -	*is_fine_grained_dpm = value & 0x80000000;
> -
> -	return 0;
> -}
> -
> -int smu_v15_0_set_single_dpm_table(struct smu_context *smu,
> -				   enum smu_clk_type clk_type,
> -				   struct smu_dpm_table *single_dpm_table)
> -{
> -	int ret = 0;
> -	uint32_t clk = 0;
> -	bool is_fine_grained = false;
> -	int i;
> -
> -	ret = smu_v15_0_get_dpm_level_count(smu,
> -					    clk_type,
> -					    &single_dpm_table->count);
> -	if (ret) {
> -		dev_err(smu->adev->dev, "[%s] failed to get dpm levels!\n", __func__);
> -		return ret;
> -	}
> -
> -	ret = smu_v15_0_get_fine_grained_status(smu,
> -						clk_type,
> -						&is_fine_grained);
> -	if (ret) {
> -		dev_err(smu->adev->dev, "[%s] failed to get fine grained status!\n", __func__);
> -		return ret;
> -	}
> -
> -	if (is_fine_grained)
> -		single_dpm_table->flags |= SMU_DPM_TABLE_FINE_GRAINED;
> -
> -	for (i = 0; i < single_dpm_table->count; i++) {
> -		ret = smu_v15_0_get_dpm_freq_by_index(smu,
> -						      clk_type,
> -						      i,
> -						      &clk);
> -		if (ret) {
> -			dev_err(smu->adev->dev, "[%s] failed to get dpm freq by index!\n", __func__);
> -			return ret;
> -		}
> -
> -		single_dpm_table->dpm_levels[i].value = clk;
> -		single_dpm_table->dpm_levels[i].enabled = true;
> -	}
> -
> -	return 0;
> -}
> -
>   int smu_v15_0_set_vcn_enable(struct smu_context *smu,
>   			      bool enable,
>   			      int inst)