Messages in this thread Patch in this message | | | Date | Wed, 24 Mar 2004 19:34:34 -0800 | From | Tony Lindgren <> | Subject | [PATCH] x86_64 VIA chipset IOAPIC fix |
| |
Hi Andi & Len,
Sorry for cross posting all over the place, I tried to CC some people who have been bugged by this bug.
I finally got the IOAPIC working on my eMachines m6805 amd64 laptop with the following patch. I have not tried it on any other machines, so can you guys please check the sanity and make the necessary changes if needed?
This fixes at least ACPI bug 2090:
http://bugme.osdl.org/show_bug.cgi?id=2090
Might fix some other x86 VIA bugs too?
To turn it on, apic still needs to be specified in the kernel cmdline:
root=/dev/hda3 ro psmouse.proto=imps apic console=tty0
Now cat /proc/interrupts shows:
0: 70843 IO-APIC-edge timer 1: 9 IO-APIC-edge i8042 2: 0 XT-PIC cascade 8: 0 IO-APIC-edge rtc 10: 0 IO-APIC-level acpi 12: 44 IO-APIC-edge i8042 14: 2734 IO-APIC-edge ide0 15: 19 IO-APIC-edge ide1 17: 0 IO-APIC-level yenta 18: 0 IO-APIC-level eth0 21: 565 IO-APIC-level ehci_hcd, uhci_hcd, uhci_hcd, uhci_hcd 22: 0 IO-APIC-level VIA8233 23: 6 IO-APIC-level eth1 NMI: 12 LOC: 70752 ERR: 0 MIS: 0
And things are just working :)
Regards,
Tony
And here's the patch, it's against 2.6.5-rc2:
diff -Nru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c --- a/drivers/acpi/pci_link.c Wed Feb 25 21:11:46 2004 +++ b/drivers/acpi/pci_link.c Wed Mar 24 18:47:48 2004 @@ -402,10 +402,8 @@ ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unable to read status\n")); return_VALUE(result); } - if (!link->device->status.enabled) { - ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Link disabled\n")); - return_VALUE(-ENODEV); - } + if (!link->device->status.enabled) + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Link disabled: VIA chipset? Trying to continue\n")); /* Make sure the active IRQ is the one we requested. */ result = acpi_pci_link_try_get_current(link, irq); @@ -415,11 +413,9 @@ if (link->irq.active != irq) { ACPI_DEBUG_PRINT((ACPI_DB_ERROR, - "Attempt to enable at IRQ %d resulted in IRQ %d\n", - irq, link->irq.active)); - link->irq.active = 0; - acpi_ut_evaluate_object (link->handle, "_DIS", 0, NULL); - return_VALUE(-ENODEV); + "Attempt to enable at IRQ %d resulted in IRQ %d: VIA chipset? Using irq %d\n", + irq, link->irq.active, irq)); + link->irq.active = irq; } ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Set IRQ %d\n", link->irq.active)); | |