[U-Boot] Problem with PCIexpress switch

Miguel Ángel Álvarez caronteycerbero at gmail.com
Wed Aug 1 16:24:34 CEST 2012


Dear all,

We are developing a board using a Freescale P2020. This micro has
three PCIexpress ports. 2 1xlane PCIe and 1 2xlane PCIe.

We have been able to successfully use the PCIe interfaces.

However, now we want to expand the number of PCIe slots connecting the
2xlane PCIe to a PCIe switch (89HPES6T5E). This switch offers a 2xlane
upstream port and 4 1xlane downstream ports.

The problem is that we do not really know how PCIe switches are
managed in Linux. If any of you can recommend us some resources to
read, we will appreciate it very much.

If there is no information to read, let me describe our main problem.

The question is that if I let u-boot scan the PCIe, the upstream and
downstream ports are detected as well as the cards connected to the
downstream port. However when u-boot launches Linux, this last just
finds a device (the HPES6T5E), and none of the downstream ports or
card connected to them.

pci 0000:00:00.0: PCI bridge, secondary bus 0000:01
pci 0000:00:00.0:   IO window: 0x00-0xffff
pci 0000:00:00.0:   MEM window: 0x80000000-0x9fffffff
pci 0000:00:00.0:   PREFETCH window: disabled
pci 0000:00:00.0: enabling device (0106 -> 0107)
pci 0001:02:00.0: PCI bridge, secondary bus 0001:03
pci 0001:02:00.0:   IO window: 0x00-0xffff
pci 0001:02:00.0:   MEM window: 0xa0000000-0xbfffffff
pci 0001:02:00.0:   PREFETCH window: disabled
pci 0001:02:00.0: enabling device (0106 -> 0107)
pci 0002:05:00.0: PCI bridge, secondary bus 0002:06
pci 0002:05:00.0:   IO window: disabled
pci 0002:05:00.0:   MEM window: 0xc0000000-0xc00fffff
pci 0002:05:00.0:   PREFETCH window: disabled
pci 0002:04:00.0: PCI bridge, secondary bus 0002:05
pci 0002:04:00.0:   IO window: 0x00-0xffff
pci 0002:04:00.0:   MEM window: 0xc0000000-0xdfffffff
pci 0002:04:00.0:   PREFETCH window: disabled
pci 0002:04:00.0: enabling device (0106 -> 0107)

However, if I do not let u-boot scan the bus (undef CONFIG_PCI_PNP,
for example), Linux finds five devices
for the 89HPES6T5E and the card connected to the downstream ports.

pci 0000:00:00.0: PCI bridge, secondary bus 0000:01
pci 0000:00:00.0:   IO window: 0x00-0xffff
pci 0000:00:00.0:   MEM window: 0x80000000-0x9fffffff
pci 0000:00:00.0:   PREFETCH window: disabled
pci 0000:00:00.0: enabling device (0106 -> 0107)
pci 0001:02:00.0: PCI bridge, secondary bus 0001:03
pci 0001:02:00.0:   IO window: 0x00-0xffff
pci 0001:02:00.0:   MEM window: 0xa0000000-0xbfffffff
pci 0001:02:00.0:   PREFETCH window: disabled
pci 0001:02:00.0: enabling device (0106 -> 0107)
pci 0002:06:02.0: PCI bridge, secondary bus 0002:07
pci 0002:06:02.0:   IO window: disabled
pci 0002:06:02.0:   MEM window: disabled
pci 0002:06:02.0:   PREFETCH window: disabled
pci 0002:06:03.0: PCI bridge, secondary bus 0002:08
pci 0002:06:03.0:   IO window: disabled
pci 0002:06:03.0:   MEM window: disabled
pci 0002:06:03.0:   PREFETCH window: disabled
pci 0002:06:04.0: PCI bridge, secondary bus 0002:09
pci 0002:06:04.0:   IO window: disabled
pci 0002:06:04.0:   MEM window: disabled
pci 0002:06:04.0:   PREFETCH window: disabled
pci 0002:06:05.0: PCI bridge, secondary bus 0002:0a
pci 0002:06:05.0:   IO window: disabled
pci 0002:06:05.0:   MEM window: 0xc0000000-0xc00fffff
pci 0002:06:05.0:   PREFETCH window: disabled
pci 0002:05:00.0: PCI bridge, secondary bus 0002:06
pci 0002:05:00.0:   IO window: disabled
pci 0002:05:00.0:   MEM window: 0xc0000000-0xc00fffff
pci 0002:05:00.0:   PREFETCH window: disabled
pci 0002:04:00.0: PCI bridge, secondary bus 0002:05
pci 0002:04:00.0:   IO window: 0x00-0xffff
pci 0002:04:00.0:   MEM window: 0xc0000000-0xdfffffff
pci 0002:04:00.0:   PREFETCH window: disabled
pci 0002:04:00.0: enabling device (0106 -> 0107)
pci 0002:05:00.0: enabling device (0000 -> 0002)
pci 0002:06:05.0: enabling device (0000 -> 0002)

/sys/bus/pci/devices # ls
0002:0a:00.0  0002:06:04.0  0002:06:02.0  0002:04:00.0  0000:00:00.0
0002:06:05.0  0002:06:03.0  0002:05:00.0  0001:02:00.0

It seems that the problem comes from the detection of a
PCI_CLASS_BRIDGE_PCI device in pciauto_config_device, but I do not
understand the rest of the problem.

Any clues?

Thanks

Miguel Ángel


More information about the U-Boot mailing list