On Fri, Dec 8, 2023 at 5:19 PM Alex Deucher <alexander.deucher@xxxxxxx> wrote: > > Add helper functions to disallow GFXOFF while SDMA has work. > This should avoid corner cases where GFXOFF is erroneously > entered when SDMA is still active. For now just allow/disallow > GFXOFF in the begin and end helpers until we root cause the > issue. This should not impact power as SDMA usage is pretty > minimal and GFXOSS should not be active when SDMA is active > anyway, this just makes it explicit. > > Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx> Since sdma5.2 is the only version that currently needs this I think we can just squash this all into sdma5.2. There may even be 5.2.x variants that don't need this. Better to keep it all in that code. Will send out a v2. Alex > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 14 ++++++++++++++ > drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h | 3 +++ > 2 files changed, 17 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c > index 1d9d187de6ee..d4b08d03970c 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c > @@ -326,3 +326,17 @@ int amdgpu_sdma_ras_sw_init(struct amdgpu_device *adev) > > return 0; > } > + > +void amdgpu_sdma_ring_begin_use(struct amdgpu_ring *ring) > +{ > + struct amdgpu_device *adev = ring->adev; > + > + amdgpu_gfx_off_ctrl(adev, false); > +} > + > +void amdgpu_sdma_ring_end_use(struct amdgpu_ring *ring) > +{ > + struct amdgpu_device *adev = ring->adev; > + > + amdgpu_gfx_off_ctrl(adev, true); > +} > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h > index 173a2a308078..b52d16829204 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h > @@ -171,4 +171,7 @@ void amdgpu_sdma_destroy_inst_ctx(struct amdgpu_device *adev, > bool duplicate); > int amdgpu_sdma_ras_sw_init(struct amdgpu_device *adev); > > +void amdgpu_sdma_ring_begin_use(struct amdgpu_ring *ring); > +void amdgpu_sdma_ring_end_use(struct amdgpu_ring *ring); > + > #endif > -- > 2.42.0 >