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

drm/amdgpu/uvd7: add uvd doorbell initialization for sriov

Add UVD doorbell for SRIOV.

Signed-off-by: Frank Min <Frank.Min@amd.com>
Signed-off-by: Xiangliang Yu <Xiangliang.Yu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Frank Min and committed by
Alex Deucher
beb2ced5 247ac951

+14
+14
drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
··· 103 103 { 104 104 struct amdgpu_device *adev = ring->adev; 105 105 106 + if (ring->use_doorbell) 107 + return adev->wb.wb[ring->wptr_offs]; 108 + 106 109 if (ring == &adev->uvd.ring_enc[0]) 107 110 return RREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_RB_WPTR)); 108 111 else ··· 136 133 static void uvd_v7_0_enc_ring_set_wptr(struct amdgpu_ring *ring) 137 134 { 138 135 struct amdgpu_device *adev = ring->adev; 136 + 137 + if (ring->use_doorbell) { 138 + /* XXX check if swapping is necessary on BE */ 139 + adev->wb.wb[ring->wptr_offs] = lower_32_bits(ring->wptr); 140 + WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); 141 + return; 142 + } 139 143 140 144 if (ring == &adev->uvd.ring_enc[0]) 141 145 WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_RB_WPTR), ··· 431 421 for (i = 0; i < adev->uvd.num_enc_rings; ++i) { 432 422 ring = &adev->uvd.ring_enc[i]; 433 423 sprintf(ring->name, "uvd_enc%d", i); 424 + if (amdgpu_sriov_vf(adev)) { 425 + ring->use_doorbell = true; 426 + ring->doorbell_index = AMDGPU_DOORBELL64_UVD_RING0_1 * 2; 427 + } 434 428 r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.irq, 0); 435 429 if (r) 436 430 return r;