BeagleY-AI: PCIe seems broken with v6.6.x-ti Kernel

Hi,
I’m currently exploring the BeagleY-AI a bit and wanted to use PCIe as well.

But with the latest Debian based image (BeagleY-AI Debian 12.9 2025-03-05 XFCE (v6.6.x-ti)) PCIe seems to be broken.
Checking the logs you can see an error message from the function called of_irq_parse_pci which seems to be responsible for parsing the interrupt definition of PCI inside the device tree.
With the previous image based on the 6.1.x Kernel, PCIe works just fine.

I have already compared the device tree of both versions, and with 6.1.x there seems to be a definition of legacy interrupts that is missing with the latest version.

Commit from TI that introduced the PCIe node with the interrupt definition:

It seems to me that TI intentionally did not add this to their ti-linux-6.6.y and ti-linux-6.12.y trees.
Does anyone have any idea how to handle this properly for 6.6.x/6.12.x Kernels?

For reference, below are the logs from both images.

# BeagleBoard.org Debian Bookworm Xfce Image 2025-03-05

debian@BeagleBone:~$ uname -r
6.6.58-ti-arm64-r22

debian@BeagleBone:~$ lspci
00:00.0 PCI bridge: Texas Instruments Device b010

debian@BeagleBone:~$ dmesg | grep -i pci
[    0.122110] PCI/MSI: /bus@f0000/interrupt-controller@1800000/msi-controller@1820000 domain created
[    0.915044] PCI: CLS 0 bytes, default 64
[    2.524292] j721e-pcie f102000.pcie: host bridge /bus@f0000/pcie@f102000 ranges:
[    2.531748] j721e-pcie f102000.pcie:       IO 0x0068001000..0x0068010fff -> 0x0068001000
[    2.539844] j721e-pcie f102000.pcie:      MEM 0x0068011000..0x006fffffff -> 0x0068011000
[    2.547961] j721e-pcie f102000.pcie:   IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[    3.667452] j721e-pcie f102000.pcie: PCI host bridge to bus 0000:00
[    3.673794] pci_bus 0000:00: root bus resource [bus 00-ff]
[    3.679281] pci_bus 0000:00: root bus resource [io  0x0000-0xffff] (bus address [0x68001000-0x68010fff])
[    3.688749] pci_bus 0000:00: root bus resource [mem 0x68011000-0x6fffffff]
[    3.695647] pci 0000:00:00.0: [104c:b010] type 01 class 0x060400
[    3.701724] pci 0000:00:00.0: supports D1
[    3.705731] pci 0000:00:00.0: PME# supported from D0 D1 D3hot
[    3.711532] pci 0000:00:00.0: PTM enabled (root), 4ns granularity
[    3.721095] pci 0000:00:00.0: bridge configuration invalid ([bus 00-00]), reconfiguring
[    3.729367] pci_bus 0000:01: busn_res: [bus 01-ff] end is updated to 01
[    3.736016] pci 0000:00:00.0: PCI bridge to [bus 01]
[    3.741136] pcieport 0000:00:00.0: of_irq_parse_pci: failed with rc=-22
[    3.748142] pcieport 0000:00:00.0: PME: Signaling with IRQ 536
[    3.754353] pcieport 0000:00:00.0: AER: enabled with IRQ 536
# BeagleBoard.org Debian Bookworm Xfce Image 2024-07-11

debian@BeagleBone:~$ uname -r
6.1.83-ti-arm64-r63

debian@BeagleBone:~$ lspci
00:00.0 PCI bridge: Texas Instruments Device b010
01:00.0 Network controller: Intel Corporation Wi-Fi 7(802.11be) AX1775*/AX1790*/BE20*/BE401/BE1750* 2x2 (rev 1a)
 
