drm/amdgpu/jpeg: mmsch_v4_0_3 requires doorbell on 32 byte boundary
authorSamir Dhume <samir.dhume@amd.com>
Mon, 17 Jul 2023 15:33:55 +0000 (11:33 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Aug 2023 22:08:27 +0000 (18:08 -0400)
BASE: VCN0 unified (32 byte boundary)
BASE+4: MJPEG0
BASE+5: MJPEG1
BASE+6: MJPEG2
BASE+7: MJPEG3
BASE+12: MJPEG4
BASE+13: MJPEG5
BASE+14: MJPEG6
BASE+15: MJPEG7

Signed-off-by: Samir Dhume <samir.dhume@amd.com>
Acked-by: Leo Liu <leo.liu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c

index 153731d..03967d8 100644 (file)
@@ -109,9 +109,20 @@ static int jpeg_v4_0_3_sw_init(void *handle)
                        ring = &adev->jpeg.inst[i].ring_dec[j];
                        ring->use_doorbell = true;
                        ring->vm_hub = AMDGPU_MMHUB0(adev->jpeg.inst[i].aid_id);
-                       ring->doorbell_index =
-                               (adev->doorbell_index.vcn.vcn_ring0_1 << 1) +
-                               1 + j + 9 * jpeg_inst;
+                       if (!amdgpu_sriov_vf(adev)) {
+                               ring->doorbell_index =
+                                       (adev->doorbell_index.vcn.vcn_ring0_1 << 1) +
+                                       1 + j + 9 * jpeg_inst;
+                       } else {
+                               if (j < 4)
+                                       ring->doorbell_index =
+                                               (adev->doorbell_index.vcn.vcn_ring0_1 << 1) +
+                                               4 + j + 32 * jpeg_inst;
+                               else
+                                       ring->doorbell_index =
+                                               (adev->doorbell_index.vcn.vcn_ring0_1 << 1) +
+                                               8 + j + 32 * jpeg_inst;
+                       }
                        sprintf(ring->name, "jpeg_dec_%d.%d", adev->jpeg.inst[i].aid_id, j);
                        r = amdgpu_ring_init(adev, ring, 512, &adev->jpeg.inst->irq, 0,
                                                AMDGPU_RING_PRIO_DEFAULT, NULL);