Re: [REGRESSION] PCI: Dynamic OF node creation hangs on invalid bridge configuration

From: Angel J

Date: Mon Sep 14 2026 - 18:06:25 EST


Hi Andrea,

> Could you please test adding a quirk as PCI_FIXUP_HEADER
> in which you downgrade the class from 0604 to 0600 and see it works even without
> your proposed check in of_pci_make_dev_node()?

I tested this on Linux 6.18.44 with CONFIG_PCI_DYNAMIC_OF_NODES=y.
Changing only the class to 0600 still doesn't boot with both OF fixes
removed.

pci_is_bridge() checks the header type. I confirmed the class quirk runs
by restoring the v2 property checks, which lets it boot and log:

class=060000 header=01 is_bridge=1

I then tried changing both the class to 0600 and the header type to 00.
That boots without either OF fix and logs:

class=060000 header=00 is_bridge=0

These changes affect the kernel's cached values. The raw registers still
report class 0604 and header 01. With the header override, 00:00.0 no
longer gets an OF node; the other bridges still do.

The v2 patch also boots without any device quirk. It keeps the node for
00:00.0 and skips only bus-range and interrupt-map when there is no
subordinate bus.

Changing the header type as well made it boot here. I'll send the quirk
for 8086:4c43 with both changes. I'll also keep the check in
of_pci_make_dev_node() and add an error message before returning when a
bridge has no subordinate bus, as you suggested.

Thanks,
Angel J

Attachment: signature.asc
Description: OpenPGP digital signature