mirror of https://gitee.com/openkylin/linux.git
drm/amdgpu: cache smu fw version info
reduce cmd submission to smu by caching version info Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: John Clements <john.clements@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
fdd21e62b0
commit
e57761c68b
|
@ -196,16 +196,31 @@ int smu_get_smc_version(struct smu_context *smu, uint32_t *if_version, uint32_t
|
|||
if (!if_version && !smu_version)
|
||||
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) {
|
||||
ret = smu_send_smc_msg(smu, SMU_MSG_GetDriverIfVersion, if_version);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
smu->smc_fw_if_version = *if_version;
|
||||
}
|
||||
|
||||
if (smu_version) {
|
||||
ret = smu_send_smc_msg(smu, SMU_MSG_GetSmuVersion, smu_version);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
smu->smc_fw_version = *smu_version;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -405,7 +405,9 @@ struct smu_context
|
|||
bool pm_enabled;
|
||||
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 dc_controlled_by_gpio;
|
||||
|
|
|
@ -950,6 +950,6 @@ static const struct pptable_funcs renoir_ppt_funcs = {
|
|||
void renoir_set_ppt_funcs(struct smu_context *smu)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -266,23 +266,23 @@ int smu_v11_0_check_fw_version(struct smu_context *smu)
|
|||
|
||||
switch (smu->adev->asic_type) {
|
||||
case CHIP_VEGA20:
|
||||
smu->smc_if_version = SMU11_DRIVER_IF_VERSION_VG20;
|
||||
smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_VG20;
|
||||
break;
|
||||
case CHIP_ARCTURUS:
|
||||
smu->smc_if_version = SMU11_DRIVER_IF_VERSION_ARCT;
|
||||
smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_ARCT;
|
||||
break;
|
||||
case CHIP_NAVI10:
|
||||
smu->smc_if_version = SMU11_DRIVER_IF_VERSION_NV10;
|
||||
smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV10;
|
||||
break;
|
||||
case CHIP_NAVI12:
|
||||
smu->smc_if_version = SMU11_DRIVER_IF_VERSION_NV12;
|
||||
smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV12;
|
||||
break;
|
||||
case CHIP_NAVI14:
|
||||
smu->smc_if_version = SMU11_DRIVER_IF_VERSION_NV14;
|
||||
smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV14;
|
||||
break;
|
||||
default:
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
* 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, "
|
||||
"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);
|
||||
pr_warn("SMU driver if version not matched\n");
|
||||
}
|
||||
|
|
|
@ -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
|
||||
* 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, "
|
||||
"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);
|
||||
pr_warn("SMU driver if version not matched\n");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue