drm/amd/powerplay: check SMU engine readiness before proceeding on S3 resume
This is especially needed for non-psp loading way. Signed-off-by: Evan Quan <evan.quan@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
0e0b89c0d7
commit
f7e3a5776f
1 changed files with 23 additions and 5 deletions
|
@ -1213,11 +1213,10 @@ static int smu_free_memory_pool(struct smu_context *smu)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int smu_hw_init(void *handle)
|
static int smu_start_smc_engine(struct smu_context *smu)
|
||||||
{
|
{
|
||||||
int ret;
|
struct amdgpu_device *adev = smu->adev;
|
||||||
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
int ret = 0;
|
||||||
struct smu_context *smu = &adev->smu;
|
|
||||||
|
|
||||||
if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) {
|
if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) {
|
||||||
if (adev->asic_type < CHIP_NAVI10) {
|
if (adev->asic_type < CHIP_NAVI10) {
|
||||||
|
@ -1228,8 +1227,21 @@ static int smu_hw_init(void *handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = smu_check_fw_status(smu);
|
ret = smu_check_fw_status(smu);
|
||||||
|
if (ret)
|
||||||
|
pr_err("SMC is not ready\n");
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int smu_hw_init(void *handle)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
||||||
|
struct smu_context *smu = &adev->smu;
|
||||||
|
|
||||||
|
ret = smu_start_smc_engine(smu);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pr_err("SMC firmware status is not correct\n");
|
pr_err("SMU is not ready yet!\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1381,6 +1393,12 @@ static int smu_resume(void *handle)
|
||||||
|
|
||||||
mutex_lock(&smu->mutex);
|
mutex_lock(&smu->mutex);
|
||||||
|
|
||||||
|
ret = smu_start_smc_engine(smu);
|
||||||
|
if (ret) {
|
||||||
|
pr_err("SMU is not ready yet!\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = smu_smc_table_hw_init(smu, false);
|
ret = smu_smc_table_hw_init(smu, false);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto failed;
|
goto failed;
|
||||||
|
|
Loading…
Add table
Reference in a new issue