diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2015-06-10 00:32:53 +0300 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-06-10 16:31:26 +0300 |
commit | 05188312e2ea8991c75bc4ae947d4dc1e7a3bb17 (patch) | |
tree | 01d8870ed33afc85c28fb65e193a94fe7c89c57f /drivers/gpu/drm/amd | |
parent | 6a00a09e49965d7414bacfe24adfc3f59c7d2647 (diff) | |
download | linux-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')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cz_dpm.c | 15 |
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 f275b5d2d060..131b4733b112 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); |