diff options
author | jimqu <Jim.Qu@amd.com> | 2016-09-07 05:09:12 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-09-12 18:12:18 -0400 |
commit | 74b0b157845748e5817cae56c891b05d98da5f47 (patch) | |
tree | fe59c506c6a985084130a6e525904af1d78e5558 /drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |
parent | 3aecd24c65b9539b6faac2a52a9aaa7bc90f4677 (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.c | 20 |
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) |