PCI IRQ routing change broke PCMCIA/prism54 driver

Bjorn Helgaas bjorn.helgaas at hp.com
Sat Aug 14 17:08:42 EDT 2004

On Friday 13 August 2004 5:39 pm, Russell King wrote:
> On Fri, Aug 13, 2004 at 05:09:28PM -0600, Bjorn Helgaas wrote:
> > I recently changed the way PCI interrupt routing is done.  We used to
> > go through all the ACPI _PRTs at boot-time, programming IOSAPICs and
> > setting pci_dev->irq.  That all happened before any drivers got involved.
> Note that you shouldn't set pci_dev->irq for any devices below the
> cardbus bridge (since the cardbus code knows better than anyone else
> which IRQ must be used.)

We now DO set pci_dev->irq in pci_enable_device() (specifically, in
acpi_pci_irq_enable()).  In this case, the ACPI _PRT seemed to supply
the same IRQ that cardbus_assign_irqs() assigned, but I don't understand
enough about how cardbus is different from a regular pci-pci bridge to
feel confident.

> > One problem is that prism54 quit working.  As far as I can see,
> > prism54 and yenta_socket are doing the right thing.  But there's
> > a lot of interrupt magic in there that I don't understand at all.
> Define "quit working" - how did it stop working?  Is it just that
> prism54 receives no interrupts?  Do socket status change interrupts
> still work?

I don't have a lot of details, but Cyrille reported that prism54
seemed to be able to receive, but not send packets.  Inserting and
removing the device still caused driver init and cleanup, so those
interrupts seem to work.

More information about the linux-pcmcia mailing list