Re: [PATCH v2 1/2] PCI/ASPM: Override the ASPM and Clock PM states set by BIOS for devicetree platforms

From: Shawn Lin

Date: Wed Oct 15 2025 - 05:16:54 EST


Hi Mani

在 2025/10/15 星期三 15:50, Manivannan Sadhasivam 写道:
On Wed, Oct 15, 2025 at 04:13:41PM +0900, FUKAUMI Naoki wrote:
Hi,

On 10/15/25 15:26, Manivannan Sadhasivam wrote:
On Tue, Oct 14, 2025 at 01:49:05PM -0500, Bjorn Helgaas wrote:
[+cc regressions]

On Wed, Oct 15, 2025 at 01:30:16AM +0900, FUKAUMI Naoki wrote:
Hi Manivannan Sadhasivam,

I've noticed an issue on Radxa ROCK 5A/5B boards, which are based on the
Rockchip RK3588(S) SoC.

When running Linux v6.18-rc1 or linux-next since 20250924, the kernel either
freezes or fails to probe M.2 Wi-Fi modules. This happens with several
different modules I've tested, including the Realtek RTL8852BE, MediaTek
MT7921E, and Intel AX210.

I've found that reverting the following commit (i.e., the patch I'm replying
to) resolves the problem:
commit f3ac2ff14834a0aa056ee3ae0e4b8c641c579961

Thanks for the report, and sorry for the regression.

Since this affects several devices from different manufacturers and (I
assume) different drivers, it seems likely that there's some issue
with the Rockchip end, since ASPM probably works on these devices in
other systems. So we should figure out if there's something wrong
with the way we configure ASPM, which we could potentially fix, or if
there's a hardware issue and we need some king of quirk to prevent
usage of ASPM on the affected platforms.


I believe it is the latter. The Root Port is having trouble with ASPM.

FUKAUMI Naoki, could you please share the 'sudo lspci -vv' output so that we
know what kind of Root Port we are dealing with? You can revert the offending
patch and share the output.

Here is dmesg/lspci output on ROCK 5A(RK3588S):
https://gist.github.com/RadxaNaoki/1355a0b4278b6e51a61d89df7a535a5d


Thanks! Could you please try the below diff with f3ac2ff14834 applied?

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 214ed060ca1b..0069d06c282d 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -2525,6 +2525,15 @@ static void quirk_disable_aspm_l0s_l1(struct pci_dev *dev)
*/
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ASMEDIA, 0x1080, quirk_disable_aspm_l0s_l1);

+
+static void quirk_disable_aspm_all(struct pci_dev *dev)
+{
+ pci_info(dev, "Disabling ASPM\n");
+ pci_disable_link_state(dev, PCIE_LINK_STATE_ALL);
+}
+
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ROCKCHIP, 0x3588, quirk_disable_aspm_all);

That's not true from my POV. Rockchip platform supports all ASPM policy
after mass production verification. I also verified current upstream
code this morning with RK3588-EVB and can check L0s/L1/L1ss work fine.

The log and lspci output could be found here:
https://pastebin.com/qizeYED7

Moreover, I disscussed this issue with FUKAUMI today off-list and his
board seems to work when only disable L1ss by patching:

--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -813,7 +813,7 @@ static void pcie_aspm_override_default_link_state(struct pcie_link_state *link)

/* For devicetree platforms, enable all ASPM states by default */
if (of_have_populated_dt()) {
- link->aspm_default = PCIE_LINK_STATE_ASPM_ALL;
+ link->aspm_default = PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1;
override = link->aspm_default & ~link->aspm_enabled;
if (override)
pci_info(pdev, "ASPM: DT platform,


So, is there a proper way to just disable this feature for spec boards
instead of this Soc?

+
/*
* Some Pericom PCIe-to-PCI bridges in reverse mode need the PCIe Retrain
* Link bit cleared after starting the link retrain process to allow this


From your previous comment, I believe the Root Port is having the issues with
ASPM as you seem to have tried connecting different devices to the slot. So I
disabled ASPM for the Root Port with the above diff.

- Mani