On 15/01/2018 10:36, Koen Vandeputte wrote: > The subordinate value indicates the highest bus number which can be > reached downstream though a certain device. > > Commit a20c7f36bd3d ("PCI: Do not allocate more buses than available in > parent") > ensures that downstream devices cannot assign busnumbers higher than the > upstream device subordinate number, which was indeed illogical. > > By default, dw_pcie_setup_rc() inits the Root Complex subordinate to a > value of 0x01. > > Due to this combined with above commit, enumeration stops digging deeper > downstream as soon as bus num 0x01 has been assigned, which is always > the case for a bridge device. > > This results in all devices behind a bridge bus to remain undetected, as > these would be connected to bus 0x02 or higher. > > Fix this by initializing the RC to a subordinate value of 0xff, which is > not altering hardware behaviour in any way, but informs probing > function pci_scan_bridge() later on which reads this value back from > register. > > Following nasty errors during boot are also fixed by this: > > [ 0.459145] pci_bus 0000:02: busn_res: can not insert [bus 02-ff] > under [bus 01] (conflicts with (null) [bus 01]) > ... > [ 0.464515] pci_bus 0000:03: [bus 03] partially hidden behind bridge > 0000:01 [bus 01] > ... > [ 0.464892] pci_bus 0000:04: [bus 04] partially hidden behind bridge > 0000:01 [bus 01] > ... > [ 0.466488] pci_bus 0000:05: [bus 05] partially hidden behind bridge > 0000:01 [bus 01] > [ 0.466506] pci_bus 0000:02: busn_res: [bus 02-ff] end is updated to > 05 > [ 0.466517] pci_bus 0000:02: busn_res: can not insert [bus 02-05] > under [bus 01] (conflicts with (null) [bus 01]) > [ 0.466534] pci_bus 0000:02: [bus 02-05] partially hidden behind > bridge 0000:01 [bus 01] FWIW, I find that this wrap-around looks ugly :-p Regards.