<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<p style="font-family:Arial;font-size:11pt;color:#0078D7;margin:5pt;" align="Left">
[AMD Official Use Only - Internal Distribution Only]<br>
</p>
<br>
<div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
The problem is we are not properly suspending some of these blocks in the first place.  Please take a look at my WIP patches here:</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<a href="https://gitlab.freedesktop.org/agd5f/linux/-/commits/s0ix-4" id="LPlnk">https://gitlab.freedesktop.org/agd5f/linux/-/commits/s0ix-4</a><br>
</div>
<div class="_Entity _EType_OWALinkPreview _EId_OWALinkPreview _EReadonly_1"></div>
<br>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Alex</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Vishwakarma, Pratik <Pratik.Vishwakarma@amd.com><br>
<b>Sent:</b> Tuesday, March 16, 2021 4:42 AM<br>
<b>To:</b> Deucher, Alexander <Alexander.Deucher@amd.com>; Liang, Prike <Prike.Liang@amd.com>; amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org><br>
<b>Cc:</b> Vishwakarma, Pratik <Pratik.Vishwakarma@amd.com><br>
<b>Subject:</b> [PATCH] drm/amd/amdgpu: Skip GFX CG/PG state change during S0i3 resume</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">[Why]<br>
amdgpu resume time is over 1 sec.<br>
<br>
[How]<br>
GFX CG/PG state change is skipped for S0ix suspend.<br>
Skip CG/PG state chage for GFX during S0ix resume too.<br>
This reduces resume time to under 150msec.<br>
<br>
Signed-off-by: Pratik Vishwakarma <Pratik.Vishwakarma@amd.com><br>
---<br>
 drivers/gpu/drm/amd/amdgpu/amdgpu.h        |  3 +++<br>
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 11 +++++++++++<br>
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c    |  7 ++++++-<br>
 3 files changed, 20 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h<br>
index 5da112b3feb0..036ca9f0c739 100644<br>
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h<br>
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h<br>
@@ -1040,6 +1040,9 @@ struct amdgpu_device {<br>
          */<br>
         bool                             in_poweroff_reboot_com;<br>
 <br>
+       /* Flag used to identify system is in resume sequence */<br>
+       bool                            in_resume;<br>
+<br>
         atomic_t                         in_gpu_reset;<br>
         enum pp_mp1_state               mp1_state;<br>
         struct rw_semaphore reset_sem;<br>
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c<br>
index 3dbee9671d59..4089135b6493 100644<br>
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c<br>
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c<br>
@@ -2349,6 +2349,11 @@ static int amdgpu_device_set_cg_state(struct amdgpu_device *adev,<br>
                     adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCN &&<br>
                     adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_JPEG &&<br>
                     adev->ip_blocks[i].version->funcs->set_clockgating_state) {<br>
+                       /* Skip GFX gating for S0ix during resume */<br>
+                       if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GFX) {<br>
+                               if (amdgpu_acpi_is_s0ix_supported(adev) && adev->in_resume)<br>
+                                       continue;<br>
+                       }<br>
                         /* enable clockgating to save power */<br>
                         r = adev->ip_blocks[i].version->funcs->set_clockgating_state((void *)adev,<br>
                                                                                      state);<br>
@@ -2380,6 +2385,12 @@ static int amdgpu_device_set_pg_state(struct amdgpu_device *adev, enum amd_power<br>
                     adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCN &&<br>
                     adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_JPEG &&<br>
                     adev->ip_blocks[i].version->funcs->set_powergating_state) {<br>
+                       /* Skip GFX gating for S0ix during resume */<br>
+                       if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GFX) {<br>
+                               if (amdgpu_acpi_is_s0ix_supported(adev) && adev->in_resume)<br>
+                                       continue;<br>
+                       }<br>
+<br>
                         /* enable powergating to save power */<br>
                         r = adev->ip_blocks[i].version->funcs->set_powergating_state((void *)adev,<br>
                                                                                         state);<br>
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c<br>
index f98843eeb084..693ad3b3e6a0 100644<br>
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c<br>
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c<br>
@@ -1400,8 +1400,13 @@ static int amdgpu_pmops_suspend(struct device *dev)<br>
 static int amdgpu_pmops_resume(struct device *dev)<br>
 {<br>
         struct drm_device *drm_dev = dev_get_drvdata(dev);<br>
+       struct amdgpu_device *adev = drm_to_adev(drm_dev);<br>
+       int r;<br>
 <br>
-       return amdgpu_device_resume(drm_dev, true);<br>
+       adev->in_resume = true;<br>
+       r = amdgpu_device_resume(drm_dev, true);<br>
+       adev->in_resume = false;<br>
+       return r;<br>
 }<br>
 <br>
 static int amdgpu_pmops_freeze(struct device *dev)<br>
-- <br>
2.25.1<br>
<br>
</div>
</span></font></div>
</div>
</body>
</html>