Revert "drm/amdgpu: move nbio sdma_doorbell_range() into sdma code for vega"
authorAlex Deucher <alexander.deucher@amd.com>
Thu, 20 Oct 2022 15:38:56 +0000 (11:38 -0400)
committerSalvatore Bonaccorso <carnil@debian.org>
Fri, 21 Oct 2022 20:24:21 +0000 (21:24 +0100)
Origin: https://lore.kernel.org/stable/20221020153857.565160-1-alexander.deucher@amd.com/
Bug-Debian: https://bugs.debian.org/1022025

This reverts commit 9f55f36f749a7608eeef57d7d72991a9bd557341.

This patch was backported incorrectly when Sasha backported it and
the patch that caused the regression that this patch set fixed
was reverted in commit 412b844143e3 ("Revert "PCI/portdrv: Don't disable AER reporting in get_port_device_capability()"").
This isn't necessary and causes a regression so drop it.

Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2216
Cc: Shuah Khan <skhan@linuxfoundation.org>
Cc: Sasha Levin <sashal@kernel.org>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: <stable@vger.kernel.org> # 5.10
Tested-By: Diederik de Haas <didi.debian@cknow.org>
Gbp-Pq: Topic bugfix/all
Gbp-Pq: Name Revert-drm-amdgpu-move-nbio-sdma_doorbell_range-into.patch

drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
drivers/gpu/drm/amd/amdgpu/soc15.c

index a1a8e026b9fa60787da29be341e9c4c7fa6cf72c..1f2e2460e121ee134a72d423baeea06184474750 100644 (file)
@@ -1475,11 +1475,6 @@ static int sdma_v4_0_start(struct amdgpu_device *adev)
                WREG32_SDMA(i, mmSDMA0_CNTL, temp);
 
                if (!amdgpu_sriov_vf(adev)) {
-                       ring = &adev->sdma.instance[i].ring;
-                       adev->nbio.funcs->sdma_doorbell_range(adev, i,
-                               ring->use_doorbell, ring->doorbell_index,
-                               adev->doorbell_index.sdma_doorbell_range);
-
                        /* unhalt engine */
                        temp = RREG32_SDMA(i, mmSDMA0_F32_CNTL);
                        temp = REG_SET_FIELD(temp, SDMA0_F32_CNTL, HALT, 0);
index abd649285a22d8f9bcde9a2047711901989b2d71..7212b9900e0abafdf8386235789ec6f25167384d 100644 (file)
@@ -1332,6 +1332,25 @@ static int soc15_common_sw_fini(void *handle)
        return 0;
 }
 
+static void soc15_doorbell_range_init(struct amdgpu_device *adev)
+{
+       int i;
+       struct amdgpu_ring *ring;
+
+       /* sdma/ih doorbell range are programed by hypervisor */
+       if (!amdgpu_sriov_vf(adev)) {
+               for (i = 0; i < adev->sdma.num_instances; i++) {
+                       ring = &adev->sdma.instance[i].ring;
+                       adev->nbio.funcs->sdma_doorbell_range(adev, i,
+                               ring->use_doorbell, ring->doorbell_index,
+                               adev->doorbell_index.sdma_doorbell_range);
+               }
+
+               adev->nbio.funcs->ih_doorbell_range(adev, adev->irq.ih.use_doorbell,
+                                               adev->irq.ih.doorbell_index);
+       }
+}
+
 static int soc15_common_hw_init(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
@@ -1351,6 +1370,12 @@ static int soc15_common_hw_init(void *handle)
 
        /* enable the doorbell aperture */
        soc15_enable_doorbell_aperture(adev, true);
+       /* HW doorbell routing policy: doorbell writing not
+        * in SDMA/IH/MM/ACV range will be routed to CP. So
+        * we need to init SDMA/IH/MM/ACV doorbell range prior
+        * to CP ip block init and ring test.
+        */
+       soc15_doorbell_range_init(adev);
 
        return 0;
 }