On Sat, 16 Feb 2008 13:49:56 +0300 Sergei Shtylyov <sshtylyov@xxxxxxxxxxxxx> wrote: > Michael Buesch wrote: > > > There's a sanity check in pcibios_enable_resources() that looks > > like this: > > > r = &dev->resource[idx]; > > if (!r->start && r->end) { > > printk(KERN_ERR "PCI: Device %s not available > > because of resource collisions\n", pci_name(dev)); return -EINVAL; > > } > > > > What is this check actually doing? > > It makes sure that a PCI resource is allocated (base of 0 means > that it's unallocated due to previously detected resource conlict (or > some other reason). Actually, IIRC, resources are based on what the device requested, so a device behind a bridge could request a resource starting at 0. I had to change this for a system as well. I changed it to if (!r->start && !r->end) { because I couldn't see anything in the code that made r->start == 0 an improper thing. Not to mention I couldn't access the device any other way. Both being 0 is definitelty bogus. > > It triggers for me on a BCM4318 device which is behind a BCM4710 > > PCI bridge. r->start is 0 and r->end is 0x1FFF when this triggers. > > If I simply comment out that check the device is detected correctly > > and seems to initialize just fine. > > No, that failnig resource should be relocated. > > WBR, Sergei >