Re: [PATCH V2] drm/amdgpu/sdma5.2: add begin/end_use ring callbacks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 08.12.23 um 23:53 schrieb Alex Deucher:
Add begin/end_use ring callbacks to disallow GFXOFF when
SDMA work is submitted and allow it again afterward.

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.

v2: move everything into sdma5.2 code.  No reason for this
to be generic at this point.

Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2220
Reviewed-by: Mario Limonciello <mario.limonciello@xxxxxxx> (v1)
Tested-by: Mario Limonciello <mario.limonciello@xxxxxxx> (v1)
Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx>

Maybe add a one line code comment explaining why we do this, with that done Reviewed-by: Christian König <christian.koenig@xxxxxxx>

Christian.

---
  drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c | 16 ++++++++++++++++
  1 file changed, 16 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
index 2e35f3571774..89f7955739f7 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
@@ -1643,6 +1643,20 @@ static void sdma_v5_2_get_clockgating_state(void *handle, u64 *flags)
  		*flags |= AMD_CG_SUPPORT_SDMA_LS;
  }
+static void sdma_v5_2_ring_begin_use(struct amdgpu_ring *ring)
+{
+	struct amdgpu_device *adev = ring->adev;
+
+	amdgpu_gfx_off_ctrl(adev, false);
+}
+
+static void sdma_v5_2_ring_end_use(struct amdgpu_ring *ring)
+{
+	struct amdgpu_device *adev = ring->adev;
+
+	amdgpu_gfx_off_ctrl(adev, true);
+}
+
  const struct amd_ip_funcs sdma_v5_2_ip_funcs = {
  	.name = "sdma_v5_2",
  	.early_init = sdma_v5_2_early_init,
@@ -1690,6 +1704,8 @@ static const struct amdgpu_ring_funcs sdma_v5_2_ring_funcs = {
  	.test_ib = sdma_v5_2_ring_test_ib,
  	.insert_nop = sdma_v5_2_ring_insert_nop,
  	.pad_ib = sdma_v5_2_ring_pad_ib,
+	.begin_use = sdma_v5_2_ring_begin_use,
+	.end_use = sdma_v5_2_ring_end_use,
  	.emit_wreg = sdma_v5_2_ring_emit_wreg,
  	.emit_reg_wait = sdma_v5_2_ring_emit_reg_wait,
  	.emit_reg_write_reg_wait = sdma_v5_2_ring_emit_reg_write_reg_wait,




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux