Messages in this thread Patches in this message | | | Subject | [PATCH 1/1] 2.6.17-rc5 patch for HPET operation on NVIDIA platforms | Date | Thu, 1 Jun 2006 07:23:37 -0700 | From | "Andy Currid" <> |
| |
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@nvidia.com>
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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |