Re: SiFive FU740 PCI driver fails on 6.18-rc1

From: Ron Economos

Date: Tue Oct 14 2025 - 18:41:43 EST


On 10/14/25 09:25, Manivannan Sadhasivam wrote:
On Mon, Oct 13, 2025 at 10:52:48PM -0700, Ron Economos wrote:
On 10/13/25 22:36, Krishna Chaitanya Chundru wrote:

On 10/14/2025 10:56 AM, Ron Economos wrote:
On 10/13/25 22:20, Krishna Chaitanya Chundru wrote:

On 10/14/2025 2:58 AM, Bjorn Helgaas wrote:
[+cc FU740 driver folks, Conor, regressions]

On Mon, Oct 13, 2025 at 12:14:54AM -0700, Ron Economos wrote:
The SiFive FU740 PCI driver fails on the HiFive
Unmatched board with Linux
6.18-rc1. The error message is:

[    3.166624] fu740-pcie e00000000.pcie: host bridge
/soc/pcie@e00000000
ranges:
[    3.166706] fu740-pcie e00000000.pcie:       IO
0x0060080000..0x006008ffff -> 0x0060080000
[    3.166767] fu740-pcie e00000000.pcie:      MEM
0x0060090000..0x007fffffff -> 0x0060090000
[    3.166805] fu740-pcie e00000000.pcie:      MEM
0x2000000000..0x3fffffffff -> 0x2000000000
[    3.166950] fu740-pcie e00000000.pcie: ECAM at [mem
0xdf0000000-0xdffffffff] for [bus 00-ff]
[    3.579500] fu740-pcie e00000000.pcie: No iATU regions found
[    3.579552] fu740-pcie e00000000.pcie: Failed to
configure iATU in ECAM
mode
[    3.579655] fu740-pcie e00000000.pcie: probe with
driver fu740-pcie
failed with error -22

The normal message (on Linux 6.17.2) is:

[    3.381487] fu740-pcie e00000000.pcie: host bridge
/soc/pcie@e00000000
ranges:
[    3.381584] fu740-pcie e00000000.pcie:       IO
0x0060080000..0x006008ffff -> 0x0060080000
[    3.381682] fu740-pcie e00000000.pcie:      MEM
0x0060090000..0x007fffffff -> 0x0060090000
[    3.381724] fu740-pcie e00000000.pcie:      MEM
0x2000000000..0x3fffffffff -> 0x2000000000
[    3.484809] fu740-pcie e00000000.pcie: iATU: unroll
T, 8 ob, 8 ib, align
4K, limit 4096G
[    3.683678] fu740-pcie e00000000.pcie: PCIe Gen.1 x8 link up
[    3.883674] fu740-pcie e00000000.pcie: PCIe Gen.3 x8 link up
[    3.987678] fu740-pcie e00000000.pcie: PCIe Gen.3 x8 link up
[    3.988164] fu740-pcie e00000000.pcie: PCI host
bridge to bus 0000:00

Reverting the following commits solves the issue.

0da48c5b2fa731b21bc523c82d927399a1e508b0 PCI: dwc:
Support ECAM mechanism by
enabling iATU 'CFG Shift Feature'

4660e50cf81800f82eeecf743ad1e3e97ab72190 PCI: qcom:
Prepare for the DWC ECAM
enablement

f6fd357f7afbeb34a633e5688a23b9d7eb49d558 PCI: dwc:
Prepare the driver for
enabling ECAM mechanism using iATU 'CFG Shift Feature'
As Conor pointed out, we can't fix a code regression with a DT change.

#regzbot introduced: f6fd357f7afb ("PCI: dwc: Prepare the
driver for enabling ECAM mechanism using iATU 'CFG Shift
Feature'")
Hi Conor,

Can you try with this patch and see if it is fixing the issue.
diff --git a/drivers/pci/controller/dwc/pcie-fu740.c
b/drivers/pci/controller/dwc/pcie-fu740.c
index 66367252032b..b5e0f016a580 100644
--- a/drivers/pci/controller/dwc/pcie-fu740.c
+++ b/drivers/pci/controller/dwc/pcie-fu740.c
@@ -328,6 +328,8 @@ static int fu740_pcie_probe(struct
platform_device *pdev)

        platform_set_drvdata(pdev, afp);

