Messages in this thread Patches in this message |  | | Date | Sun, 04 Nov 2001 15:13:56 +0100 | From | Manfred Spraul <> | Subject | Re: Vaio IRQ routing / USB problem |
| |
[cc to linux-kernel added]
Tom Winkler wrote: > > usb-uhci.c: High bandwidth mode enabled > IRQ for 00:1f.2:3 -> PIRQ 63, mask 0200, excl 0000 -> newirq=9 -> got IRQ > 10 > PCI: Found IRQ 10 for device 00:1f.2 > IRQ routing conflict for 00:1f.2, have irq 9, want irq 10 > PCI: Setting latency timer of device 00:1f.2 to 64
That's interesting. It's obivously a bios bug: The USB controller only supports interrupt 9 (mask==0x200 -->bit 9), is right now running on irq 9 according to the bios data. But according to the piix irq router, it's connected to irq 10.
First we must figure out where the bios lies. Could you try the attached patches? The patches are alternatives, first try option 1, then option 2.
----- 2.4/arch/i386/kernel/pci-irq.c Sat Nov 3 19:51:08 2001 +++ build-2.4/arch/i386/kernel/pci-irq.c Sun Nov 4 14:48:58 2001 @@ -626,7 +626,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 && 0) { printk(KERN_INFO "IRQ routing conflict for %s, have irq %d, want irq %d\n", dev2->slot_name, dev2->irq, irq); continue;
--- 2.4/arch/i386/kernel/pci-irq.c Sat Nov 3 19:51:08 2001 +++ build-2.4/arch/i386/kernel/pci-irq.c Sun Nov 4 15:09:40 2001 @@ -629,6 +629,18 @@ if (dev2->irq && dev2->irq != irq) { printk(KERN_INFO "IRQ routing conflict for %s, have irq %d, want irq %d\n", dev2->slot_name, dev2->irq, irq); + if (!strcmp(msg, "Found")) { + /* ok, the bios lied. Try to recover */ + if (r->set && (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) { + printk(KERN_ERR "trying set.\n"); + if (r->set(pirq_router_dev, dev2, pirq, dev2->irq)) { + printk(KERN_ERR "set succedded.\n"); + eisa_set_level_irq(dev2->irq); + } else { + printk(KERN_ERR "set failed.\n"); + } + } + } continue; } dev2->irq = irq;
|  |