Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Forward-port downstream pcie-brcmstb patches to 6.12 #6714

Draft
wants to merge 29 commits into
base: rpi-6.12.y
Choose a base branch
from

Conversation

popcornmix
Copy link
Collaborator

6.12 and 6.14 trees have quite different code for pcie.
It will help support going forward to use the same base, so backport #6675 to 6.12.

popcornmix and others added 29 commits March 12, 2025 13:16
Instead of copying fields from pcie_cfg_data structure to
brcm_pcie reference it directly.

Signed-off-by: Stanimir Varbanov <[email protected]>
Reviewed-by: Florian Fainelil <[email protected]>
The BCM2712 memory map can support up to 64GB of system memory, thus
expand the inbound window size in calculation helper function.

The change is safe for the currently supported SoCs that have smaller
inbound window sizes.

Signed-off-by: Stanimir Varbanov <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
Reviewed-by: Jim Quinlan <[email protected]>
Tested-by: Ivan T. Ivanov <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
[kwilczynski: commit log]
Signed-off-by: Krzysztof Wilczyński <[email protected]>
Add bare minimum amount of changes in order to support PCIe RC hardware
IP found on RPi5. The PCIe controller on bcm2712 is based on bcm7712 and
as such it inherits register offsets, perst, bridge_reset ops and inbound
windows count.
Although, the implementation for bcm2712 needs a workaround related to the
control of the bridge_reset where turning off of the root port must not
shutdown the bridge_reset and this must be avoided. To implement this
workaround a quirks field is introduced in pcie_cfg_data struct.

Signed-off-by: Stanimir Varbanov <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
The default input reference clock for the PHY PLL is 100Mhz, except for
some devices where it is 54Mhz like bcm2712C1 and bcm2712D0.

To implement this adjustments introduce a new .post_setup op in
pcie_cfg_data and call it at the end of brcm_pcie_setup function.

The bcm2712 .post_setup callback implements the required MDIO writes that
switch the PLL refclk and also change PHY PM clock period.

Without this RPi5 PCIex1 is unable to enumerate endpoint devices on
the expansion connector.

Signed-off-by: Stanimir Varbanov <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
In case brcmstb PCIe driver and MIP MSI-X interrupt controller
drivers are built as modules there could be a race in probing.

To avoid this add a softdep to MIP driver to guarantee that MIP
driver will be load first.

Signed-off-by: Stanimir Varbanov <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
Tested-by: Ivan T. Ivanov <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
[kwilczynski: commit log]
Signed-off-by: Krzysztof Wilczyński <[email protected]>
A call to of_parse_phandle() increments refcount, of_node_put must be
called when done the work on it. Fix missing of_node_put() on the
msi_np device node by using scope based of_node_put() cleanups.

Cc: [email protected] # v5.10+
Fixes: 40ca1bf ("PCI: brcmstb: Add MSI support")
Signed-off-by: Stanimir Varbanov <[email protected]>
When the user elects to limit the PCIe generation via the appropriate DT
property, apply the settings before the PCIe link-up, not after.

Fixes: c045213 ("PCI: brcmstb: Add Broadcom STB PCIe host controller driver")

Signed-off-by: Jim Quinlan <[email protected]>
Fixes: c045213 ("PCI: brcmstb: Add Broadcom STB PCIe host controller driver")
Reviewed-by: Manivannan Sadhasivam <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
The driver was mistakenly writing to a RO config-space register
(PCI_EXP_LNKCAP).  Although harmless in this case, the proper destination
is an internal RW register that is reflected by PCI_EXP_LNKCAP.

Fixes: c045213 ("PCI: brcmstb: Add Broadcom STB PCIe host controller driver")

Signed-off-by: Jim Quinlan <[email protected]>
Reviewed-by: Manivannan Sadhasivam <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
When setting a register field it was assumed that the field started at the
lsb of the register.  Although the masks do indeed start at the lsb, and
this will probably not change, it is prudent to use a method that makes no
assumption about the mask's placement in the register.

The uXXp_replace_bits() calls are used since they are already prevalent
in this driver.

Signed-off-by: Jim Quinlan <[email protected]>
Reviewed-by: Manivannan Sadhasivam <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
If regulator_bulk_get() returns an error, no regulators are created and we
need to set their number to zero.  If we do not do this and the PCIe
link-up fails, regulator_bulk_free() will be invoked and effect a panic.

Also print out the error value, as we cannot return an error upwards as
Linux will WARN on an error from add_bus().

Fixes: 9e6be01 ("PCI: brcmstb: Enable child bus device regulators from DT")
Signed-off-by: Jim Quinlan <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
Our system for enabling and disabling regulators is designed to work only
on the port driver below the root complex.  The conditions to discriminate
for this case should be the same when we are adding or removing the bus.
Without this change the regulators may be disabled prematurely when a bus
further down the tree is removed.

Fixes: 9e6be01 ("PCI: brcmstb: Enable child bus device regulators from DT")
Signed-off-by: Jim Quinlan <[email protected]>
Reviewed-by: Manivannan Sadhasivam <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
The constants EXT_CFG_DATA and EXT_CFG_INDEX vary by SOC. One of the
map_bus methods used these constants, the other used different constants.
Fortunately there was no problem because the SoCs that used the latter
map_bus method all had the same register constants.

Remove the redundant constants and adjust the code to use them.  In
addition, update EXT_CFG_DATA to use the 4k-page based config space access
system, which is what the second map_bus method was already using.

Signed-off-by: Jim Quinlan <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
The HW team has decided to "tighten" some field definitions in the MDIO
packet format.  Fortunately these two changes may be made in a backwards
compatible manner.

The CMD field used to be 12 bits and now is one.  This change is backwards
compatible because the field's starting bit position is unchanged and the
only commands we've used have values 0 and 1.

The PORT field's width has been changed from four to five bits.  When
written, the new bit is not contiguous with the other four.  Fortunately,
this change is backwards compatible because we have never used anything
other than 0 for the port field's value.

Signed-off-by: Jim Quinlan <[email protected]>
Reviewed-by: Manivannan Sadhasivam <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
Just make it clear to the reader that there is a conversion happening, in
this case from an int type to an irq_hw_number_t, an unsigned long int.

Signed-off-by: Jim Quinlan <[email protected]>
Reviewed-by: Manivannan Sadhasivam <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
These chips use a UBUS-AXI bridge component that has configurable
timeout and error response handling.

Suppress AXI error responses to CPU requests, otherwise these are fatal
if they reach the ARM cluster, and set reasonably large timeouts for
both Mem and Cfg requests.

Signed-off-by: Jonathan Bell <[email protected]>
In commit b478e16 ("PCI/ASPM: Consolidate link state defines")
PCIE_LINK_STATE_L1 and PCIE_LINK_STATE_L0s grew some bits for more
granular control of ASPM.

This broke the aspm-no-l0s override, instead disabling link ASPM
completely if this DT property was specified.

Specify the field bits in the driver.

Fixes: caab002 ("PCI: brcmstb: Disable L0s component of ASPM if requested")
Fixes: 0693b42 ("PCI: brcmstb: Split post-link up initialization to brcm_pcie_start_link()")
Signed-off-by: Jonathan Bell <[email protected]>
It appears that bits in the Root Control Register are reset with
perst_n, which means the PCI layer's call to enable CRS prior to
adding/scanning the bus has no effect. Open-code the enable in
brcm_pcie_start_link as a workaround.

Without CRS visibility, configuration reads issued by the CPU don't
retire if the endpoint returns a CRS response - the RC will poll until a
(large) timeout is reached. This means the core can stall for a long
time during boot.

Signed-off-by: Jonathan Bell <[email protected]>
The PHY MDIO register map is different on BCM2712, and as the PHY input
clock is 54MHz not 100MHz, enabling refclk SSC is both broken and
unfixable.

Mask out attempts to enable SSC with a controller quirk.

Signed-off-by: Jonathan Bell <[email protected]>
The BCM2712 root complexes can interpret priority signalling in two
different ways, based on the incoming Traffic Class of a TLP.

The TLP TCs are assigned to separate internal request/response queues,
and assigned different AXI IDs. These queues can have outgoing AXI
transactions tagged based on:

- Static QoS values
- Dynamic QoS through internal backpressure
- Dynamic QoS with elevation based on Vendor Messages received by the RC

The VDM mechanism is of limited use due to implementation bugs, but the
implicit reordering due to separate ID assignment allows higher-priority
traffic from an EP to overtake other traffic in the RC and rest of the
system.

RP1 assigns TCs based on its internal bus managers, and internally tags
read requests to allow out-of-order completions, so these two features
operate in concert to provide priority service to e.g. MIPI camera or
display traffic.

Signed-off-by: Jonathan Bell <[email protected]>
Some endpoints need longer than the minimum Tperst_clk time of 100us
that the PCIe specification allows for, as they may need to sequence
internal resets off the stable output of internal PLLs prior to removal
of fundamental reset. PCIe switches are an especially bad case, in some
cases requiring up to 100 milliseconds for stable downstream link
behaviour.

Parse the DT property brcm,tperst-clk-ms and use this to hold PERST# low
during brcm_pcie_start_link().

The BRCM RC typically outputs 200us of stable refclk before deasserting
PERST#. By masking/forcing the output signal while deasserting the
internal reset, the effect is to extend the length of time that the
refclk is active and stable before PERST# is released.

The TX lanes will enter the Polling state before PERST# is released, but
this appears to be harmless.

Signed-off-by: Jonathan Bell <[email protected]>
Update PCIe controller bindings with BCM2712 support.

Signed-off-by: Stanimir Varbanov <[email protected]>
Acked-by: Rob Herring (Arm) <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
Tested-by: Ivan T. Ivanov <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
[kwilczynski: commit log]
Signed-off-by: Krzysztof Wilczyński <[email protected]>
There is configurable priority forwarding hardware in this variant of the
Root Complex controller. Add optional properties to configure FIFO
backpressure or Vendor-Defined Message priority forwarding.

Signed-off-by: Jonathan Bell <[email protected]>
Some platforms may require an extended time with refclk active before
PERST# is released. Add a property to let the RC driver know how long to
wait.

Signed-off-by: Jonathan Bell <[email protected]>
pcie1 should use the FIFO threshold property as the RC should not
pay attention to Vendor Messages from incompatible endpoint hardware.

Also drop the downstream MPS property, it's no longer needed.

Signed-off-by: Jonathan Bell <[email protected]>
Enable pcie1 and pcie2 DT nodes. Pcie1 is used for the extension
connector and pcie2 is used for RP1 south-bridge.

Signed-off-by: Stanimir Varbanov <[email protected]>
@popcornmix
Copy link
Collaborator Author

@P33M this doesn't actually boot. Can you take a look.
Documentation/devicetree/bindings/pci/brcm,stb-pcie.yaml and drivers/pci/controller/pcie-brcmstb.c are (virtually) identical. So I suspect the issue is in device tree which is significantly different between 6.12 and 6.14 so I may not have backported changes correctly.

