aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
diff options
context:
space:
mode:
authorRex Zhu <Rex.Zhu@amd.com>2018-08-14 04:54:15 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-08-27 12:11:01 -0400
commit05df1f01b2924d2e1737deeb63ad115c1df19021 (patch)
tree130662a1e11852761a597089a7c7415fff8ca603 /drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
parent1112a46b48b74766bd957742c853c8a582a81991 (diff)
drm/amdgpu: Set power ungate state when suspend/fini
Unify to set power ungate state at the begin of suspend/fini. Remove the workaround code for gfx off feature in amdgpu_device.c. Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 04fbc63a83b7..13ea4da9f23a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1817,6 +1817,8 @@ static int amdgpu_device_ip_fini(struct amdgpu_device *adev)
1817 int i, r; 1817 int i, r;
1818 1818
1819 amdgpu_amdkfd_device_fini(adev); 1819 amdgpu_amdkfd_device_fini(adev);
1820
1821 amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
1820 /* need to disable SMC first */ 1822 /* need to disable SMC first */
1821 for (i = 0; i < adev->num_ip_blocks; i++) { 1823 for (i = 0; i < adev->num_ip_blocks; i++) {
1822 if (!adev->ip_blocks[i].status.hw) 1824 if (!adev->ip_blocks[i].status.hw)
@@ -1831,8 +1833,7 @@ static int amdgpu_device_ip_fini(struct amdgpu_device *adev)
1831 adev->ip_blocks[i].version->funcs->name, r); 1833 adev->ip_blocks[i].version->funcs->name, r);
1832 return r; 1834 return r;
1833 } 1835 }
1834 amdgpu_gfx_off_ctrl(adev, false); 1836
1835 cancel_delayed_work_sync(&adev->gfx.gfx_off_delay_work);
1836 r = adev->ip_blocks[i].version->funcs->hw_fini((void *)adev); 1837 r = adev->ip_blocks[i].version->funcs->hw_fini((void *)adev);
1837 /* XXX handle errors */ 1838 /* XXX handle errors */
1838 if (r) { 1839 if (r) {
@@ -1955,6 +1956,8 @@ static int amdgpu_device_ip_suspend_phase1(struct amdgpu_device *adev)
1955 if (amdgpu_sriov_vf(adev)) 1956 if (amdgpu_sriov_vf(adev))
1956 amdgpu_virt_request_full_gpu(adev, false); 1957 amdgpu_virt_request_full_gpu(adev, false);
1957 1958
1959 amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
1960
1958 for (i = adev->num_ip_blocks - 1; i >= 0; i--) { 1961 for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
1959 if (!adev->ip_blocks[i].status.valid) 1962 if (!adev->ip_blocks[i].status.valid)
1960 continue; 1963 continue;
@@ -2010,10 +2013,6 @@ static int amdgpu_device_ip_suspend_phase2(struct amdgpu_device *adev)
2010 DRM_ERROR("set_clockgating_state(ungate) SMC failed %d\n", r); 2013 DRM_ERROR("set_clockgating_state(ungate) SMC failed %d\n", r);
2011 } 2014 }
2012 2015
2013 /* call smu to disable gfx off feature first when suspend */
2014 amdgpu_gfx_off_ctrl(adev, false);
2015 cancel_delayed_work_sync(&adev->gfx.gfx_off_delay_work);
2016
2017 for (i = adev->num_ip_blocks - 1; i >= 0; i--) { 2016 for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
2018 if (!adev->ip_blocks[i].status.valid) 2017 if (!adev->ip_blocks[i].status.valid)
2019 continue; 2018 continue;