Subject: Re: aceride0: couldn't map native-PCI interrupt
To: None <netbsd@precedence.co.uk>
From: Chris Gilbert <chris@dokein.co.uk>
List: port-cats
Date: 02/25/2007 18:13:23
On Sun, 25 Feb 2007 15:17:53 +0000
Chris Gilbert <chris@dokein.co.uk> wrote:

> On Sun, 28 Jan 2007 18:43:33 +0000 (GMT)
> Stephen Borrill <netbsd@precedence.co.uk> wrote:
> 
> > On Sun, 28 Jan 2007, Chris Gilbert wrote:
> > > Stephen Borrill wrote:
> > >> Hi, I'm trying to boot -current netbsd.able-INSTALL with ABLE 2.21. It
> > >> boots to sysinst, but I've got no HD/CD because of "aceride0: couldn't
> > >> map native-PCI interrupt".
> > >>
> > >> Any ideas?
> > >
> > > I'll pull down current and take a look.  My first guess would be that
> > > the code in cats/pci/pciide_machdep.c isn't being run with the aceride
> > > driver.  That said I've not looked at the code for some time.
> > 
> > If it's any help, this is an ABLE vs Cyclone issue. Cyclone 1.30 is fine, 
> > but ABLE is not.
> 
> Only a month after I said I'd take a look, I finally setup my cats, and have them working (one booted saying 300 days since last boot, the other 573...)  I can't even claim the 7 months since I moved house as the reason.
> 
> Anyway it looks like ABLE has changed something, Updating one of my machines to v2.21 the hard disks don't map.  With v2.08 it was working fine.
> 
> Perhaps ABLE is no longer mapping interrupts as it used to.
> 
> I'll wire up a serial cable and see if I can find out more about what's going on.
> 
> First I need to sync down the latest -current code and build a new kernel, so it might be a day or so till I investigate further.

Having done the above I've delved into what's different.  And there appear to be one key difference:
2.08: footbridge_pci_conf_read(pcv=0x0 tag=0x00008000 reg=0x08)=0x0101fac1
2.21: footbridge_pci_conf_read(pcv=0x0 tag=0x00008000 reg=0x08)=0x0101ffc1

note the ff rather than fa.  This indicates that the IDE controller has been placed into native-PCI mode, rather than compatibility mode. (for both channels)

The problem arises from the fact that register 0x3c:
footbridge_pci_conf_read(pcv=0x0 tag=0x00008000 reg=0x3c)=0x040201ff
indicates the pin (1) and the line (ff)

The problem is that ff isn't a valid line, as so we don't know which PCI line it's interrupting on, so can't allocate it properly.  In theory ABLE should have setup the register to indicate the correct line if it wants to run the card as native-PCI.  On x86 it's the BIOS's job to do the setup as it knows the interrupt routing of the system.  We could in theory hack it, but I've no idea how 

Anyway that's why it breaks.  I'll try and talk to simtec and see if we can get a fix.

Thanks,
Chris