[PATCH v2 19/27] pci: PCIe driver for Marvell Armada 370/XP systems
From: arnd@arndb.de (Arnd Bergmann)
Date: 2013-02-01 17:45:29
Also in:
linux-pci
On Friday 01 February 2013, Russell King - ARM Linux wrote:
On Fri, Feb 01, 2013 at 04:07:49PM +0000, Arnd Bergmann wrote:quoted
On Friday 01 February 2013, Thomas Petazzoni wrote:quoted
So there is really a range of I/O addresses associated to it, even though the device will apparently not use it. Would it be possible to detect that the I/O range is not used by the device, and therefore avoid the allocation of an address decoding window for this I/O range?I suspect it just gets disabled because the port number 0xc0010000 is larger than IO_PORT_LIMIT and we cannot access that offset inside of the virtual memory window we use for PIO.You're running into that trap again which you fall into on other architectures. If you arrange for your PCI IO space to start at 0 rather than the physical address that it appears on your CPU, then you shouldn't end up with it extending up to something at 0xcXXXXXXX. Remember that we should be ensuring that inb(0) hits the first address of the cross-subarch PCI IO area - this alway requires that any sub-arch taking part in a multiplatform kernel must start its IO space addresses at 0 and not the physical address on the local CPU.
Yes, that was my point. I think in this case, the bug is in the new of_pci_process_ranges functions, which returns a 'struct resource' translated into IORESOURCE_MEM space, but with the type set to IORESOURCE_IO. This resource then gets passed to pci_add_resource_offset(). Arnd