lkml.org 
[lkml]   [2001]   [Dec]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: IRQ Routing Problem on ALi Chipset Laptop (HP Pavilion N5425)
    From
    Date
    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/

    \
     
     \ /
      Last update: 2005-03-22 13:13    [W:2.574 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site