On Sat, 16 Feb 2008 13:49:56 +0300 Sergei Shtylyov
<sshtylyov@ru.mvista.com> 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
>
|