Re: Vaio IRQ routing / USB problem

Manfred Spraul (manfred@colorfullife.com)
Sun, 04 Nov 2001 15:13:56 +0100


This is a multi-part message in MIME format.
--------------80DA9F316B2C68C8FA27AA36
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

[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.

--
--------------80DA9F316B2C68C8FA27AA36
Content-Type: text/plain; charset=us-ascii;
 name="patch-vaio-option-1"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="patch-vaio-option-1"

--- 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;

--------------80DA9F316B2C68C8FA27AA36 Content-Type: text/plain; charset=us-ascii; name="patch-vaio-option-2" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch-vaio-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 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;

--------------80DA9F316B2C68C8FA27AA36--

- 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/