debian@BeagleBone:~$ dmesg | grep -i pci
[    0.005590] PCI/MSI: /bus@f0000/interrupt-controller@1800000/msi-controller@1820000 domain created
[    0.169881] PCI: CLS 0 bytes, default 64
[    1.566564] j721e-pcie-host f102000.pcie: host bridge /pcie@f102000 ranges:
[    1.566611] j721e-pcie-host f102000.pcie:       IO 0x0068001000..0x0068010fff -> 0x0068001000
[    1.566629] j721e-pcie-host f102000.pcie:      MEM 0x0068011000..0x006fffffff -> 0x0068011000
[    1.566658] j721e-pcie-host f102000.pcie:   IB MEM 0x0000000000..0xffffffffffff -> 0x0000000000
[    1.670488] j721e-pcie-host f102000.pcie: Link up
[    1.670634] j721e-pcie-host f102000.pcie: PCI host bridge to bus 0000:00
[    1.670644] pci_bus 0000:00: root bus resource [bus 00-ff]
[    1.670655] pci_bus 0000:00: root bus resource [io  0x0000-0xffff] (bus address [0x68001000-0x68010fff])
[    1.670663] pci_bus 0000:00: root bus resource [mem 0x68011000-0x6fffffff]
[    1.670699] pci 0000:00:00.0: [104c:b010] type 01 class 0x060400
[    1.670822] pci 0000:00:00.0: supports D1
[    1.670829] pci 0000:00:00.0: PME# supported from D0 D1 D3hot
[    1.670865] pci 0000:00:00.0: PTM enabled (root), 4ns granularity
[    1.674408] pci 0000:00:00.0: bridge configuration invalid ([bus 00-00]), reconfiguring
[    1.674643] pci 0000:01:00.0: [8086:272b] type 00 class 0x028000
[    1.674752] pci 0000:01:00.0: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
[    1.675107] pci 0000:01:00.0: PME# supported from D0 D3hot D3cold
[    1.675310] pci 0000:01:00.0: 7.876 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x1 link at 0000:00:00.0 (capable of 15.753 Gb/s with 16.0 GT/s PCIe x1 link)
[    2.813995] pci_bus 0000:01: busn_res: [bus 01-ff] end is updated to 01
[    2.814044] pci 0000:00:00.0: BAR 14: assigned [mem 0x68100000-0x681fffff]
[    2.814058] pci 0000:01:00.0: BAR 0: assigned [mem 0x68100000-0x68103fff 64bit]
[    2.814118] pci 0000:00:00.0: PCI bridge to [bus 01]
[    2.814127] pci 0000:00:00.0:   bridge window [mem 0x68100000-0x681fffff]
[    2.814463] pcieport 0000:00:00.0: enabling device (0000 -> 0002)
[    2.814750] pcieport 0000:00:00.0: PME: Signaling with IRQ 538
[    2.815060] pcieport 0000:00:00.0: AER: enabled with IRQ 538
[    8.893115] iwlwifi: No config found for PCI dev 272b/00f4, rev=0x472, rfid=0x112200
1 Like

For right now stick with v6.1.x-ti… We are getting closer to this working again on ‘mainline/v6.15.x-rcX’…

Regards,

Thanks for your reply!

Just because I’m curious, is this an issue that you only need to tackle for this specific board, or is this a general issue that exists with boards that come with this combination of controller and phy?

Is the problem really related to interrupts, or is the error just a sign of the problem? Because I also noticed that the PCIe host driver doesn’t report that the link is up.

Would be nice for me to understand the issue a bit better.

It’s the whole j722s/am67a family… The first of a few serdes patches are queue’d for v6.16.x : Making sure you're not a bot!

Regards,

Hi, now I could spend some time searching and comparing older with newer versions.
With the following adaptions to the used Kernel version, PCIe works now for me.

debian@BeagleBone:~$ uname -a
Linux BeagleBone 6.6.58-ti-arm64-r22 #1 SMP PREEMPT_DYNAMIC Fri May  9 10:25:19 UTC 2025 aarch64 GNU/Linux

debian@BeagleBone:~$ lspci
00:00.0 PCI bridge: Texas Instruments Device b010
01:00.0 Network controller: Intel Corporation Wi-Fi 7(802.11be) AX1775*/AX1790*/BE20*/BE401/BE1750* 2x2 (rev 1a)

At the end I just adapted the commit (40d9e4d45e92fbae1c52ef8d6637a8cf739bcf89) to the changed file (pci-j721e-host.cpci-j721e.c).

diff --git a/arch/arm64/boot/dts/ti/k3-am67a-beagley-ai.dts b/arch/arm64/boot/dts/ti/k3-am67a-beagley-ai.dts
index 6a9f0e069bab..c16ea7902e3f 100644
--- a/arch/arm64/boot/dts/ti/k3-am67a-beagley-ai.dts
+++ b/arch/arm64/boot/dts/ti/k3-am67a-beagley-ai.dts
@@ -1166,6 +1166,7 @@ serdes0_usb_link: phy@0 {
 };
 
 &serdes1 {
+       status= "okay";
        serdes1_pcie_link: phy@0 {
                reg = <0>;
                cdns,num-lanes = <1>;
diff --git a/drivers/pci/controller/cadence/pci-j721e.c b/drivers/pci/controller/cadence/pci-j721e.c
index 8137e20b869d..7877f53094a4 100644
--- a/drivers/pci/controller/cadence/pci-j721e.c
+++ b/drivers/pci/controller/cadence/pci-j721e.c
@@ -550,6 +550,15 @@ static int j721e_pcie_probe(struct platform_device *pdev)
 
        j721e_pcie_config_link_irq(pcie);
 
+       /*
+        * Enable PCIE_PWR_EN for BeagleY-AI
+        */
+       gpiod = devm_gpiod_get_optional(dev, "enable", GPIOD_OUT_HIGH);
+       if (IS_ERR(gpiod)) {
+               ret = dev_err_probe(dev, PTR_ERR(gpiod), "Failed to get enable GPIO\n");
+               goto err_get_sync;
+       }
+
        switch (mode) {
        case PCI_MODE_RC:
                gpiod = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);

So just in case this helps someone.

1 Like