From 05188312e2ea8991c75bc4ae947d4dc1e7a3bb17 Mon Sep 17 00:00:00 2001 From: Alex Deucher Date: Tue, 9 Jun 2015 17:32:53 -0400 Subject: [PATCH] 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 Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/amdgpu/cz_dpm.c | 15 ++++++++------- 1 file 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); -- 2.20.1