Commit 0a3c8424 authored by Aaron Liu's avatar Aaron Liu Committed by Alex Deucher

drm/amd/powerplay: udpate smu_v12_0_check_fw_version (v2)

This interface support SMU_MSG_GetDriverIfVersion
and SMU_MSG_GetSmuVersion checking.

v2: squash in driver_if changes (Alex)
Signed-off-by: default avatarAaron Liu <aaron.liu@amd.com>
Reviewed-by: default avatarHuang Rui <ray.huang@amd.com>
Reviewed-by: default avatarEvan Quan <evan.quan@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 47903831
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include "amdgpu_smu.h" #include "amdgpu_smu.h"
#include "soc15_common.h" #include "soc15_common.h"
#include "smu_v12_0_ppsmc.h" #include "smu_v12_0_ppsmc.h"
#include "smu12_driver_if.h"
#include "renoir_ppt.h" #include "renoir_ppt.h"
...@@ -118,4 +119,5 @@ static const struct pptable_funcs renoir_ppt_funcs = { ...@@ -118,4 +119,5 @@ static const struct pptable_funcs renoir_ppt_funcs = {
void renoir_set_ppt_funcs(struct smu_context *smu) void renoir_set_ppt_funcs(struct smu_context *smu)
{ {
smu->ppt_funcs = &renoir_ppt_funcs; smu->ppt_funcs = &renoir_ppt_funcs;
smu->smc_if_version = SMU12_DRIVER_IF_VERSION;
} }
...@@ -144,20 +144,35 @@ static int smu_v12_0_check_fw_status(struct smu_context *smu) ...@@ -144,20 +144,35 @@ static int smu_v12_0_check_fw_status(struct smu_context *smu)
static int smu_v12_0_check_fw_version(struct smu_context *smu) static int smu_v12_0_check_fw_version(struct smu_context *smu)
{ {
uint32_t smc_if_version = 0xff; uint32_t if_version = 0xff, smu_version = 0xff;
uint16_t smu_major;
uint8_t smu_minor, smu_debug;
int ret = 0; int ret = 0;
ret = smu_send_smc_msg(smu, SMU_MSG_GetDriverIfVersion); ret = smu_get_smc_version(smu, &if_version, &smu_version);
if (ret) if (ret)
goto err; return ret;
ret = smu_read_smc_arg(smu, &smc_if_version); smu_major = (smu_version >> 16) & 0xffff;
if (ret) smu_minor = (smu_version >> 8) & 0xff;
goto err; smu_debug = (smu_version >> 0) & 0xff;
/*
* 1. if_version mismatch is not critical as our fw is designed
* to be backward compatible.
* 2. New fw usually brings some optimizations. But that's visible
* only on the paired driver.
* Considering above, we just leave user a warning message instead
* of halt driver loading.
*/
if (if_version != smu->smc_if_version) {
pr_info("smu driver if version = 0x%08x, smu fw if version = 0x%08x, "
"smu fw version = 0x%08x (%d.%d.%d)\n",
smu->smc_if_version, if_version,
smu_version, smu_major, smu_minor, smu_debug);
pr_warn("SMU driver if version not matched\n");
}
if (smc_if_version != smu->smc_if_version)
ret = -EINVAL;
err:
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment