[PATCH 1/1] 2.6.17-rc5 patch for HPET operation on NVIDIA platforms

From: Andy Currid
Date: Thu Jun 01 2006 - 10:23:00 EST




This patch fixes a kernel panic during boot that occurs on NVIDIA
platforms that have
HPET enabled. When HPET is enabled, the standard timer IRQ is routed to
IOAPIC pin 2
and is advertised as such in the ACPI APIC table - but an earlier
workaround in the
kernel was ignoring this override. The fix is to honor timer IRQ
overrides from ACPI
when HPET is detected on an NVIDIA platform.

32-bit kernel patch:

Signed-off-by: Andy Currid <acurrid@xxxxxxxxxx>

diff -u linux-2.6.17-rc5-patch/arch/i386/kernel/acpi/earlyquirk.c
linux-2.6.17-rc5/arch/i386/kernel/acpi/earlyquirk.c
--- linux-2.6.17-rc5/arch/i386/kernel/acpi/earlyquirk.c 2006-03-19
22:53:29.000000000 -0700
+++ linux-2.6.17-rc5-patch/arch/i386/kernel/acpi/earlyquirk.c
2006-05-27 16:03:59.000000000 -0600
@@ -9,13 +9,30 @@
#include <asm/acpi.h>
#include <asm/apic.h>

+#ifdef CONFIG_ACPI
+
+#include <linux/acpi.h>
+
+static int nvidia_hpet_detected __initdata;
+
+static int __init nvidia_hpet_check(unsigned long phys, unsigned long
size)
+{
+ nvidia_hpet_detected = 1;
+ return 0;
+}
+#endif
+
static int __init check_bridge(int vendor, int device)
{
#ifdef CONFIG_ACPI
- /* According to Nvidia all timer overrides are bogus. Just
ignore
- them all. */
+ /* According to Nvidia all timer overrides are bogus unless HPET
+ is enabled. */
if (vendor == PCI_VENDOR_ID_NVIDIA) {
- acpi_skip_timer_override = 1;
+ nvidia_hpet_detected = 0;
+ acpi_table_parse(ACPI_HPET, nvidia_hpet_check);
+ if (nvidia_hpet_detected == 0) {
+ acpi_skip_timer_override = 1;
+ }
}
#endif
if (vendor == PCI_VENDOR_ID_ATI && timer_over_8254 == 1) {

diff -u linux-2.6.17-rc5/arch/i386/kernel/setup.c
linux-2.6.17-rc5-patch/arch/i386/kernel/acpi/setup.c
--- linux-2.6.17-rc5/arch/i386/kernel/setup.c 2006-05-27
13:00:34.000000000 -0600
+++ linux-2.6.17-rc5-patch/arch/i386/kernel/setup.c 2006-05-27
15:38:38.000000000 -0600
@@ -1547,15 +1547,18 @@
if (efi_enabled)
efi_map_memmap();

-#ifdef CONFIG_X86_IO_APIC
- check_acpi_pci(); /* Checks more than just ACPI actually
*/
-#endif
-
#ifdef CONFIG_ACPI
/*
* Parse the ACPI tables for possible boot-time SMP
configuration.
*/
acpi_boot_table_init();
+#endif
+
+#ifdef CONFIG_X86_IO_APIC
+ check_acpi_pci(); /* Checks more than just ACPI actually
*/
+#endif
+
+#ifdef CONFIG_ACPI
acpi_boot_init();

#if defined(CONFIG_SMP) && defined(CONFIG_X86_PC)
-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may contain
confidential information. Any unauthorized review, use, disclosure or distribution
is prohibited. If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/