drm/amd/powerplay: add helper function to get smu firmware & if version
add this helper function to get smc version. Signed-off-by: Kevin Wang <kevin1.wang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
eef2d67ead
commit
4fde03a7ef
3 changed files with 46 additions and 8 deletions
|
|
@ -30,6 +30,36 @@
|
|||
#include "atom.h"
|
||||
#include "amd_pcie.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_dpm_set_power_gate(struct smu_context *smu, uint32_t block_type,
|
||||
bool gate)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -767,4 +767,5 @@ extern int smu_dpm_set_power_gate(struct smu_context *smu,uint32_t block_type, b
|
|||
extern int smu_handle_task(struct smu_context *smu,
|
||||
enum amd_dpm_forced_level level,
|
||||
enum amd_pp_task task_id);
|
||||
int smu_get_smc_version(struct smu_context *smu, uint32_t *if_version, uint32_t *smu_version);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -223,20 +223,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;
|
||||
|
||||
if (smu_version != smu->smc_if_version)
|
||||
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 (if_version != smu->smc_if_version) {
|
||||
pr_err("SMU driver if version not matched\n");
|
||||
ret = -EINVAL;
|
||||
err:
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue