summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/amdgpu/cz_dpm.c
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2015-06-09 21:32:53 (GMT)
committerAlex Deucher <alexander.deucher@amd.com>2015-06-10 13:31:26 (GMT)
commit05188312e2ea8991c75bc4ae947d4dc1e7a3bb17 (patch)
tree01d8870ed33afc85c28fb65e193a94fe7c89c57f /drivers/gpu/drm/amd/amdgpu/cz_dpm.c
parent6a00a09e49965d7414bacfe24adfc3f59c7d2647 (diff)
downloadlinux-05188312e2ea8991c75bc4ae947d4dc1e7a3bb17.tar.xz
drm/amdgpu/cz: don't call smu_init on resume
smu_init allocates buffers and initializes them. It does not touch the hw. There is no need to do it again on resume. It should really be part of sw_init (and smu_fini should be part of sw_fini), but we need the firmware sizes from the other IPs for firmware loading so we have to wait until sw init is done for all other IPs. Reviewed-by: Sonny Jiang <Sonny.Jiang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/cz_dpm.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/cz_dpm.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/cz_dpm.c b/drivers/gpu/drm/amd/amdgpu/cz_dpm.c
index f275b5d..131b473 100644
--- a/drivers/gpu/drm/amd/amdgpu/cz_dpm.c
+++ b/drivers/gpu/drm/amd/amdgpu/cz_dpm.c
@@ -1230,7 +1230,10 @@ static int cz_dpm_hw_init(void *handle)
mutex_lock(&adev->pm.mutex);
- /* init smc in dpm hw init */
+ /* smu init only needs to be called at startup, not resume.
+ * It should be in sw_init, but requires the fw info gathered
+ * in sw_init from other IP modules.
+ */
ret = cz_smu_init(adev);
if (ret) {
DRM_ERROR("amdgpu: smc initialization failed\n");
@@ -1297,6 +1300,10 @@ static int cz_dpm_hw_fini(void *handle)
mutex_lock(&adev->pm.mutex);
+ /* smu fini only needs to be called at teardown, not suspend.
+ * It should be in sw_fini, but we put it here for symmetry
+ * with smu init.
+ */
cz_smu_fini(adev);
if (adev->pm.dpm_enabled) {
@@ -1340,12 +1347,6 @@ static int cz_dpm_resume(void *handle)
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
mutex_lock(&adev->pm.mutex);
- ret = cz_smu_init(adev);
- if (ret) {
- DRM_ERROR("amdgpu: smc resume failed\n");
- mutex_unlock(&adev->pm.mutex);
- return ret;
- }
/* do the actual fw loading */
ret = cz_smu_start(adev);