On Wed, Apr 30, 2014 at 10:33:08AM +0000, Phil Edworthy wrote: > > You set the value of the integrated bus based on the bus number in the > > TYPE0 accesses the driver performs and it shows up in the PCI config > > space of the root port bridge: > > > > root@koelsch:~# lspci -vv > > 00:00.0 PCI bridge: Renesas Technology Corp. Device 001f (prog-if 00 > > [Normal decode]) > > Bus: primary=00, secondary=01, subordinate=01, sec-latency=0 > > > > The value here will be also be exported on-the-wire in certain PCI-E > > TLPs. > > > > So it is important, and must be set properly. > I am not so sure about this... > > There are three things we need to consider: > 1) talking to the host bridge itself > 2) talking to immediate device (connected directly to host bridge) > 3) talking to other devices > > The PCI standard tells us we use type 1's for 3) and type 0's for > 2). The driver uses root_bus_nr to make this decision. For 1), > there is a note in the driver that the hardware cannot target > itself. The driver has code in rcar_pcie_config_access() to check if > it's an access to the host bridge, and if so, use I/O (readl/writel) > to perform the config access. The logic should be: if (bus == primary) do io access to host bridge else if (bus == secondary) issue type 0 TLP on the wire else if (bus > secondary && bus <= subordinate) issue type 1 TLP on the wire else fail, invalid bus number Where the three values come from the register in the PCI host bridge's configuration space, and are kept in sync with the programming from the Linux PCI core. It is just a happy hapenstance that root_bus_nr equals the value the PCI core programmed into secondary - that is not guarenteed, you must use the primary value directly. I recommend capturing it on write to the host bridge config space. Jason -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html