Failed boot:

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x414fd0b1]
[    0.000000] Linux version 6.12.18-v8-16k (dom@buildbot) (aarch64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #102 SMP PREEMPT Wed Mar 12 14:05:28 GMT 2025
[    0.000000] KASLR enabled
[    0.000000] random: crng init done
[    0.000000] Machine model: Raspberry Pi 5 Model B Rev 1.1
[    0.000000] efi: UEFI not found.
[    0.000000] Reserved memory: created CMA memory pool at 0x000000001a000000, size 320 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] OF: reserved mem: 0x000000001a000000..0x000000002dffffff (327680 KiB) map reusable linux,cma
[    0.000000] OF: reserved mem: 0x0000000000000000..0x000000000007ffff (512 KiB) nomap non-reusable atf@0
[    0.000000] OF: reserved mem: 0x000000003fd16860..0x000000003fd1689d (0 KiB) nomap non-reusable nvram@0
[    0.000000] NUMA: Faking a node at [mem 0x0000000000000000-0x00000001ffffffff]
[    0.000000] Faking node 0 at [mem 0x0000000000000000-0x000000003fffffff] (1024MB)
[    0.000000] Faking node 1 at [mem 0x0000000040000000-0x000000007fffffff] (1024MB)
[    0.000000] Faking node 2 at [mem 0x0000000080000000-0x00000000bfffffff] (1024MB)
[    0.000000] Faking node 3 at [mem 0x00000000c0000000-0x00000000ffffffff] (1024MB)
[    0.000000] Faking node 4 at [mem 0x0000000100000000-0x000000013fffffff] (1024MB)
[    0.000000] Faking node 5 at [mem 0x0000000140000000-0x000000017fffffff] (1024MB)
[    0.000000] Faking node 6 at [mem 0x0000000180000000-0x00000001bfffffff] (1024MB)
[    0.000000] Faking node 7 at [mem 0x00000001c0000000-0x00000001ffffffff] (1024MB)
[    0.000000] NODE_DATA(0) allocated [mem 0x3f7fd200-0x3f7fffff]
[    0.000000] NODE_DATA(1) allocated [mem 0x7fffd200-0x7fffffff]
[    0.000000] NODE_DATA(2) allocated [mem 0xbfffd200-0xbfffffff]
[    0.000000] NODE_DATA(3) allocated [mem 0xffffd200-0xffffffff]
[    0.000000] NODE_DATA(4) allocated [mem 0x13fffd200-0x13fffffff]
[    0.000000] NODE_DATA(5) allocated [mem 0x17fffd200-0x17fffffff]
[    0.000000] NODE_DATA(6) allocated [mem 0x1bfffd200-0x1bfffffff]
[    0.000000] NODE_DATA(7) allocated [mem 0x1ffb99200-0x1ffb9bfff]
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000000000-0x00000000ffffffff]
[    0.000000]   DMA32    empty
[    0.000000]   Normal   [mem 0x0000000100000000-0x00000001ffffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000000007ffff]
[    0.000000]   node   0: [mem 0x0000000000080000-0x000000003f7fffff]
[    0.000000]   node   1: [mem 0x0000000040000000-0x000000007fffffff]
[    0.000000]   node   2: [mem 0x0000000080000000-0x00000000bfffffff]
[    0.000000]   node   3: [mem 0x00000000c0000000-0x00000000ffffffff]
[    0.000000]   node   4: [mem 0x0000000100000000-0x000000013fffffff]
[    0.000000]   node   5: [mem 0x0000000140000000-0x000000017fffffff]
[    0.000000]   node   6: [mem 0x0000000180000000-0x00000001bfffffff]
[    0.000000]   node   7: [mem 0x00000001c0000000-0x00000001ffffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000003f7fffff]
[    0.000000] Initmem setup node 1 [mem 0x0000000040000000-0x000000007fffffff]
[    0.000000] Initmem setup node 2 [mem 0x0000000080000000-0x00000000bfffffff]
[    0.000000] Initmem setup node 3 [mem 0x00000000c0000000-0x00000000ffffffff]
[    0.000000] Initmem setup node 4 [mem 0x0000000100000000-0x000000013fffffff]
[    0.000000] Initmem setup node 5 [mem 0x0000000140000000-0x000000017fffffff]
[    0.000000] Initmem setup node 6 [mem 0x0000000180000000-0x00000001bfffffff]
[    0.000000] Initmem setup node 7 [mem 0x00000001c0000000-0x00000001ffffffff]
[    0.000000] On node 1, zone DMA: 512 pages in unavailable ranges
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv1.1 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: MIGRATE_INFO_TYPE not supported.
[    0.000000] psci: SMC Calling Convention v1.2
[    0.000000] percpu: Embedded 15 pages/cpu s193368 r8192 d44200 u245760
[    0.000000] Detected PIPT I-cache on CPU0
[    0.000000] CPU features: detected: Virtualization Host Extensions
[    0.000000] CPU features: detected: Spectre-v4
[    0.000000] CPU features: detected: Spectre-BHB
[    0.000000] CPU features: kernel page table isolation forced ON by KASLR
[    0.000000] CPU features: detected: Kernel page table isolation (KPTI)
[    0.000000] CPU features: detected: SSBS not fully self-synchronizing
[    0.000000] alternatives: applying boot alternatives
[    0.000000] Kernel command line: reboot=w coherent_pool=1M 8250.nr_uarts=1 pci=pcie_bus_safe cgroup_disable=memory numa_policy=interleave  numa=fake=8 system_heap.max_order=0 smsc95xx.macaddr=B8:27:EB:18:1F:17 vc_mem.mem_base=0x3fc00000 vc_mem.mem_size=0x40000000  plymouth.enable=0 systemd.show_status=true console=ttyAMA10,115200 console=tty1 nfsroot=10.3.31.234:/home/dom/bookworm2712,vers=4 rw ip=dhcp rootwait cfg80211.ieee80211_regdom=GB
[    0.000000] cgroup: Disabling memory control group subsystem
[    0.000000] mempolicy: NUMA default policy overridden to 'interleave:0-7'
[    0.000000] Fallback order for Node 0: 0 1 2 3 4 5 6 7 
[    0.000000] Fallback order for Node 1: 1 2 3 4 5 6 7 0 
[    0.000000] Fallback order for Node 2: 2 3 4 5 6 7 0 1 
[    0.000000] Fallback order for Node 3: 3 4 5 6 7 0 1 2 
[    0.000000] Fallback order for Node 4: 4 5 6 7 0 1 2 3 
[    0.000000] Fallback order for Node 5: 5 6 7 0 1 2 3 4 
[    0.000000] Fallback order for Node 6: 6 7 0 1 2 3 4 5 
[    0.000000] Fallback order for Node 7: 7 0 1 2 3 4 5 6 
[    0.000000] Built 8 zonelists, mobility grouping on.  Total pages: 523776
[    0.000000] Policy zone: Normal
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] software IO TLB: area num 4.
[    0.000000] software IO TLB: mapped [mem 0x00000000fbffc000-0x00000000ffffc000] (64MB)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=8
[    0.000000] ftrace: allocating 45081 entries in 45 pages
[    0.000000] ftrace: allocated 45 pages with 4 groups
[    0.000000] rcu: Preemptible hierarchical RCU implementation.
[    0.000000] rcu: 	RCU event tracing is enabled.
[    0.000000] 	Trampoline variant of Tasks RCU enabled.
[    0.000000] 	Rude variant of Tasks RCU enabled.
[    0.000000] 	Tracing variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[    0.000000] RCU Tasks: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[    0.000000] RCU Tasks Rude: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[    0.000000] RCU Tasks Trace: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] Root IRQ handler: gic_handle_irq
[    0.000000] GIC: Using split EOI/Deactivate mode
[    0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000] arch_timer: cp15 timer(s) running at 54.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0xc743ce346, max_idle_ns: 440795203123 ns
[    0.000000] sched_clock: 56 bits at 54MHz, resolution 18ns, wraps every 4398046511102ns
[    0.000094] Console: colour dummy device 80x25
[    0.000098] printk: legacy console [tty1] enabled
[    0.000314] Calibrating delay loop (skipped), value calculated using timer frequency.. 108.00 BogoMIPS (lpj=216000)
[    0.000322] pid_max: default: 32768 minimum: 301
[    0.000418] LSM: initializing lsm=capability
[    0.001941] Dentry cache hash table entries: 1048576 (order: 9, 8388608 bytes, vmalloc)
[    0.002689] Inode-cache hash table entries: 524288 (order: 8, 4194304 bytes, vmalloc)
[    0.002738] Mount-cache hash table entries: 16384 (order: 3, 131072 bytes, vmalloc)
[    0.002760] Mountpoint-cache hash table entries: 16384 (order: 3, 131072 bytes, vmalloc)
[    0.008005] rcu: Hierarchical SRCU implementation.
[    0.008016] rcu: 	Max phase no-delay instances is 1000.
[    0.008059] Timer migration: 1 hierarchy levels; 8 children per group; 0 crossnode level
[    0.008396] EFI services will not be available.
[    0.012016] smp: Bringing up secondary CPUs ...
[    0.024120] Detected PIPT I-cache on CPU1
[    0.024158] CPU1: Booted secondary processor 0x0000000100 [0x414fd0b1]
[    0.028082] Detected PIPT I-cache on CPU2
[    0.028110] CPU2: Booted secondary processor 0x0000000200 [0x414fd0b1]
[    0.032158] Detected PIPT I-cache on CPU3
[    0.032177] CPU3: Booted secondary processor 0x0000000300 [0x414fd0b1]
[    0.032208] smp: Brought up 8 nodes, 4 CPUs
[    0.032222] SMP: Total of 4 processors activated.
[    0.032225] CPU: All CPU(s) started at EL2
[    0.032228] CPU features: detected: 32-bit EL0 Support
[    0.032233] CPU features: detected: Data cache clean to the PoU not required for I/D coherence
[    0.032236] CPU features: detected: Common not Private translations
[    0.032239] CPU features: detected: CRC32 instructions
[    0.032243] CPU features: detected: RCpc load-acquire (LDAPR)
[    0.032245] CPU features: detected: LSE atomic instructions
[    0.032248] CPU features: detected: Privileged Access Never
[    0.032250] CPU features: detected: RAS Extension Support
[    0.032253] CPU features: detected: Speculative Store Bypassing Safe (SSBS)
[    0.032280] alternatives: applying system-wide alternatives
[    0.033766] CPU features: detected: Hardware dirty bit management on CPU0-3
[    0.033931] Memory: 7891920K/8380416K available (14016K kernel code, 2264K rwdata, 4800K rodata, 5440K init, 647K bss, 132768K reserved, 327680K cma-reserved)
[    0.034110] devtmpfs: initialized
[    0.035947] Enabled cp15_barrier support
[    0.035955] Enabled setend support
[    0.036003] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.036011] futex hash table entries: 1024 (order: 2, 65536 bytes, vmalloc)
[    0.036576] 2G module region forced by RANDOMIZE_MODULE_REGION_FULL
[    0.036584] 0 pages in range for non-PLT usage
[    0.036585] 129352 pages in range for PLT usage
[    0.036732] pinctrl core: initialized pinctrl subsystem
[    0.036888] DMI not present or invalid.
[    0.041174] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.041525] DMA: preallocated 1024 KiB GFP_KERNEL pool for atomic allocations
[    0.041558] DMA: preallocated 1024 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    0.041590] DMA: preallocated 1024 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[    0.041606] audit: initializing netlink subsys (disabled)
[    0.041670] audit: type=2000 audit(0.040:1): state=initialized audit_enabled=0 res=1
[    0.041771] thermal_sys: Registered thermal governor 'step_wise'
[    0.041781] cpuidle: using governor menu
[    0.041839] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.041864] ASID allocator initialised with 32768 entries
[    0.042106] Serial: AMBA PL011 UART driver
[    0.042698] /soc@107c000000/interrupt-controller@7fff9000: Fixed dependency cycle(s) with /soc@107c000000/interrupt-controller@7fff9000
[    0.042828] bcm2835-mbox 107c013880.mailbox: mailbox enabled
[    0.042953] 107d001000.serial: ttyAMA10 at MMIO 0x107d001000 (irq = 16, base_baud = 0) is a PL011 rev3
[    0.042964] printk: legacy console [ttyAMA10] enabled
[    1.078999] raspberrypi-firmware soc@107c000000:firmware: Attached to firmware from 2025-03-11T17:50:39, variant start_cd
[    1.094015] raspberrypi-firmware soc@107c000000:firmware: Firmware hash is 2bb2ae6400000000000000000000000000000000
[    1.113161] bcm2835-dma 1000010000.dma: DMA legacy API manager, dmachans=0x1
[    1.120497] iommu: Default domain type: Translated
[    1.125328] iommu: DMA domain TLB invalidation policy: strict mode
[    1.131644] SCSI subsystem initialized
[    1.135427] usbcore: registered new interface driver usbfs
[    1.140944] usbcore: registered new interface driver hub
[    1.146280] usbcore: registered new device driver usb
[    1.151418] pps_core: LinuxPPS API ver. 1 registered
[    1.156400] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
[    1.165572] PTP clock support registered
[    1.169753] vgaarb: loaded
[    1.172542] clocksource: Switched to clocksource arch_sys_counter
[    1.178790] VFS: Disk quotas dquot_6.6.0
[    1.184555] VFS: Dquot-cache hash table entries: 2048 (order 0, 16384 bytes)
[    1.192577] NET: Registered PF_INET protocol family
[    1.197645] IP idents hash table entries: 131072 (order: 6, 1048576 bytes, vmalloc)
[    1.206886] tcp_listen_portaddr_hash hash table entries: 4096 (order: 2, 65536 bytes, vmalloc)
[    1.215560] Table-perturb hash table entries: 65536 (order: 4, 262144 bytes, vmalloc)
[    1.223429] TCP established hash table entries: 65536 (order: 5, 524288 bytes, vmalloc)
[    1.231639] TCP bind hash table entries: 65536 (order: 7, 2097152 bytes, vmalloc)
[    1.239817] TCP: Hash tables configured (established 65536 bind 65536)
[    1.246483] MPTCP token hash table entries: 8192 (order: 3, 196608 bytes, vmalloc)
[    1.254123] UDP hash table entries: 4096 (order: 3, 131072 bytes, vmalloc)
[    1.261093] UDP-Lite hash table entries: 4096 (order: 3, 131072 bytes, vmalloc)
[    1.268526] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    1.274368] RPC: Registered named UNIX socket transport module.
[    1.280330] RPC: Registered udp transport module.
[    1.285048] RPC: Registered tcp transport module.
[    1.289765] RPC: Registered tcp-with-tls transport module.
[    1.295268] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    1.301737] PCI: CLS 0 bytes, default 64
[    1.306754] kvm [1]: nv: 554 coarse grained trap handlers
[    1.312262] kvm [1]: IPA Size Limit: 40 bits
[    1.316558] kvm [1]: GICV region size/alignment is unsafe, using trapping (reduced performance)
[    1.325313] kvm [1]: vgic interrupt IRQ9
[    1.329256] kvm [1]: VHE mode initialized successfully
[    1.334777] Initialise system trusted keyrings
[    1.339381] workingset: timestamp_bits=42 max_order=19 bucket_order=0
[    1.346103] NFS: Registering the id_resolver key type
[    1.351178] Key type id_resolver registered
[    1.355373] Key type id_legacy registered
[    1.359401] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    1.366127] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[    1.373685] Key type asymmetric registered
[    1.377796] Asymmetric key parser 'x509' registered
[    1.382706] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
[    1.390159] io scheduler mq-deadline registered
[    1.394705] io scheduler kyber registered
[    1.398737] io scheduler bfq registered
[    1.402773] irq_brcmstb_l2: registered L2 intc (/soc@107c000000/interrupt-controller@7d510600, parent irq: 27)
[    1.412864] irq_brcmstb_l2: registered L2 intc (/soc@107c000000/interrupt-controller@7c502000, parent irq: 28)
[    1.422937] irq_brcmstb_l2: registered L2 intc (/soc@107c000000/intc@7d508380, parent irq: 29)
[    1.431617] irq_brcmstb_l2: registered L2 intc (/soc@107c000000/intc@7d508400, parent irq: 30)
[    1.440291] irq_brcmstb_l2: registered L2 intc (/soc@107c000000/intc@7d503000, parent irq: 31)
[    1.449746] ledtrig-cpu: registered to indicate activity on CPUs
[    1.455969] simple-framebuffer 3f800000.framebuffer: framebuffer at 0x3f800000, 0x3f4800 bytes
[    1.464622] simple-framebuffer 3f800000.framebuffer: format=r5g6b5, mode=1920x1080x16, linelength=3840
[    1.475012] Console: switching to colour frame buffer device 240x67
[    1.482259] simple-framebuffer 3f800000.framebuffer: fb0: simplefb registered!
[    1.490303] Serial: 8250/16550 driver, 1 ports, IRQ sharing enabled
[    1.496857] 107d50c000.serial: ttyS0 at MMIO 0x107d50c000 (irq = 33, base_baud = 6000000) is a Broadcom BCM7271 UART
[    1.507669] iproc-rng200 107d208000.rng: hwrng registered
[    1.513123] vc-mem: phys_addr:0x00000000 mem_base=0x3fc00000 mem_size:0x40000000(1024 MiB)
[    1.521576] bcm2712-iommu-cache 1000005b00.iommuc: bcm2712_iommu_cache_probe
[    1.529927] brd: module loaded
[    1.533871] loop: module loaded
[    1.537112] bcm2835-power bcm2835-power: Broadcom BCM2835 power domains driver
[    1.544456] Loading iSCSI transport class v2.0-870.
[    1.550013] usbcore: registered new device driver r8152-cfgselector
[    1.556318] usbcore: registered new interface driver r8152
[    1.561829] usbcore: registered new interface driver lan78xx
[    1.567514] usbcore: registered new interface driver smsc95xx
[    1.573324] dwc_otg: version 3.00a 10-AUG-2012 (platform bus)
[    1.579212] usbcore: registered new interface driver uas
[    1.584552] usbcore: registered new interface driver usb-storage
[    1.590645] mousedev: PS/2 mouse device common for all mice
[    1.598693] rpi-rtc soc@107c000000:rpi_rtc: registered as rtc0
[    1.605090] rpi-rtc soc@107c000000:rpi_rtc: setting system clock to 2025-03-12T14:06:58 UTC (1741788418)
[    1.614894] bcm2835-wdt bcm2835-wdt: Poweroff handler already present!
[    1.621455] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer
[    1.628168] sdhci: Secure Digital Host Controller Interface driver
[    1.634380] sdhci: Copyright(c) Pierre Ossman
[    1.638780] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.644534] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping ....
[    1.651011] hid: raw HID events driver (C) Jiri Kosina
[    1.656181] usbcore: registered new interface driver usbhid
[    1.661776] usbhid: USB HID core driver
[    1.665886] hw perfevents: enabled with armv8_cortex_a76 PMU driver, 7 (0,8000003f) counters available
[    1.675451] NET: Registered PF_PACKET protocol family
[    1.680553] Key type dns_resolver registered
[    1.688203] registered taskstats version 1
[    1.692377] Loading compiled-in X.509 certificates
[    1.698598] Demotion targets for Node 0: null
[    1.702974] Demotion targets for Node 1: null
[    1.707347] Demotion targets for Node 2: null
[    1.712080] Demotion targets for Node 3: null
[    1.716797] Demotion targets for Node 4: null
[    1.721507] Demotion targets for Node 5: null
[    1.726214] Demotion targets for Node 6: null
[    1.730915] Demotion targets for Node 7: null
[    1.735788] Key type .fscrypt registered
[    1.740048] Key type fscrypt-provisioning registered
[    1.746315] brcm-pcie 1000110000.pcie: host bridge /axi/pcie@110000 ranges:
[    1.753648] brcm-pcie 1000110000.pcie:   No bus range found for /axi/pcie@110000, using [bus 00-ff]
[    1.763098] brcm-pcie 1000110000.pcie:      MEM 0x1b80000000..0x1bffffffff -> 0x0080000000
[    1.771728] brcm-pcie 1000110000.pcie:      MEM 0x1800000000..0x1b7fffffff -> 0x0400000000
[    1.780359] brcm-pcie 1000110000.pcie:   IB MEM 0x0000000000..0x0fffffffff -> 0x1000000000
[    1.790518] brcm-pcie 1000110000.pcie: PCI host bridge to bus 0000:00
[    1.797315] pci_bus 0000:00: root bus resource [bus 00-ff]
[    1.803149] pci_bus 0000:00: root bus resource [mem 0x1b80000000-0x1bffffffff] (bus address [0x80000000-0xffffffff])
[    1.814045] pci_bus 0000:00: root bus resource [mem 0x1800000000-0x1b7fffffff pref] (bus address [0x400000000-0x77fffffff])
[    1.825560] pci 0000:00:00.0: [14e4:2712] type 01 class 0x060400 PCIe Root Port
[    1.833235] pci 0000:00:00.0: PCI bridge to [bus 00]
[    1.838550] pci 0000:00:00.0:   bridge window [mem 0x00000000-0x000fffff]
[    1.845694] pci 0000:00:00.0:   bridge window [mem 0x00000000-0x000fffff 64bit pref]
[    1.853808] pci 0000:00:00.0: PME# supported from D0 D3hot
[    1.860201] pci 0000:00:00.0: bridge configuration invalid ([bus 00-00]), reconfiguring
[    1.972545] brcm-pcie 1000110000.pcie: clkreq-mode set to default
[    1.978991] brcm-pcie 1000110000.pcie: link up, 5.0 GT/s PCIe x1 (!SSC)
[    1.985963] pci 0000:01:00.0: [1e4b:1202] type 00 class 0x010802 PCIe Endpoint
[    1.993548] pci 0000:01:00.0: BAR 0 [mem 0x00000000-0x00003fff 64bit]
[    2.000431] pci 0000:01:00.0: PME# supported from D0 D3hot D3cold
[    2.006896] pci 0000:01:00.0: 4.000 Gb/s available PCIe bandwidth, limited by 5.0 GT/s PCIe x1 link at 0000:00:00.0 (capable of 31.504 Gb/s with 8.0 GT/s PCIe x4 link)
[    2.022328] pci_bus 0000:01: busn_res: [bus 01-ff] end is updated to 01
[    2.029311] pci 0000:00:00.0: bridge window [mem 0x1b80000000-0x1b800fffff]: assigned
[    2.037515] pci 0000:01:00.0: BAR 0 [mem 0x1b80000000-0x1b80003fff 64bit]: assigned
[    2.045543] pci 0000:00:00.0: PCI bridge to [bus 01]
[    2.050870] pci 0000:00:00.0:   bridge window [mem 0x1b80000000-0x1b800fffff]
[    2.058375] pci_bus 0000:00: resource 4 [mem 0x1b80000000-0x1bffffffff]
[    2.065355] pci_bus 0000:00: resource 5 [mem 0x1800000000-0x1b7fffffff pref]
[    2.072772] pci_bus 0000:01: resource 1 [mem 0x1b80000000-0x1b800fffff]
[    2.079756] pci 0000:00:00.0: Max Payload Size set to  512/ 512 (was  128), Max Read Rq  512
[    2.088587] pci 0000:01:00.0: Max Payload Size set to  512/ 512 (was  128), Max Read Rq  512
[    2.097452] pcieport 0000:00:00.0: enabling device (0000 -> 0002)
[    2.103957] pcieport 0000:00:00.0: PME: Signaling with IRQ 38
[    2.110121] pcieport 0000:00:00.0: AER: enabled with IRQ 38
[    2.116176] nvme nvme0: pci function 0000:01:00.0
[    2.121265] nvme 0000:01:00.0: enabling device (0000 -> 0002)
[   62.872583] nvme nvme0: I/O tag 0 (1000) QID 0 timeout, completion polled
[   62.872591] nvme nvme0: missing or invalid SUBNQN field.
[  124.312553] nvme nvme0: I/O tag 1 (1001) QID 0 timeout, completion polled
[  185.752552] nvme nvme0: I/O tag 2 (1002) QID 0 timeout, completion polled
[  243.096542] INFO: task swapper/0:1 blocked for more than 120 seconds.

@P33M
Copy link
Contributor

P33M commented Mar 12, 2025

Most likely the upstream MSI-X target driver is nonfunctional on a downstream devicetree. I shall investigate.

@P33M
Copy link
Contributor

P33M commented Mar 12, 2025

It looks like the series adding upstream DT support for 2712 in pcie-brcmstb (and the MIP) is missing from rpi-6.12.y - I'll see if I can piece that together

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants