drm/amdgpu: add 2rd VCN instance doorbell support
authorLeo Liu <leo.liu@amd.com>
Thu, 10 Oct 2019 13:43:34 +0000 (09:43 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 1 Jul 2020 05:59:07 +0000 (01:59 -0400)
Sienna_Cichlid have 2 VCN instances, using different register for range

Signed-off-by: Leo Liu <leo.liu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: James Zhu <James.Zhu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_doorbell.h
drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c

index b8eb5ec..821289b 100644 (file)
@@ -193,8 +193,13 @@ typedef enum _AMDGPU_NAVI10_DOORBELL_ASSIGNMENT
        AMDGPU_NAVI10_DOORBELL64_VCN4_5                 = 0x18A,
        AMDGPU_NAVI10_DOORBELL64_VCN6_7                 = 0x18B,
 
+       AMDGPU_NAVI10_DOORBELL64_VCN8_9                 = 0x18C,
+       AMDGPU_NAVI10_DOORBELL64_VCNa_b                 = 0x18D,
+       AMDGPU_NAVI10_DOORBELL64_VCNc_d                 = 0x18E,
+       AMDGPU_NAVI10_DOORBELL64_VCNe_f                 = 0x18F,
+
        AMDGPU_NAVI10_DOORBELL64_FIRST_NON_CP           = AMDGPU_NAVI10_DOORBELL_sDMA_ENGINE0,
-       AMDGPU_NAVI10_DOORBELL64_LAST_NON_CP            = AMDGPU_NAVI10_DOORBELL64_VCN6_7,
+       AMDGPU_NAVI10_DOORBELL64_LAST_NON_CP            = AMDGPU_NAVI10_DOORBELL64_VCNe_f,
 
        AMDGPU_NAVI10_DOORBELL_MAX_ASSIGNMENT           = 0x18F,
        AMDGPU_NAVI10_DOORBELL_INVALID                  = 0xFFFF
index 4a00b06..7429f30 100644 (file)
@@ -38,6 +38,9 @@
 #define mmBIF_SDMA3_DOORBELL_RANGE             0x01d7
 #define mmBIF_SDMA3_DOORBELL_RANGE_BASE_IDX    2
 
+#define mmBIF_MMSCH1_DOORBELL_RANGE            0x01d8
+#define mmBIF_MMSCH1_DOORBELL_RANGE_BASE_IDX   2
+
 static void nbio_v2_3_remap_hdp_registers(struct amdgpu_device *adev)
 {
        WREG32_SOC15(NBIO, 0, mmREMAP_HDP_MEM_FLUSH_CNTL,
@@ -109,7 +112,8 @@ static void nbio_v2_3_sdma_doorbell_range(struct amdgpu_device *adev, int instan
 static void nbio_v2_3_vcn_doorbell_range(struct amdgpu_device *adev, bool use_doorbell,
                                         int doorbell_index, int instance)
 {
-       u32 reg = SOC15_REG_OFFSET(NBIO, 0, mmBIF_MMSCH0_DOORBELL_RANGE);
+       u32 reg = instance ? SOC15_REG_OFFSET(NBIO, 0, mmBIF_MMSCH1_DOORBELL_RANGE) :
+               SOC15_REG_OFFSET(NBIO, 0, mmBIF_MMSCH0_DOORBELL_RANGE);
 
        u32 doorbell_range = RREG32(reg);