On Friday 01 February 2013, Russell King - ARM Linux wrote: > On Fri, Feb 01, 2013 at 04:07:49PM +0000, Arnd Bergmann wrote: > > On Friday 01 February 2013, Thomas Petazzoni wrote: > > > 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 -- 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