Set the quantums for queue switching on the instance.
Signed-off-by: Alex Deucher <[email protected]>
---
drivers/gpu/drm/amd/amdgpu/sdma_v7_1.c | 32 ++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v7_1.c
b/drivers/gpu/drm/amd/amdgpu/sdma_v7_1.c
index f20e0fc3fc743..244f7df5ede19 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v7_1.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v7_1.c
@@ -478,6 +478,38 @@ static int sdma_v7_1_gfx_resume_instance(struct
amdgpu_device *adev, int i, bool
rb_cntl = REG_SET_FIELD(rb_cntl, SDMA0_SDMA_QUEUE0_RB_CNTL, RB_PRIV, 1);
WREG32_SOC15_IP(GC, sdma_v7_1_get_reg_offset(adev, i,
regSDMA0_SDMA_QUEUE0_RB_CNTL), rb_cntl);
+ /* handle queue priority and quantums */
+ temp = REG_SET_FIELD(0, SDMA0_SDMA_QUEUE0_SCHEDULE_CNTL, GLOBAL_ID, 2);
/* 3-0, 3 is highest priority */
+ temp = REG_SET_FIELD(temp, SDMA0_SDMA_QUEUE0_SCHEDULE_CNTL,
CONTEXT_QUANTUM,
+ AMDGPU_SDMA_CONTEXT_QUANTUM); /* value * 100us */
+ WREG32_SOC15_IP(GC, sdma_v7_1_get_reg_offset(adev, i,
regSDMA0_SDMA_QUEUE0_SCHEDULE_CNTL), temp);
+
+ temp = REG_SET_FIELD(0, SDMA0_SDMA_GLOBAL_QUANTUM, GLOBAL_FOCUS_QUANTUM,
+ AMDGPU_SDMA_FOCUS_QUANTUM); /* value * 100us */
+ temp = REG_SET_FIELD(temp, SDMA0_SDMA_GLOBAL_QUANTUM,
GLOBAL_NORMAL_QUANTUM,
+ AMDGPU_SDMA_NORMAL_QUANTUM); /* value * 100us */
+ WREG32_SOC15_IP(GC, sdma_v7_1_get_reg_offset(adev, i,
regSDMA0_SDMA_GLOBAL_QUANTUM), temp);
+
+ temp = REG_SET_FIELD(0, SDMA0_SDMA_PROCESS_QUANTUM0, PROCESS0_QUANTUM,
+ AMDGPU_SDMA_PROCESS_QUANTUM); /* value * 100us */
+ temp = REG_SET_FIELD(temp, SDMA0_SDMA_PROCESS_QUANTUM0,
PROCESS1_QUANTUM,
+ AMDGPU_SDMA_PROCESS_QUANTUM); /* value * 100us */
+ temp = REG_SET_FIELD(temp, SDMA0_SDMA_PROCESS_QUANTUM0,
PROCESS2_QUANTUM,
+ AMDGPU_SDMA_PROCESS_QUANTUM); /* value * 100us */
+ temp = REG_SET_FIELD(temp, SDMA0_SDMA_PROCESS_QUANTUM0,
PROCESS3_QUANTUM,
+ AMDGPU_SDMA_PROCESS_QUANTUM); /* value * 100us */
+ WREG32_SOC15_IP(GC, sdma_v7_1_get_reg_offset(adev, i,
regSDMA0_SDMA_PROCESS_QUANTUM0), temp);
+
+ temp = REG_SET_FIELD(0, SDMA0_SDMA_PROCESS_QUANTUM1, PROCESS4_QUANTUM,
+ AMDGPU_SDMA_PROCESS_QUANTUM); /* value * 100us */
+ temp = REG_SET_FIELD(temp, SDMA0_SDMA_PROCESS_QUANTUM1,
PROCESS5_QUANTUM,
+ AMDGPU_SDMA_PROCESS_QUANTUM); /* value * 100us */
+ temp = REG_SET_FIELD(temp, SDMA0_SDMA_PROCESS_QUANTUM1,
PROCESS6_QUANTUM,
+ AMDGPU_SDMA_PROCESS_QUANTUM); /* value * 100us */
+ temp = REG_SET_FIELD(temp, SDMA0_SDMA_PROCESS_QUANTUM1,
PROCESS7_QUANTUM,
+ AMDGPU_SDMA_PROCESS_QUANTUM); /* value * 100us */
+ WREG32_SOC15_IP(GC, sdma_v7_1_get_reg_offset(adev, i,
regSDMA0_SDMA_PROCESS_QUANTUM1), temp);
+
/* Initialize the ring buffer's read and write pointers */
if (restore) {
WREG32_SOC15_IP(GC, sdma_v7_1_get_reg_offset(adev, i,
regSDMA0_SDMA_QUEUE0_RB_RPTR), lower_32_bits(ring->wptr << 2));
--
2.53.0