[PATCH] drm/amd/powerplay: add helper function to get smu firmware & if version

Huang, Ray Ray.Huang at amd.com
Mon Apr 29 07:06:10 UTC 2019


> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Wang, Kevin(Yang)
> Sent: Monday, April 29, 2019 3:05 PM
> To: amd-gfx at lists.freedesktop.org
> Cc: Huang, Ray <Ray.Huang at amd.com>; Wang, Kevin(Yang)
> <Kevin1.Wang at amd.com>
> Subject: [PATCH] drm/amd/powerplay: add helper function to get smu
> firmware & if version
> 
> add this helper function to get smc version.
> 
> Change-Id: I6b06470cefd10fafcf06df8a5e8cb03bf79622c0
> Signed-off-by: Kevin Wang <kevin1.wang at amd.com>

Reviewed-by: Huang Rui <ray.huang at amd.com>

> ---
>  drivers/gpu/drm/amd/powerplay/amdgpu_smu.c    | 30
> +++++++++++++++++++
>  .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h    |  1 +
>  drivers/gpu/drm/amd/powerplay/smu_v11_0.c     | 23 +++++++++-----
>  3 files changed, 46 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
> b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
> index 25d2ba2b9018..c021c05727e8 100644
> --- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
> +++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
> @@ -29,6 +29,36 @@
>  #include "smu_v11_0.h"
>  #include "atom.h"
> 
> +int smu_get_smc_version(struct smu_context *smu, uint32_t *if_version,
> +uint32_t *smu_version) {
> +	int ret = 0;
> +
> +	if (!if_version && !smu_version)
> +		return -EINVAL;
> +
> +	if (if_version) {
> +		ret = smu_send_smc_msg(smu,
> SMU_MSG_GetDriverIfVersion);
> +		if (ret)
> +			return ret;
> +
> +		ret = smu_read_smc_arg(smu, if_version);
> +		if (ret)
> +			return ret;
> +	}
> +
> +	if (smu_version) {
> +		ret = smu_send_smc_msg(smu,
> SMU_MSG_GetSmuVersion);
> +		if (ret)
> +			return ret;
> +
> +		ret = smu_read_smc_arg(smu, smu_version);
> +		if (ret)
> +			return ret;
> +	}
> +
> +	return ret;
> +}
> +
>  int smu_set_soft_freq_range(struct smu_context *smu, enum
> smu_clk_type clk_type,
>  			    uint32_t min, uint32_t max)
>  {
> diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> index e958d4cb5baf..435727c8ee21 100644
> --- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> +++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> @@ -931,4 +931,5 @@ int smu_set_soft_freq_range(struct smu_context
> *smu, enum smu_clk_type clk_type,
>  			    uint32_t min, uint32_t max);
>  int smu_set_hard_freq_range(struct smu_context *smu, enum
> smu_clk_type clk_type,
>  			    uint32_t min, uint32_t max);
> +int smu_get_smc_version(struct smu_context *smu, uint32_t *if_version,
> +uint32_t *smu_version);
>  #endif
> diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> index ab89c79b4358..c2fe00f51b2b 100644
> --- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> +++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> @@ -249,20 +249,27 @@ static int smu_v11_0_check_fw_status(struct
> smu_context *smu)
> 
>  static int smu_v11_0_check_fw_version(struct smu_context *smu)  {
> -	uint32_t smu_version = 0xff;
> +	uint32_t if_version = 0xff, smu_version = 0xff;
> +	uint16_t smu_major;
> +	uint8_t smu_minor, smu_debug;
>  	int ret = 0;
> 
> -	ret = smu_send_smc_msg(smu, SMU_MSG_GetDriverIfVersion);
> +	ret = smu_get_smc_version(smu, &if_version, &smu_version);
>  	if (ret)
> -		goto err;
> +		return ret;
> 
> -	ret = smu_read_smc_arg(smu, &smu_version);
> -	if (ret)
> -		goto err;
> +	smu_major = (smu_version >> 16) & 0xffff;
> +	smu_minor = (smu_version >> 8) & 0xff;
> +	smu_debug = (smu_version >> 0) & 0xff;
> +
> +	pr_info("SMU Driver IF Version = 0x%08x, SMU FW Version = 0x%08x
> (%d.%d.%d)\n",
> +		if_version, smu_version, smu_major, smu_minor,
> smu_debug);
> 
> -	if (smu_version != smu->smc_if_version)
> +	if (if_version != smu->smc_if_version) {
> +		pr_err("SMU driver if version not matched\n");
>  		ret = -EINVAL;
> -err:
> +	}
> +
>  	return ret;
>  }
> 
> --
> 2.21.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