Commit e57761c6 authored by John Clements's avatar John Clements Committed by Alex Deucher

drm/amdgpu: cache smu fw version info

reduce cmd submission to smu by caching version info
Reviewed-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: default avatarJohn Clements <john.clements@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent fdd21e62
...@@ -196,16 +196,31 @@ int smu_get_smc_version(struct smu_context *smu, uint32_t *if_version, uint32_t ...@@ -196,16 +196,31 @@ int smu_get_smc_version(struct smu_context *smu, uint32_t *if_version, uint32_t
if (!if_version && !smu_version) if (!if_version && !smu_version)
return -EINVAL; return -EINVAL;
if (smu->smc_fw_if_version && smu->smc_fw_version)
{
if (if_version)
*if_version = smu->smc_fw_if_version;
if (smu_version)
*smu_version = smu->smc_fw_version;
return 0;
}
if (if_version) { if (if_version) {
ret = smu_send_smc_msg(smu, SMU_MSG_GetDriverIfVersion, if_version); ret = smu_send_smc_msg(smu, SMU_MSG_GetDriverIfVersion, if_version);
if (ret) if (ret)
return ret; return ret;
smu->smc_fw_if_version = *if_version;
} }
if (smu_version) { if (smu_version) {
ret = smu_send_smc_msg(smu, SMU_MSG_GetSmuVersion, smu_version); ret = smu_send_smc_msg(smu, SMU_MSG_GetSmuVersion, smu_version);
if (ret) if (ret)
return ret; return ret;
smu->smc_fw_version = *smu_version;
} }
return ret; return ret;
......
...@@ -405,7 +405,9 @@ struct smu_context ...@@ -405,7 +405,9 @@ struct smu_context
bool pm_enabled; bool pm_enabled;
bool is_apu; bool is_apu;
uint32_t smc_if_version; uint32_t smc_driver_if_version;
uint32_t smc_fw_if_version;
uint32_t smc_fw_version;
bool uploading_custom_pp_table; bool uploading_custom_pp_table;
bool dc_controlled_by_gpio; bool dc_controlled_by_gpio;
......
...@@ -950,6 +950,6 @@ static const struct pptable_funcs renoir_ppt_funcs = { ...@@ -950,6 +950,6 @@ 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; smu->smc_driver_if_version = SMU12_DRIVER_IF_VERSION;
smu->is_apu = true; smu->is_apu = true;
} }
...@@ -266,23 +266,23 @@ int smu_v11_0_check_fw_version(struct smu_context *smu) ...@@ -266,23 +266,23 @@ int smu_v11_0_check_fw_version(struct smu_context *smu)
switch (smu->adev->asic_type) { switch (smu->adev->asic_type) {
case CHIP_VEGA20: case CHIP_VEGA20:
smu->smc_if_version = SMU11_DRIVER_IF_VERSION_VG20; smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_VG20;
break; break;
case CHIP_ARCTURUS: case CHIP_ARCTURUS:
smu->smc_if_version = SMU11_DRIVER_IF_VERSION_ARCT; smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_ARCT;
break; break;
case CHIP_NAVI10: case CHIP_NAVI10:
smu->smc_if_version = SMU11_DRIVER_IF_VERSION_NV10; smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV10;
break; break;
case CHIP_NAVI12: case CHIP_NAVI12:
smu->smc_if_version = SMU11_DRIVER_IF_VERSION_NV12; smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV12;
break; break;
case CHIP_NAVI14: case CHIP_NAVI14:
smu->smc_if_version = SMU11_DRIVER_IF_VERSION_NV14; smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV14;
break; break;
default: default:
pr_err("smu unsupported asic type:%d.\n", smu->adev->asic_type); pr_err("smu unsupported asic type:%d.\n", smu->adev->asic_type);
smu->smc_if_version = SMU11_DRIVER_IF_VERSION_INV; smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_INV;
break; break;
} }
...@@ -294,10 +294,10 @@ int smu_v11_0_check_fw_version(struct smu_context *smu) ...@@ -294,10 +294,10 @@ int smu_v11_0_check_fw_version(struct smu_context *smu)
* Considering above, we just leave user a warning message instead * Considering above, we just leave user a warning message instead
* of halt driver loading. * of halt driver loading.
*/ */
if (if_version != smu->smc_if_version) { if (if_version != smu->smc_driver_if_version) {
pr_info("smu driver if version = 0x%08x, smu fw if version = 0x%08x, " pr_info("smu driver if version = 0x%08x, smu fw if version = 0x%08x, "
"smu fw version = 0x%08x (%d.%d.%d)\n", "smu fw version = 0x%08x (%d.%d.%d)\n",
smu->smc_if_version, if_version, smu->smc_driver_if_version, if_version,
smu_version, smu_major, smu_minor, smu_debug); smu_version, smu_major, smu_minor, smu_debug);
pr_warn("SMU driver if version not matched\n"); pr_warn("SMU driver if version not matched\n");
} }
......
...@@ -160,10 +160,10 @@ int smu_v12_0_check_fw_version(struct smu_context *smu) ...@@ -160,10 +160,10 @@ int smu_v12_0_check_fw_version(struct smu_context *smu)
* Considering above, we just leave user a warning message instead * Considering above, we just leave user a warning message instead
* of halt driver loading. * of halt driver loading.
*/ */
if (if_version != smu->smc_if_version) { if (if_version != smu->smc_driver_if_version) {
pr_info("smu driver if version = 0x%08x, smu fw if version = 0x%08x, " pr_info("smu driver if version = 0x%08x, smu fw if version = 0x%08x, "
"smu fw version = 0x%08x (%d.%d.%d)\n", "smu fw version = 0x%08x (%d.%d.%d)\n",
smu->smc_if_version, if_version, smu->smc_driver_if_version, if_version,
smu_version, smu_major, smu_minor, smu_debug); smu_version, smu_major, smu_minor, smu_debug);
pr_warn("SMU driver if version not matched\n"); pr_warn("SMU driver if version not matched\n");
} }
......
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