101 lines
3.8 KiB
Diff
101 lines
3.8 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Alex Deucher <alexander.deucher@amd.com>
|
||
|
Date: Fri, 9 Sep 2022 11:53:27 -0400
|
||
|
Subject: [PATCH] drm/amdgpu: move nbio sdma_doorbell_range() into sdma code
|
||
|
for vega
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
commit e3163bc8ffdfdb405e10530b140135b2ee487f89 upstream.
|
||
|
|
||
|
This mirrors what we do for other asics and this way we are
|
||
|
sure the sdma doorbell range is properly initialized.
|
||
|
|
||
|
There is a comment about the way doorbells on gfx9 work that
|
||
|
requires that they are initialized for other IPs before GFX
|
||
|
is initialized. However, the statement says that it applies to
|
||
|
multimedia as well, but the VCN code currently initializes
|
||
|
doorbells after GFX and there are no known issues there. In my
|
||
|
testing at least I don't see any problems on SDMA.
|
||
|
|
||
|
This is a prerequisite for fixing the Unsupported Request error
|
||
|
reported through AER during driver load.
|
||
|
|
||
|
Link: https://bugzilla.kernel.org/show_bug.cgi?id=216373
|
||
|
|
||
|
The error was unnoticed before and got visible because of the commit
|
||
|
referenced below. This doesn't fix anything in the commit below, rather
|
||
|
fixes the issue in amdgpu exposed by the commit. The reference is only
|
||
|
to associate this commit with below one so that both go together.
|
||
|
|
||
|
Fixes: 8795e182b02d ("PCI/portdrv: Don't disable AER reporting in get_port_device_capability()")
|
||
|
|
||
|
Acked-by: Christian König <christian.koenig@amd.com>
|
||
|
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
|
||
|
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||
|
Cc: stable@vger.kernel.org
|
||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||
|
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||
|
---
|
||
|
drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 5 +++++
|
||
|
drivers/gpu/drm/amd/amdgpu/soc15.c | 22 ----------------------
|
||
|
2 files changed, 5 insertions(+), 22 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
|
||
|
index 9014f71d52dd..8b20326c4c05 100644
|
||
|
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
|
||
|
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
|
||
|
@@ -1507,6 +1507,11 @@ 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);
|
||
|
diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c
|
||
|
index 723b088094f2..7d5ff50435e5 100644
|
||
|
--- a/drivers/gpu/drm/amd/amdgpu/soc15.c
|
||
|
+++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
|
||
|
@@ -1416,22 +1416,6 @@ 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);
|
||
|
- }
|
||
|
- }
|
||
|
-}
|
||
|
-
|
||
|
static int soc15_common_hw_init(void *handle)
|
||
|
{
|
||
|
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
||
|
@@ -1451,12 +1435,6 @@ 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;
|
||
|
}
|