3da8ec8523
Ubuntu's latest tag updated from v5.15.60 to v5.15.64 and one advantage of them trailing upstream stable 5.15.y is that we can backport fixes of fixes that got in with that commit range. Found with the report of: git log --decorate v5.15..v5.15.73 | \ ~/gitdm/stablefixes --fixed-after v5.15.64 --regressed-before v5.15.64 Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
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;
|
|
}
|