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:
Evan Quan 2019-09-11 19:39:34 +08:00 committed by Alex Deucher
parent 0e0b89c0d7
commit f7e3a5776f

View file

@ -1213,11 +1213,10 @@ static int smu_free_memory_pool(struct smu_context *smu)
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 = (struct amdgpu_device *)handle;
struct smu_context *smu = &adev->smu;
struct amdgpu_device *adev = smu->adev;
int ret = 0;
if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) {
if (adev->asic_type < CHIP_NAVI10) {
@ -1228,8 +1227,21 @@ static int smu_hw_init(void *handle)
}
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) {
pr_err("SMC firmware status is not correct\n");
pr_err("SMU is not ready yet!\n");
return ret;
}
@ -1381,6 +1393,12 @@ static int smu_resume(void *handle)
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);
if (ret)
goto failed;