[PATCH] drm/amdgpu: During s0ix don't wait to signal GFXOFF
Alex Deucher
alexdeucher at gmail.com
Fri Oct 1 13:26:27 UTC 2021
On Fri, Oct 1, 2021 at 6:16 AM Lijo Lazar <lijo.lazar at amd.com> 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 at amd.com>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> 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
>
More information about the amd-gfx
mailing list