170 lines
5.9 KiB
Diff
170 lines
5.9 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Lijo Lazar <lijo.lazar@amd.com>
|
||
|
Date: Thu, 8 Sep 2022 08:28:57 +0530
|
||
|
Subject: [PATCH] drm/amdgpu: Don't enable LTR if not supported
|
||
|
|
||
|
commit 6c20490663553cd7e07d8de8af482012329ab9d6 upstream.
|
||
|
|
||
|
As per PCIE Base Spec r4.0 Section 6.18
|
||
|
'Software must not enable LTR in an Endpoint unless the Root Complex
|
||
|
and all intermediate Switches indicate support for LTR.'
|
||
|
|
||
|
This fixes the Unsupported Request error reported through AER during
|
||
|
ASPM enablement.
|
||
|
|
||
|
Link: https://bugzilla.kernel.org/show_bug.cgi?id=216455
|
||
|
|
||
|
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()")
|
||
|
|
||
|
Reported-by: Gustaw Smolarczyk <wielkiegie@gmail.com>
|
||
|
Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
|
||
|
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||
|
|
||
|
Cc: stable@vger.kernel.org
|
||
|
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||
|
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||
|
---
|
||
|
drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c | 9 ++++++++-
|
||
|
drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c | 9 ++++++++-
|
||
|
drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c | 9 ++++++++-
|
||
|
3 files changed, 24 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c b/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c
|
||
|
index b184b656b9b6..6f21154d4891 100644
|
||
|
--- a/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c
|
||
|
+++ b/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c
|
||
|
@@ -366,6 +366,7 @@ static void nbio_v2_3_enable_aspm(struct amdgpu_device *adev,
|
||
|
WREG32_PCIE(smnPCIE_LC_CNTL, data);
|
||
|
}
|
||
|
|
||
|
+#ifdef CONFIG_PCIEASPM
|
||
|
static void nbio_v2_3_program_ltr(struct amdgpu_device *adev)
|
||
|
{
|
||
|
uint32_t def, data;
|
||
|
@@ -387,9 +388,11 @@ static void nbio_v2_3_program_ltr(struct amdgpu_device *adev)
|
||
|
if (def != data)
|
||
|
WREG32_PCIE(smnBIF_CFG_DEV0_EPF0_DEVICE_CNTL2, data);
|
||
|
}
|
||
|
+#endif
|
||
|
|
||
|
static void nbio_v2_3_program_aspm(struct amdgpu_device *adev)
|
||
|
{
|
||
|
+#ifdef CONFIG_PCIEASPM
|
||
|
uint32_t def, data;
|
||
|
|
||
|
def = data = RREG32_PCIE(smnPCIE_LC_CNTL);
|
||
|
@@ -445,7 +448,10 @@ static void nbio_v2_3_program_aspm(struct amdgpu_device *adev)
|
||
|
if (def != data)
|
||
|
WREG32_PCIE(smnPCIE_LC_CNTL6, data);
|
||
|
|
||
|
- nbio_v2_3_program_ltr(adev);
|
||
|
+ /* Don't bother about LTR if LTR is not enabled
|
||
|
+ * in the path */
|
||
|
+ if (adev->pdev->ltr_path)
|
||
|
+ nbio_v2_3_program_ltr(adev);
|
||
|
|
||
|
def = data = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP3);
|
||
|
data |= 0x5DE0 << RCC_BIF_STRAP3__STRAP_VLINK_ASPM_IDLE_TIMER__SHIFT;
|
||
|
@@ -469,6 +475,7 @@ static void nbio_v2_3_program_aspm(struct amdgpu_device *adev)
|
||
|
data &= ~PCIE_LC_CNTL3__LC_DSC_DONT_ENTER_L23_AFTER_PME_ACK_MASK;
|
||
|
if (def != data)
|
||
|
WREG32_PCIE(smnPCIE_LC_CNTL3, data);
|
||
|
+#endif
|
||
|
}
|
||
|
|
||
|
static void nbio_v2_3_apply_lc_spc_mode_wa(struct amdgpu_device *adev)
|
||
|
diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c b/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c
|
||
|
index 0d2d629e2d6a..be3f6c52c3ff 100644
|
||
|
--- a/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c
|
||
|
+++ b/drivers/gpu/drm/amd/amdgpu/nbio_v6_1.c
|
||
|
@@ -278,6 +278,7 @@ static void nbio_v6_1_init_registers(struct amdgpu_device *adev)
|
||
|
WREG32_PCIE(smnPCIE_CI_CNTL, data);
|
||
|
}
|
||
|
|
||
|
+#ifdef CONFIG_PCIEASPM
|
||
|
static void nbio_v6_1_program_ltr(struct amdgpu_device *adev)
|
||
|
{
|
||
|
uint32_t def, data;
|
||
|
@@ -299,9 +300,11 @@ static void nbio_v6_1_program_ltr(struct amdgpu_device *adev)
|
||
|
if (def != data)
|
||
|
WREG32_PCIE(smnBIF_CFG_DEV0_EPF0_DEVICE_CNTL2, data);
|
||
|
}
|
||
|
+#endif
|
||
|
|
||
|
static void nbio_v6_1_program_aspm(struct amdgpu_device *adev)
|
||
|
{
|
||
|
+#ifdef CONFIG_PCIEASPM
|
||
|
uint32_t def, data;
|
||
|
|
||
|
def = data = RREG32_PCIE(smnPCIE_LC_CNTL);
|
||
|
@@ -357,7 +360,10 @@ static void nbio_v6_1_program_aspm(struct amdgpu_device *adev)
|
||
|
if (def != data)
|
||
|
WREG32_PCIE(smnPCIE_LC_CNTL6, data);
|
||
|
|
||
|
- nbio_v6_1_program_ltr(adev);
|
||
|
+ /* Don't bother about LTR if LTR is not enabled
|
||
|
+ * in the path */
|
||
|
+ if (adev->pdev->ltr_path)
|
||
|
+ nbio_v6_1_program_ltr(adev);
|
||
|
|
||
|
def = data = RREG32_PCIE(smnRCC_BIF_STRAP3);
|
||
|
data |= 0x5DE0 << RCC_BIF_STRAP3__STRAP_VLINK_ASPM_IDLE_TIMER__SHIFT;
|
||
|
@@ -381,6 +387,7 @@ static void nbio_v6_1_program_aspm(struct amdgpu_device *adev)
|
||
|
data &= ~PCIE_LC_CNTL3__LC_DSC_DONT_ENTER_L23_AFTER_PME_ACK_MASK;
|
||
|
if (def != data)
|
||
|
WREG32_PCIE(smnPCIE_LC_CNTL3, data);
|
||
|
+#endif
|
||
|
}
|
||
|
|
||
|
const struct amdgpu_nbio_funcs nbio_v6_1_funcs = {
|
||
|
diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c b/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c
|
||
|
index f50045cebd44..74cd7543729b 100644
|
||
|
--- a/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c
|
||
|
+++ b/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c
|
||
|
@@ -630,6 +630,7 @@ const struct amdgpu_nbio_ras_funcs nbio_v7_4_ras_funcs = {
|
||
|
.ras_fini = amdgpu_nbio_ras_fini,
|
||
|
};
|
||
|
|
||
|
+#ifdef CONFIG_PCIEASPM
|
||
|
static void nbio_v7_4_program_ltr(struct amdgpu_device *adev)
|
||
|
{
|
||
|
uint32_t def, data;
|
||
|
@@ -651,9 +652,11 @@ static void nbio_v7_4_program_ltr(struct amdgpu_device *adev)
|
||
|
if (def != data)
|
||
|
WREG32_PCIE(smnBIF_CFG_DEV0_EPF0_DEVICE_CNTL2, data);
|
||
|
}
|
||
|
+#endif
|
||
|
|
||
|
static void nbio_v7_4_program_aspm(struct amdgpu_device *adev)
|
||
|
{
|
||
|
+#ifdef CONFIG_PCIEASPM
|
||
|
uint32_t def, data;
|
||
|
|
||
|
def = data = RREG32_PCIE(smnPCIE_LC_CNTL);
|
||
|
@@ -709,7 +712,10 @@ static void nbio_v7_4_program_aspm(struct amdgpu_device *adev)
|
||
|
if (def != data)
|
||
|
WREG32_PCIE(smnPCIE_LC_CNTL6, data);
|
||
|
|
||
|
- nbio_v7_4_program_ltr(adev);
|
||
|
+ /* Don't bother about LTR if LTR is not enabled
|
||
|
+ * in the path */
|
||
|
+ if (adev->pdev->ltr_path)
|
||
|
+ nbio_v7_4_program_ltr(adev);
|
||
|
|
||
|
def = data = RREG32_PCIE(smnRCC_BIF_STRAP3);
|
||
|
data |= 0x5DE0 << RCC_BIF_STRAP3__STRAP_VLINK_ASPM_IDLE_TIMER__SHIFT;
|
||
|
@@ -733,6 +739,7 @@ static void nbio_v7_4_program_aspm(struct amdgpu_device *adev)
|
||
|
data &= ~PCIE_LC_CNTL3__LC_DSC_DONT_ENTER_L23_AFTER_PME_ACK_MASK;
|
||
|
if (def != data)
|
||
|
WREG32_PCIE(smnPCIE_LC_CNTL3, data);
|
||
|
+#endif
|
||
|
}
|
||
|
|
||
|
const struct amdgpu_nbio_funcs nbio_v7_4_funcs = {
|