drm/amdgpu: fix sdma doorbell issue on SDMA v6.0 and NBIO v7.7
authorXiaojian Du <Xiaojian.Du@amd.com>
Fri, 20 May 2022 13:33:29 +0000 (21:33 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 3 Jun 2022 20:44:15 +0000 (16:44 -0400)
This patch will fix sdma doorbell issue on SDMA v6.0 and NBIO v7.7.0.
NBIO v7.7.0 uses a new reg function -- Common SDMA to allow a common
doorbell range for all SDMA queues, this is different to the old
NBIO version. This patch will add configuration for CSDMA and enable
SDMA doorbell function.

Signed-off-by: Xiaojian Du <Xiaojian.Du@amd.com>
Reviewed-by: Tim Huang <Tim.Huang@amd.com>
Reviewed-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/nbio_v7_7.c

index cdc0c97..e786b82 100644 (file)
@@ -58,10 +58,16 @@ static void nbio_v7_7_sdma_doorbell_range(struct amdgpu_device *adev, int instan
                                          bool use_doorbell, int doorbell_index,
                                          int doorbell_size)
 {
-       u32 reg = SOC15_REG_OFFSET(NBIO, 0, regGDC0_BIF_SDMA0_DOORBELL_RANGE);
+       u32 reg = SOC15_REG_OFFSET(NBIO, 0, regGDC0_BIF_CSDMA_DOORBELL_RANGE);
        u32 doorbell_range = RREG32_PCIE_PORT(reg);
 
        if (use_doorbell) {
+               doorbell_range = REG_SET_FIELD(doorbell_range,
+                                              GDC0_BIF_CSDMA_DOORBELL_RANGE,
+                                              OFFSET, doorbell_index);
+               doorbell_range = REG_SET_FIELD(doorbell_range,
+                                              GDC0_BIF_CSDMA_DOORBELL_RANGE,
+                                              SIZE, doorbell_size);
                doorbell_range = REG_SET_FIELD(doorbell_range,
                                               GDC0_BIF_SDMA0_DOORBELL_RANGE,
                                               OFFSET, doorbell_index);