Some additional info on this:

The issue is caused by the imx6 PCIe Root Complex which is not properly configured on boot. The subordinate should be set to 0xff (maximum bus nr that is reachable downstream)

lspci -v:

[ Node 3 | node-3 ] lspci -v
00:00.0 PCI bridge: Synopsys, Inc. Device abcd (rev 01) (prog-if 00 [Normal decode])
    Flags: bus master, fast devsel, latency 0, IRQ 298
    Memory at 01000000 (32-bit, non-prefetchable) [size=1M]
    Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
  ...


The kernel patch mentioned in the patch limits downstream devices to the subord of the master, which in this case limits the busnr's to 1. This stops the scanning process as soon as busnr 1 is used (which is the assigned bus in the plx)


After checking the reference manual, I've found a register which can be written during imx6 PCIe init to alter this value.
Applying this patch shows this:

lspci -v:

[ Node 3 | node-3 ] lspci -v
00:00.0 PCI bridge: Synopsys, Inc. Device abcd (rev 01) (prog-if 00 [Normal decode])
    Flags: bus master, fast devsel, latency 0, IRQ 298
    Memory at 01000000 (32-bit, non-prefetchable) [size=1M]
    Bus: primary=00, secondary=01, subordinate=ff, sec-latency=0
  ...


PCIe bus scanning now shows that all devices are discovered again, and a huge amount of warnings & errors have vanished. I'll send patches to upstream kernel & u-boot to fix the BNR register value on reset, and provide a backport to LEDE. (from kernel patch)


Koen

_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to