[PATCH v2 19/27] pci: PCIe driver for Marvell Armada 370/XP systems
Russell King - ARM Linux
linux at arm.linux.org.uk
Thu Jan 31 09:50:02 EST 2013
On Thu, Jan 31, 2013 at 03:30:41PM +0100, Thomas Petazzoni wrote:
> Dear Russell King - ARM Linux,
>
> On Wed, 30 Jan 2013 15:46:02 +0000, Russell King - ARM Linux wrote:
>
> > +resource_size_t pcibios_window_alignment(struct pci_bus *bus,
> > + unsigned long type)
> > +{
> > + struct pci_sys_data *sys = bus->sysdata;
> > +
> > + /* Ignore downstream buses */
> > + if (!bus->parent) {
> > + if (type & IORESOURCE_MEM)
> > + return sys->win_align_mem;
> > + if (type & IORESOURCE_IO)
> > + return sys->win_align_io;
> > + }
> > + return 1;
> > +}
> > +
>
> Unfortunately, this doesn't work as is for me: the if (!bus->parent)
> prevents the thing from being effective. Here my lspci output:
>
> # /usr/sbin/lspci
> 00:00.0 Host bridge: Marvell Technology Group Ltd. Device 102d
> 00:01.0 PCI bridge: Marvell Technology Group Ltd. Device 1092
> 00:02.0 PCI bridge: Marvell Technology Group Ltd. Device 1092
> 00:03.0 PCI bridge: Marvell Technology Group Ltd. Device 1092
> 00:04.0 PCI bridge: Marvell Technology Group Ltd. Device 1092
> 00:05.0 PCI bridge: Marvell Technology Group Ltd. Device 1092
> 00:06.0 PCI bridge: Marvell Technology Group Ltd. Device 1092
> 03:00.0 SCSI storage controller: Marvell Technology Group Ltd. 88SX7042 PCI-e 4-port SATA-II (rev 02)
> 05:00.0 Ethernet controller: Intel Corporation 82572EI Gigabit Ethernet Controller (Copper) (rev 06)
>
> And the function pcibios_window_alignment() only gets called for bus 1,
> 2, 3, 4, 5, 6 and never for bus 0.
That's the exact reverse of what I'd expect: the child buses should
have a non-NULL parent pointer. Hmm. Try changing that for !bus->self -
that should make it effective only on the host bridge.
But... hang on...
/*
* Returns true if the pci bus is root (behind host-pci bridge),
* false otherwise
*/
static inline bool pci_is_root_bus(struct pci_bus *pbus)
{
return !(pbus->parent);
}
So the original test _is_ correct, and should only be triggered for
the _root_ bus, that being bus 0 in the above case.
But... wait a moment, what are you saying? Which bridges need this
fixup? The Marvell PCI-to-PCI bridges or the host bridge?
More information about the linux-arm-kernel
mailing list