Commit bac601ec authored by Rex Zhu's avatar Rex Zhu Committed by Alex Deucher

drm/amdgpu: fix uvd can't initialized when dpm disabled on Ci.

need to start smc when dpm disabled.
otherwise, uvd can't get response from smu.
so uvd ring test and ib test will timeout.
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 8b55d17e
...@@ -2210,7 +2210,6 @@ static void ci_clear_vc(struct amdgpu_device *adev) ...@@ -2210,7 +2210,6 @@ static void ci_clear_vc(struct amdgpu_device *adev)
static int ci_upload_firmware(struct amdgpu_device *adev) static int ci_upload_firmware(struct amdgpu_device *adev)
{ {
struct ci_power_info *pi = ci_get_pi(adev);
int i, ret; int i, ret;
if (amdgpu_ci_is_smc_running(adev)) { if (amdgpu_ci_is_smc_running(adev)) {
...@@ -2227,7 +2226,7 @@ static int ci_upload_firmware(struct amdgpu_device *adev) ...@@ -2227,7 +2226,7 @@ static int ci_upload_firmware(struct amdgpu_device *adev)
amdgpu_ci_stop_smc_clock(adev); amdgpu_ci_stop_smc_clock(adev);
amdgpu_ci_reset_smc(adev); amdgpu_ci_reset_smc(adev);
ret = amdgpu_ci_load_smc_ucode(adev, pi->sram_end); ret = amdgpu_ci_load_smc_ucode(adev, SMC_RAM_END);
return ret; return ret;
...@@ -6278,13 +6277,13 @@ static int ci_dpm_sw_init(void *handle) ...@@ -6278,13 +6277,13 @@ static int ci_dpm_sw_init(void *handle)
adev->pm.current_mclk = adev->clock.default_mclk; adev->pm.current_mclk = adev->clock.default_mclk;
adev->pm.int_thermal_type = THERMAL_TYPE_NONE; adev->pm.int_thermal_type = THERMAL_TYPE_NONE;
if (amdgpu_dpm == 0)
return 0;
ret = ci_dpm_init_microcode(adev); ret = ci_dpm_init_microcode(adev);
if (ret) if (ret)
return ret; return ret;
if (amdgpu_dpm == 0)
return 0;
INIT_WORK(&adev->pm.dpm.thermal.work, amdgpu_dpm_thermal_work_handler); INIT_WORK(&adev->pm.dpm.thermal.work, amdgpu_dpm_thermal_work_handler);
mutex_lock(&adev->pm.mutex); mutex_lock(&adev->pm.mutex);
ret = ci_dpm_init(adev); ret = ci_dpm_init(adev);
...@@ -6328,8 +6327,15 @@ static int ci_dpm_hw_init(void *handle) ...@@ -6328,8 +6327,15 @@ static int ci_dpm_hw_init(void *handle)
struct amdgpu_device *adev = (struct amdgpu_device *)handle; struct amdgpu_device *adev = (struct amdgpu_device *)handle;
if (!amdgpu_dpm) if (!amdgpu_dpm) {
ret = ci_upload_firmware(adev);
if (ret) {
DRM_ERROR("ci_upload_firmware failed\n");
return ret;
}
ci_dpm_start_smc(adev);
return 0; return 0;
}
mutex_lock(&adev->pm.mutex); mutex_lock(&adev->pm.mutex);
ci_dpm_setup_asic(adev); ci_dpm_setup_asic(adev);
...@@ -6351,6 +6357,8 @@ static int ci_dpm_hw_fini(void *handle) ...@@ -6351,6 +6357,8 @@ static int ci_dpm_hw_fini(void *handle)
mutex_lock(&adev->pm.mutex); mutex_lock(&adev->pm.mutex);
ci_dpm_disable(adev); ci_dpm_disable(adev);
mutex_unlock(&adev->pm.mutex); mutex_unlock(&adev->pm.mutex);
} else {
ci_dpm_stop_smc(adev);
} }
return 0; return 0;
......
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