Subject: Re: What is the correct way to indicate an unassigned PCI resource ?

From: Olaf Hering <[email-masked]>
Date: Thu, 4 Jan 2007 18:49:47 +0100

On Wed, Dec 06, Benjamin Herrenschmidt wrote:

> On Tue, 2006-12-05 at 09:15 +0100, Olaf Hering wrote:
> > On Tue, Dec 05, Benjamin Herrenschmidt wrote:
> > 
> > > Olaf, can you give me a dump of /proc/ioports ? What is sitting at 0 on
> > > that PCI bus ?
> > 
> > with IDE=y
> > 
> > ==> /proc/ioports <==
> > 00000000-0000001f : dma1
> 
> So it's indeed colliding with the cruft above.
> 
> I reckon it's a bug in the firmware of this machine.
> 
> Add to pseries/pci.c a quirk for that chipset (don't forget to test for
> machine_is(pseries) in the quirk as they get called for all platforms in
> a combo kernel. The quirk shall check if resource 6 has a 0 base and
> clear the size as Alan suggested (possibly setting the UNSET flag as
> well).

I will test this change tomorrow:

+++ linux-2.6/arch/powerpc/platforms/pseries/pci.c
@@ -98,6 +98,10 @@ static void fixup_winbond_82c105(struct
                if (dev->resource[i].flags & IORESOURCE_IO
                    && dev->bus->number == 0 && dev->devfn == 0x81)
                        dev->resource[i].flags &= ~IORESOURCE_IO;
+               if (dev->resource[i].start == 0) {
+                       printk("disable IO resource %d on W82c105 IDE controller\n", i);
+                       dev->resource[i].flags = IORESOURCE_DISABLED;
+               }
        }
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105,

Or did you mean 'if (dev->resource[5].start == 0)' ?