- Need skip the RLC/CP/GFX disable for let GFXOFF enter during suspend period.
- For s0i3 suspend only need suspend DCE and each IP interrupt.
- Before VBIOS POSTed check and atom HW INT need set the GPU power status change
  to D0 in the resume period, otherwise the HW will be mess up and see the SDMA 
hang.

Signed-off-by: Prike Liang <prike.li...@amd.com>
Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>
Acked-by: Huang Rui <ray.hu...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index f78aace..cf6a1b9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2650,8 +2650,10 @@ static int amdgpu_device_ip_suspend_phase1(struct 
amdgpu_device *adev)
 {
        int i, r;
 
-       amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
-       amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);
+       if (!amdgpu_acpi_is_s0ix_supported()) {
+               amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
+               amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);
+       }
 
        for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
                if (!adev->ip_blocks[i].status.valid)
@@ -3706,8 +3708,10 @@ int amdgpu_device_suspend(struct drm_device *dev, bool 
fbcon)
 
        amdgpu_fence_driver_suspend(adev);
 
-       r = amdgpu_device_ip_suspend_phase2(adev);
-
+       if (!amdgpu_acpi_is_s0ix_supported())
+               r = amdgpu_device_ip_suspend_phase2(adev);
+       else
+               amdgpu_gfx_state_change_set(adev, sGpuChangeState_D3Entry);
        /* evict remaining vram memory
         * This second call to evict vram is to evict the gart page table
         * using the CPU.
@@ -3738,6 +3742,9 @@ int amdgpu_device_resume(struct drm_device *dev, bool 
fbcon)
        if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
                return 0;
 
+       if (amdgpu_acpi_is_s0ix_supported())
+               amdgpu_gfx_state_change_set(adev, sGpuChangeState_D0Entry);
+
        /* post card */
        if (amdgpu_device_need_post(adev)) {
                r = amdgpu_device_asic_init(adev);
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to