On Tue, Jul 14, 2026 at 5:39 AM Christian König
<[email protected]> wrote:
>
> On 7/13/26 20:27, Alex Deucher wrote:
> > We need to disallow gfxoff if we touch GC MMIO registers.
> > At the moment we use KIQ or MES for TLB flushes so
> > no intended functional change.
>
> IIRC we actually tried this before and reverted it because it caused quite a 
> bit of trouble.
>
> The final solution was to use the semaphore to prevent GFXOFF from happening.

I think you need to disallow gfxoff to access the semaphore registers
via MMIO.  The semaphore registers just prevent the smu from entering
gfxoff while they are held.  I think the problem was that the smu
would enter gfxoff while the CP/SDMA was waiting for the ACK which
caused the ACK to never signal.

Alex

>
> Regards,
> Christian.
>
> >
> > Signed-off-by: Alex Deucher <[email protected]>
> > ---
> >  drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 7 +++++++
> >  1 file changed, 7 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c 
> > b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > index 1fcc0594fd0a9..83b91c94a6623 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > @@ -808,6 +808,10 @@ static void gmc_v9_0_flush_gpu_tlb(struct 
> > amdgpu_device *adev, uint32_t vmid,
> >               return;
> >       }
> >
> > +     /* disabllow gfxoff when we invalidate */
> > +     if (vmhub < AMDGPU_MMHUB0(0))
> > +             amdgpu_gfx_off_ctrl(adev, false);
> > +
> >       /* This path is needed before KIQ/MES/GFXOFF are set up */
> >       spin_lock(&adev->gmc.invalidate_lock);
> >
> > @@ -873,6 +877,9 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device 
> > *adev, uint32_t vmid,
> >
> >       spin_unlock(&adev->gmc.invalidate_lock);
> >
> > +     if (vmhub < AMDGPU_MMHUB0(0))
> > +             amdgpu_gfx_off_ctrl(adev, true);
> > +
> >       if (j < adev->usec_timeout)
> >               return;
> >
>

Reply via email to