On Fri, Oct 1, 2021 at 6:16 AM Lijo Lazar <lijo.lazar@xxxxxxx> wrote: > > In the rare event when GFX IP suspend coincides with a s0ix entry, don't > schedule a delayed work, instead signal PMFW immediately to allow GFXOFF > entry. GFXOFF is a prerequisite for s0ix entry. PMFW needs to be > signaled about GFXOFF status before amd-pmc module passes OS HINT > to PMFW telling that everything is ready for a safe s0ix entry. > > Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1712 > > Signed-off-by: Lijo Lazar <lijo.lazar@xxxxxxx> Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c > index e7f06bd0f0cd..1916ec84dd71 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c > @@ -31,6 +31,8 @@ > /* delay 0.1 second to enable gfx off feature */ > #define GFX_OFF_DELAY_ENABLE msecs_to_jiffies(100) > > +#define GFX_OFF_NO_DELAY 0 > + > /* > * GPU GFX IP block helpers function. > */ > @@ -558,6 +560,8 @@ int amdgpu_gfx_enable_kcq(struct amdgpu_device *adev) > > void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable) > { > + unsigned long delay = GFX_OFF_DELAY_ENABLE; > + > if (!(adev->pm.pp_feature & PP_GFXOFF_MASK)) > return; > > @@ -573,8 +577,14 @@ void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable) > > adev->gfx.gfx_off_req_count--; > > - if (adev->gfx.gfx_off_req_count == 0 && !adev->gfx.gfx_off_state) > - schedule_delayed_work(&adev->gfx.gfx_off_delay_work, GFX_OFF_DELAY_ENABLE); > + if (adev->gfx.gfx_off_req_count == 0 && > + !adev->gfx.gfx_off_state) { > + /* If going to s2idle, no need to wait */ > + if (adev->in_s0ix) > + delay = GFX_OFF_NO_DELAY; > + schedule_delayed_work(&adev->gfx.gfx_off_delay_work, > + delay); > + } > } else { > if (adev->gfx.gfx_off_req_count == 0) { > cancel_delayed_work_sync(&adev->gfx.gfx_off_delay_work); > -- > 2.17.1 >