On Thu, Dec 17, 2015 at 11:29:52PM +0200, Matti Laakso wrote: > Hello all, > > I have some oldish MIPS-based (Lantiq Danube) routers that have a PCI > bus and a VIA 6212 USB-controller connected to it. The USB controller > requires I/O resources in addition to memory. It seems that with kernel > 3.18 and newer PCI I/O resources can no longer be allocated on this > platform. I tracked the problem down to a patch set from Liviu Dudau > (Support for creating generic PCI host bridges from DT). After this > patch the function pci_address_to_pio in drivers/of/address.c hits the check > > address > IO_SPACE_LIMIT > > since address on this SoC is 0x1AE00000 and IO_SPACE_LIMIT is 0xFFFF on > MIPS (PCI_IOBASE is not defined). Changing IO_SPACE_LIMIT to 0xFFFFFFFF > I can work around the problem, but I think that is not the proper solution. if PCI_IOBASE is not defined then you should not hit the code I have added with commit 41f8bba7f5552d0 but the old code path, in which case I would guess the code was broken before my change? > > Any ideas on how to fix this? > There is a distinction between IO range being visible from the CPU @ 0x1AE00000 and the IO address being used by the PCI subsystem. The IO address is a bus address and it should be between 0 - IO_SPACE_LIMIT. I would look into the actual user of pci_address_to_pio(), and maybe define PCI_IOBASE for your platform to tell it where the IO space starts from CPU point of view. Best regards, Liviu > Best regards, > Matti Laakso > -- ==================== | I would like to | | fix the world, | | but they're not | | giving me the | \ source code! / --------------- ¯\_(ツ)_/¯