drm/amdgpu: add vcn nbio doorbell range setting for 2nd vcn instance
authorJames Zhu <James.Zhu@amd.com>
Wed, 10 Jul 2019 15:50:24 +0000 (10:50 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 18 Jul 2019 19:18:05 +0000 (14:18 -0500)
add vcn nbio doorbell range setting for 2nd vcn instance

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

index b601da7eb97c56a5e0635269a7bb7c5729c6cd45..29123aa161138e32011bc112f8ec407c37b7b043 100644 (file)
@@ -674,7 +674,7 @@ struct amdgpu_nbio_funcs {
        void (*sdma_doorbell_range)(struct amdgpu_device *adev, int instance,
                        bool use_doorbell, int doorbell_index, int doorbell_size);
        void (*vcn_doorbell_range)(struct amdgpu_device *adev, bool use_doorbell,
-                       int doorbell_index);
+                                  int doorbell_index, int instance);
        void (*enable_doorbell_aperture)(struct amdgpu_device *adev,
                                         bool enable);
        void (*enable_doorbell_selfring_aperture)(struct amdgpu_device *adev,
index 835d7b1a841ffc0ede9cdf87838bd3f349087a72..c05d78d4efc667ce6443f9df6ef86332ed56acef 100644 (file)
@@ -92,7 +92,7 @@ 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 doorbell_index, int instance)
 {
        u32 reg = SOC15_REG_OFFSET(NBIO, 0, mmBIF_MMSCH0_DOORBELL_RANGE);
 
index d8c9972a315b31cbe2460ca7dc2e7f17c5b01cf3..910fffced43bb9ecabf4868b73c0c6b686b83f08 100644 (file)
 #define GPU_HDP_FLUSH_DONE__RSVD_ENG4_MASK     0x00010000L
 #define GPU_HDP_FLUSH_DONE__RSVD_ENG5_MASK     0x00020000L
 
+#define mmBIF_MMSCH1_DOORBELL_RANGE                     0x01dc
+#define mmBIF_MMSCH1_DOORBELL_RANGE_BASE_IDX            2
+//BIF_MMSCH1_DOORBELL_RANGE
+#define BIF_MMSCH1_DOORBELL_RANGE__OFFSET__SHIFT        0x2
+#define BIF_MMSCH1_DOORBELL_RANGE__SIZE__SHIFT          0x10
+#define BIF_MMSCH1_DOORBELL_RANGE__OFFSET_MASK          0x00000FFCL
+#define BIF_MMSCH1_DOORBELL_RANGE__SIZE_MASK            0x001F0000L
+
 static void nbio_v7_4_remap_hdp_registers(struct amdgpu_device *adev)
 {
        WREG32_SOC15(NBIO, 0, mmREMAP_HDP_MEM_FLUSH_CNTL,
@@ -115,11 +123,17 @@ static void nbio_v7_4_sdma_doorbell_range(struct amdgpu_device *adev, int instan
 }
 
 static void nbio_v7_4_vcn_doorbell_range(struct amdgpu_device *adev, bool use_doorbell,
-                                        int doorbell_index)
+                                        int doorbell_index, int instance)
 {
-       u32 reg = SOC15_REG_OFFSET(NBIO, 0, mmBIF_MMSCH0_DOORBELL_RANGE);
+       u32 reg;
+       u32 doorbell_range;
+
+       if (instance)
+               reg = SOC15_REG_OFFSET(NBIO, 0, mmBIF_MMSCH1_DOORBELL_RANGE);
+       else
+               reg = SOC15_REG_OFFSET(NBIO, 0, mmBIF_MMSCH0_DOORBELL_RANGE);
 
-       u32 doorbell_range = RREG32(reg);
+       doorbell_range = RREG32(reg);
 
        if (use_doorbell) {
                doorbell_range = REG_SET_FIELD(doorbell_range,
index ebef2f6636546785ff8f056b6e4e57597d17b9b5..b6b77a063c348133a012be325ff3f3ff15bb39b4 100644 (file)
@@ -245,7 +245,7 @@ static int vcn_v2_0_hw_init(void *handle)
        int i, r;
 
        adev->nbio_funcs->vcn_doorbell_range(adev, ring->use_doorbell,
-               ring->doorbell_index);
+                                            ring->doorbell_index, 0);
 
        ring->sched.ready = true;
        r = amdgpu_ring_test_ring(ring);
index 840737df19c0145516380bfc585e8438bd4eada7..75fdb6881ac0be7157a9eb2fa574e89bcf6f9201 100644 (file)
@@ -212,7 +212,7 @@ static int vcn_v2_5_hw_init(void *handle)
        int i, r;
 
        adev->nbio_funcs->vcn_doorbell_range(adev, ring->use_doorbell,
-               ring->doorbell_index);
+                                            ring->doorbell_index, 0);
 
        r = amdgpu_ring_test_ring(ring);
        if (r) {