Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: add kiq version interface for RREG32/WREG32

Reading some registers by mmio will result in hang when GPU is in
"gfxoff" state.This problem can be solved by GPU in "ring command
packages" way.

Signed-off-by: chen gong <curry.gong@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

chen gong and committed by
Alex Deucher
c68dbcd8 d33a99c4

+6 -2
+4
drivers/gpu/drm/amd/amdgpu/amdgpu.h
··· 1009 1009 1010 1010 #define AMDGPU_REGS_IDX (1<<0) 1011 1011 #define AMDGPU_REGS_NO_KIQ (1<<1) 1012 + #define AMDGPU_REGS_KIQ (1<<2) 1012 1013 1013 1014 #define RREG32_NO_KIQ(reg) amdgpu_mm_rreg(adev, (reg), AMDGPU_REGS_NO_KIQ) 1014 1015 #define WREG32_NO_KIQ(reg, v) amdgpu_mm_wreg(adev, (reg), (v), AMDGPU_REGS_NO_KIQ) 1016 + 1017 + #define RREG32_KIQ(reg) amdgpu_mm_rreg(adev, (reg), AMDGPU_REGS_KIQ) 1018 + #define WREG32_KIQ(reg, v) amdgpu_mm_wreg(adev, (reg), (v), AMDGPU_REGS_KIQ) 1015 1019 1016 1020 #define RREG8(reg) amdgpu_mm_rreg8(adev, (reg)) 1017 1021 #define WREG8(reg, v) amdgpu_mm_wreg8(adev, (reg), (v))
+2 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
··· 216 216 { 217 217 uint32_t ret; 218 218 219 - if (!(acc_flags & AMDGPU_REGS_NO_KIQ) && amdgpu_sriov_runtime(adev)) 219 + if ((acc_flags & AMDGPU_REGS_KIQ) || (!(acc_flags & AMDGPU_REGS_NO_KIQ) && amdgpu_sriov_runtime(adev))) 220 220 return amdgpu_kiq_rreg(adev, reg); 221 221 222 222 if ((reg * 4) < adev->rmmio_size && !(acc_flags & AMDGPU_REGS_IDX)) ··· 294 294 adev->last_mm_index = v; 295 295 } 296 296 297 - if (!(acc_flags & AMDGPU_REGS_NO_KIQ) && amdgpu_sriov_runtime(adev)) 297 + if ((acc_flags & AMDGPU_REGS_KIQ) || (!(acc_flags & AMDGPU_REGS_NO_KIQ) && amdgpu_sriov_runtime(adev))) 298 298 return amdgpu_kiq_wreg(adev, reg, v); 299 299 300 300 if ((reg * 4) < adev->rmmio_size && !(acc_flags & AMDGPU_REGS_IDX))