drm/amd/pm: unify the interface for loading SMU microcode
No need to have special handling for swSMU supported ASICs. Signed-off-by: Evan Quan <evan.quan@amd.com> Reviewed-by: Lijo Lazar <lijo.lazar@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
1fb4968bec
commit
2e4b2f7b57
|
@ -7170,16 +7170,10 @@ static int gfx_v10_0_hw_init(void *handle)
|
||||||
* loaded firstly, so in direct type, it has to load smc ucode
|
* loaded firstly, so in direct type, it has to load smc ucode
|
||||||
* here before rlc.
|
* here before rlc.
|
||||||
*/
|
*/
|
||||||
if (adev->smu.ppt_funcs != NULL && !(adev->flags & AMD_IS_APU)) {
|
if (!(adev->flags & AMD_IS_APU)) {
|
||||||
r = smu_load_microcode(&adev->smu);
|
r = amdgpu_pm_load_smu_firmware(adev, NULL);
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = smu_check_fw_status(&adev->smu);
|
|
||||||
if (r) {
|
|
||||||
pr_err("SMC firmware status is not correct\n");
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
gfx_v10_0_disable_gpa_mode(adev);
|
gfx_v10_0_disable_gpa_mode(adev);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1606,7 +1606,10 @@ int amdgpu_pm_load_smu_firmware(struct amdgpu_device *adev, uint32_t *smu_versio
|
||||||
pr_err("smu firmware loading failed\n");
|
pr_err("smu firmware loading failed\n");
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
*smu_version = adev->pm.fw_version;
|
|
||||||
|
if (smu_version)
|
||||||
|
*smu_version = adev->pm.fw_version;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1252,10 +1252,6 @@ enum smu_cmn2asic_mapping_type {
|
||||||
[profile] = {1, (workload)}
|
[profile] = {1, (workload)}
|
||||||
|
|
||||||
#if !defined(SWSMU_CODE_LAYER_L2) && !defined(SWSMU_CODE_LAYER_L3) && !defined(SWSMU_CODE_LAYER_L4)
|
#if !defined(SWSMU_CODE_LAYER_L2) && !defined(SWSMU_CODE_LAYER_L3) && !defined(SWSMU_CODE_LAYER_L4)
|
||||||
int smu_load_microcode(struct smu_context *smu);
|
|
||||||
|
|
||||||
int smu_check_fw_status(struct smu_context *smu);
|
|
||||||
|
|
||||||
int smu_get_power_limit(struct smu_context *smu,
|
int smu_get_power_limit(struct smu_context *smu,
|
||||||
uint32_t *limit,
|
uint32_t *limit,
|
||||||
enum smu_ppt_limit_level limit_level);
|
enum smu_ppt_limit_level limit_level);
|
||||||
|
|
|
@ -2095,36 +2095,34 @@ const struct amdgpu_ip_block_version smu_v13_0_ip_block =
|
||||||
.funcs = &smu_ip_funcs,
|
.funcs = &smu_ip_funcs,
|
||||||
};
|
};
|
||||||
|
|
||||||
int smu_load_microcode(struct smu_context *smu)
|
static int smu_load_microcode(void *handle)
|
||||||
{
|
{
|
||||||
|
struct smu_context *smu = handle;
|
||||||
|
struct amdgpu_device *adev = smu->adev;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
|
if (!smu->pm_enabled)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
mutex_lock(&smu->mutex);
|
/* This should be used for non PSP loading */
|
||||||
|
if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (smu->ppt_funcs->load_microcode)
|
if (smu->ppt_funcs->load_microcode) {
|
||||||
ret = smu->ppt_funcs->load_microcode(smu);
|
ret = smu->ppt_funcs->load_microcode(smu);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(adev->dev, "Load microcode failed\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mutex_unlock(&smu->mutex);
|
if (smu->ppt_funcs->check_fw_status) {
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int smu_check_fw_status(struct smu_context *smu)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
|
|
||||||
mutex_lock(&smu->mutex);
|
|
||||||
|
|
||||||
if (smu->ppt_funcs->check_fw_status)
|
|
||||||
ret = smu->ppt_funcs->check_fw_status(smu);
|
ret = smu->ppt_funcs->check_fw_status(smu);
|
||||||
|
if (ret) {
|
||||||
mutex_unlock(&smu->mutex);
|
dev_err(adev->dev, "SMC is not ready\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -2981,6 +2979,7 @@ static const struct amd_pm_funcs swsmu_pm_funcs = {
|
||||||
.set_watermarks_for_clock_ranges = smu_set_watermarks_for_clock_ranges,
|
.set_watermarks_for_clock_ranges = smu_set_watermarks_for_clock_ranges,
|
||||||
.display_disable_memory_clock_switch = smu_display_disable_memory_clock_switch,
|
.display_disable_memory_clock_switch = smu_display_disable_memory_clock_switch,
|
||||||
.get_max_sustainable_clocks_by_dc = smu_get_max_sustainable_clocks_by_dc,
|
.get_max_sustainable_clocks_by_dc = smu_get_max_sustainable_clocks_by_dc,
|
||||||
|
.load_firmware = smu_load_microcode,
|
||||||
};
|
};
|
||||||
|
|
||||||
int smu_wait_for_event(struct amdgpu_device *adev, enum smu_event_type event,
|
int smu_wait_for_event(struct amdgpu_device *adev, enum smu_event_type event,
|
||||||
|
|
Loading…
Reference in New Issue