Messages in this thread Patch in this message | | | Subject | Re: IRQ Routing Problem on ALi Chipset Laptop (HP Pavilion N5425) | From | Cory Bell <> | Date | 08 Dec 2001 21:37:31 -0800 |
| |
On Fri, 2001-12-07 at 12:33, Pavel Machek wrote:
> Hey, this gross hack fixed USB on HP OmniBook xe3. Good! (Perhaps you > know what interrupt is right for maestro3, also on omnibook? ;-).
On my Pavilion (and the other 5400's as far as I can tell), maestro's on irq 5. Wanna send me a "dump_pirq" and a "lspci -vvvxxx"? Could you try the patch below (inspired by/stolen from Kai Germaschewski)? Also, the newest acpi patch will print out the acpi irq routing table - might have your info. You can tell if the patch below had any effect because it will say it ASSIGNED IRQ XX instead of FOUND.
I believe the Omnibook XEs and the Pavilion N5400's are very similar hardware. Several of the drivers I've seen on HP's website appear to apply to both. If you want to help get the BIOS updated (the root cause, IMHO), please call HP support and reference case number 1429683616 (that 9 may be a 4 - my handwriting is horrible). That's the case I logged with thim about the broken PIR table (USB irq showing 9; being 11) and failure to enable sse on athlon 4/duron/xp chips.
Thanks for the info!
-Cory
The "honor the irq mask" approach (works on my machine): --- /home/cbell/linux-2.4/arch/i386/kernel/pci-irq.c Fri Dec 7 01:51:41 2001 +++ /home/cbell/linux-2.4-test/arch/i386/kernel/pci-irq.c Sat Dec 8 21:04:37 2001 @@ -581,6 +581,7 @@ * reported by the device if possible. */ newirq = dev->irq; + if (!((1 << newirq) & mask)) newirq = 0; if (!newirq && assign) { for (i = 0; i < 16; i++) { if (!(mask & (1 << i))) @@ -599,7 +600,7 @@ irq = pirq & 0xf; DBG(" -> hardcoded IRQ %d\n", irq); msg = "Hardcoded"; - } else if (r->get && (irq = r->get(pirq_router_dev, dev, pirq))) { + } else if (r->get && (irq = r->get(pirq_router_dev, dev, pirq) && ((1 << irq) & mask))) { DBG(" -> got IRQ %d\n", irq); msg = "Found"; } else if (newirq && r->set && (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) { @@ -633,7 +634,7 @@ continue; if (info->irq[pin].link == pirq) { /* We refuse to override the dev->irq information. Give a warning! */ - if (dev2->irq && dev2->irq != irq) { + if (dev2->irq && dev2->irq != irq && ((1 << dev2->irq) & mask)) { printk(KERN_INFO "IRQ routing conflict for %s, have irq %d, want irq %d\n", dev2->slot_name, dev2->irq, irq); continue; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |