aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
diff options
context:
space:
mode:
authorjimqu <Jim.Qu@amd.com>2016-09-07 05:09:12 -0400
committerAlex Deucher <alexander.deucher@amd.com>2016-09-12 18:12:18 -0400
commit74b0b157845748e5817cae56c891b05d98da5f47 (patch)
treefe59c506c6a985084130a6e525904af1d78e5558 /drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
parent3aecd24c65b9539b6faac2a52a9aaa7bc90f4677 (diff)
drm/amd/amdgpu: S4 issue for amdgpu (v2)
reset the asic if adapter is not powerdown when doing freeze() thaw() and restore(), in order to get a valid state of adapter. v2: squash in warning fix from Rex Signed-off-by: JimQu <Jim.Qu@amd.com> Acked-by: Christian König <christian.koenig@amd.com> Tested By: Shawn Starr <shawn.starr@rogers.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.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 1aa0364d7961..d324a079fe9b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1895,6 +1895,10 @@ int amdgpu_device_suspend(struct drm_device *dev, bool suspend, bool fbcon)
1895 /* Shut down the device */ 1895 /* Shut down the device */
1896 pci_disable_device(dev->pdev); 1896 pci_disable_device(dev->pdev);
1897 pci_set_power_state(dev->pdev, PCI_D3hot); 1897 pci_set_power_state(dev->pdev, PCI_D3hot);
1898 } else {
1899 r = amdgpu_asic_reset(adev);
1900 if (r)
1901 DRM_ERROR("amdgpu asic reset failed\n");
1898 } 1902 }
1899 1903
1900 if (fbcon) { 1904 if (fbcon) {
@@ -1925,22 +1929,26 @@ int amdgpu_device_resume(struct drm_device *dev, bool resume, bool fbcon)
1925 dev->switch_power_state == DRM_SWITCH_POWER_DYNAMIC_OFF) 1929 dev->switch_power_state == DRM_SWITCH_POWER_DYNAMIC_OFF)
1926 return 0; 1930 return 0;
1927 1931
1928 if (fbcon) { 1932 if (fbcon)
1929 console_lock(); 1933 console_lock();
1930 } 1934
1931 if (resume) { 1935 if (resume) {
1932 pci_set_power_state(dev->pdev, PCI_D0); 1936 pci_set_power_state(dev->pdev, PCI_D0);
1933 pci_restore_state(dev->pdev); 1937 pci_restore_state(dev->pdev);
1934 if (pci_enable_device(dev->pdev)) { 1938 r = pci_enable_device(dev->pdev);
1939 if (r) {
1935 if (fbcon) 1940 if (fbcon)
1936 console_unlock(); 1941 console_unlock();
1937 return -1; 1942 return r;
1938 } 1943 }
1939 } 1944 }
1940 1945
1941 /* post card */ 1946 /* post card */
1942 if (!amdgpu_card_posted(adev)) 1947 if (!amdgpu_card_posted(adev) || !resume) {
1943 amdgpu_atom_asic_init(adev->mode_info.atom_context); 1948 r = amdgpu_atom_asic_init(adev->mode_info.atom_context);
1949 if (r)
1950 DRM_ERROR("amdgpu asic init failed\n");
1951 }
1944 1952
1945 r = amdgpu_resume(adev); 1953 r = amdgpu_resume(adev);
1946 if (r) 1954 if (r)