+       pci->pp.native_ecam = true;
+
        return dw_pcie_host_init(&pci->pp);
 }

- Krishna Chaitanya.

I've already tried it. It doesn't work. Same error message as before.
Can you share us dmesg logs for this change.

- Krishna Chaitanya.
[    3.159763] fu740-pcie e00000000.pcie: host bridge /soc/pcie@e00000000
ranges:
[    3.159853] fu740-pcie e00000000.pcie:       IO
0x0060080000..0x006008ffff -> 0x0060080000
[    3.159916] fu740-pcie e00000000.pcie:      MEM
0x0060090000..0x007fffffff -> 0x0060090000
[    3.159953] fu740-pcie e00000000.pcie:      MEM
0x2000000000..0x3fffffffff -> 0x2000000000
[    3.160039] fu740-pcie e00000000.pcie: ECAM at [mem
0xdf0000000-0xdffffffff] for [bus 00-ff]
[    3.571421] fu740-pcie e00000000.pcie: No iATU regions found
[    3.571472] fu740-pcie e00000000.pcie: Failed to configure iATU in ECAM
mode
[    3.571529] fu740-pcie e00000000.pcie: probe with driver fu740-pcie
failed with error -22

Same as before the change. The entire log is here:

https://www.w6rz.net/dmesg.txt

Weird that the driver still creates ECAM even after skipping it using the flag.
The flag is not meant for that purpose, but it should've worked anyway.

Can you try this diff and share the dmesg log?

diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
index 20c9333bcb1c..58080928df9f 100644
--- a/drivers/pci/controller/dwc/pcie-designware-host.c
+++ b/drivers/pci/controller/dwc/pcie-designware-host.c
@@ -523,8 +523,12 @@ static int dw_pcie_host_get_resources(struct dw_pcie_rp *pp)
pp->cfg0_size = resource_size(res);
pp->cfg0_base = res->start;

+ dev_info(dev, "%s: %d native_ecam: %d", __func__, __LINE__,
+pp->native_ecam);
+
pp->ecam_enabled = dw_pcie_ecam_enabled(pp, res);
if (pp->ecam_enabled) {
+ dev_info(dev, "%s: %d ECAM ENABLED", __func__, __LINE__);
ret = dw_pcie_create_ecam_window(pp, res);
if (ret)
return ret;
@@ -533,6 +537,7 @@ static int dw_pcie_host_get_resources(struct dw_pcie_rp *pp)
pp->bridge->sysdata = pp->cfg;
pp->cfg->priv = pp;
} else {
+ dev_info(dev, "%s: %d ECAM DISABLED", __func__, __LINE__);
pp->va_cfg0_base = devm_pci_remap_cfg_resource(dev, res);
if (IS_ERR(pp->va_cfg0_base))
return PTR_ERR(pp->va_cfg0_base);

- Mani

After testing with this patch, I must have transferred the wrong image to the target when testing before. The "pci->pp.native_ecam = true;" patch to pcie-fu740.c does work. Here's the message with the debug prints:

[    3.227746] fu740-pcie e00000000.pcie: host bridge /soc/pcie@e00000000 ranges:
[    3.227833] fu740-pcie e00000000.pcie:       IO 0x0060080000..0x006008ffff -> 0x0060080000
[    3.227896] fu740-pcie e00000000.pcie:      MEM 0x0060090000..0x007fffffff -> 0x0060090000
[    3.227934] fu740-pcie e00000000.pcie:      MEM 0x2000000000..0x3fffffffff -> 0x2000000000
[    3.227993] fu740-pcie e00000000.pcie: dw_pcie_host_get_resources: 526 native_ecam: 1
[    3.228019] fu740-pcie e00000000.pcie: dw_pcie_host_get_resources: 539 ECAM DISABLED
[    3.331449] fu740-pcie e00000000.pcie: iATU: unroll T, 8 ob, 8 ib, align 4K, limit 4096G
[    3.531131] fu740-pcie e00000000.pcie: PCIe Gen.1 x8 link up
[    3.731132] fu740-pcie e00000000.pcie: PCIe Gen.3 x8 link up
[    3.835131] fu740-pcie e00000000.pcie: PCIe Gen.3 x8 link up
[    3.835465] fu740-pcie e00000000.pcie: PCI host bridge to bus 0000:00