summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tags/2.6.22-2/20001_x86-early-quirks-unificiation.patch1')
-rw-r--r--tags/2.6.22-2/20001_x86-early-quirks-unificiation.patch1237
1 files changed, 237 insertions, 0 deletions
diff --git a/tags/2.6.22-2/20001_x86-early-quirks-unificiation.patch1 b/tags/2.6.22-2/20001_x86-early-quirks-unificiation.patch1
new file mode 100644
index 0000000..12dd843
--- /dev/null
+++ b/tags/2.6.22-2/20001_x86-early-quirks-unificiation.patch1
@@ -0,0 +1,237 @@
+Subject: x86: Unify i386 and x86-64 early quirks
+
+They were already very similar; just use the same file now.
+
+Cc: lenb@kernel.org
+
+Signed-off-by: Andi Kleen <ak@suse.de>
+
+---
+ arch/i386/kernel/Makefile | 2
+ arch/i386/kernel/acpi/Makefile | 3 -
+ arch/i386/kernel/acpi/earlyquirk.c | 84 -------------------------------------
+ arch/i386/kernel/setup.c | 4 -
+ arch/x86_64/kernel/early-quirks.c | 11 ++++
+ include/asm-i386/acpi.h | 6 --
+ include/asm-i386/dma.h | 2
+ include/asm-x86_64/io_apic.h | 2
+ include/asm-x86_64/proto.h | 2
+ 9 files changed, 18 insertions(+), 98 deletions(-)
+
+--- a/arch/i386/kernel/Makefile 2007-08-27 14:01:19.000000000 -0400
++++ b/arch/i386/kernel/Makefile 2007-08-27 14:02:11.000000000 -0400
+@@ -17,6 +17,7 @@ obj-$(CONFIG_MCA) += mca.o
+ obj-$(CONFIG_X86_MSR) += msr.o
+ obj-$(CONFIG_X86_CPUID) += cpuid.o
+ obj-$(CONFIG_MICROCODE) += microcode.o
++obj-$(CONFIG_PCI) += early-quirks.o
+ obj-$(CONFIG_APM) += apm.o
+ obj-$(CONFIG_X86_SMP) += smp.o smpboot.o tsc_sync.o
+ obj-$(CONFIG_SMP) += smpcommon.o
+@@ -84,4 +85,5 @@ $(obj)/vsyscall-syms.o: $(src)/vsyscall.
+
+ k8-y += ../../x86_64/kernel/k8.o
+ stacktrace-y += ../../x86_64/kernel/stacktrace.o
++early-quirks-y += ../../x86_64/kernel/early-quirks.o
+
+--- a/arch/i386/kernel/acpi/Makefile 2007-07-08 19:32:17.000000000 -0400
++++ b/arch/i386/kernel/acpi/Makefile 2007-08-27 14:02:11.000000000 -0400
+@@ -1,7 +1,4 @@
+ obj-$(CONFIG_ACPI) += boot.o
+-ifneq ($(CONFIG_PCI),)
+-obj-$(CONFIG_X86_IO_APIC) += earlyquirk.o
+-endif
+ obj-$(CONFIG_ACPI_SLEEP) += sleep.o wakeup.o
+
+ ifneq ($(CONFIG_ACPI_PROCESSOR),)
+--- a/arch/i386/kernel/acpi/earlyquirk.c 2007-07-08 19:32:17.000000000 -0400
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,84 +0,0 @@
+-/*
+- * Do early PCI probing for bug detection when the main PCI subsystem is
+- * not up yet.
+- */
+-#include <linux/init.h>
+-#include <linux/kernel.h>
+-#include <linux/pci.h>
+-#include <linux/acpi.h>
+-
+-#include <asm/pci-direct.h>
+-#include <asm/acpi.h>
+-#include <asm/apic.h>
+-
+-#ifdef CONFIG_ACPI
+-
+-static int __init nvidia_hpet_check(struct acpi_table_header *header)
+-{
+- return 0;
+-}
+-#endif
+-
+-static int __init check_bridge(int vendor, int device)
+-{
+-#ifdef CONFIG_ACPI
+- static int warned;
+- /* According to Nvidia all timer overrides are bogus unless HPET
+- is enabled. */
+- if (!acpi_use_timer_override && vendor == PCI_VENDOR_ID_NVIDIA) {
+- if (!warned && acpi_table_parse(ACPI_SIG_HPET,
+- nvidia_hpet_check)) {
+- warned = 1;
+- acpi_skip_timer_override = 1;
+- printk(KERN_INFO "Nvidia board "
+- "detected. Ignoring ACPI "
+- "timer override.\n");
+- printk(KERN_INFO "If you got timer trouble "
+- "try acpi_use_timer_override\n");
+-
+- }
+- }
+-#endif
+- if (vendor == PCI_VENDOR_ID_ATI && timer_over_8254 == 1) {
+- timer_over_8254 = 0;
+- printk(KERN_INFO "ATI board detected. Disabling timer routing "
+- "over 8254.\n");
+- }
+- return 0;
+-}
+-
+-void __init check_acpi_pci(void)
+-{
+- int num, slot, func;
+-
+- /* Assume the machine supports type 1. If not it will
+- always read ffffffff and should not have any side effect.
+- Actually a few buggy systems can machine check. Allow the user
+- to disable it by command line option at least -AK */
+- if (!early_pci_allowed())
+- return;
+-
+- /* Poor man's PCI discovery */
+- for (num = 0; num < 32; num++) {
+- for (slot = 0; slot < 32; slot++) {
+- for (func = 0; func < 8; func++) {
+- u32 class;
+- u32 vendor;
+- class = read_pci_config(num, slot, func,
+- PCI_CLASS_REVISION);
+- if (class == 0xffffffff)
+- break;
+-
+- if ((class >> 16) != PCI_CLASS_BRIDGE_PCI)
+- continue;
+-
+- vendor = read_pci_config(num, slot, func,
+- PCI_VENDOR_ID);
+-
+- if (check_bridge(vendor & 0xffff, vendor >> 16))
+- return;
+- }
+-
+- }
+- }
+-}
+--- a/arch/i386/kernel/setup.c 2007-07-08 19:32:17.000000000 -0400
++++ b/arch/i386/kernel/setup.c 2007-08-27 14:01:19.000000000 -0400
+@@ -627,9 +627,7 @@ void __init setup_arch(char **cmdline_p)
+ #endif
+
+ #ifdef CONFIG_PCI
+-#ifdef CONFIG_X86_IO_APIC
+- check_acpi_pci(); /* Checks more than just ACPI actually */
+-#endif
++ early_quirks();
+ #endif
+
+ #ifdef CONFIG_ACPI
+--- a/arch/x86_64/kernel/early-quirks.c 2007-07-08 19:32:17.000000000 -0400
++++ b/arch/x86_64/kernel/early-quirks.c 2007-08-27 14:04:27.000000000 -0400
+@@ -13,9 +13,14 @@
+ #include <linux/acpi.h>
+ #include <linux/pci_ids.h>
+ #include <asm/pci-direct.h>
+-#include <asm/proto.h>
++#include <asm/io_apic.h>
++#include <asm/apic.h>
+ #include <asm/dma.h>
+
++#ifdef CONFIG_X86_64
++#include <asm/proto.h>
++#endif
++
+ static void __init via_bugs(void)
+ {
+ #ifdef CONFIG_IOMMU
+@@ -39,6 +44,7 @@ static int __init nvidia_hpet_check(stru
+ static void __init nvidia_bugs(void)
+ {
+ #ifdef CONFIG_ACPI
++#ifdef CONFIG_X86_IO_APIC
+ /*
+ * All timer overrides on Nvidia are
+ * wrong unless HPET is enabled.
+@@ -58,17 +64,20 @@ static void __init nvidia_bugs(void)
+ "try acpi_use_timer_override\n");
+ }
+ #endif
++#endif
+ /* RED-PEN skip them on mptables too? */
+
+ }
+
+ static void __init ati_bugs(void)
+ {
++#ifdef CONFIG_X86_IO_APIC
+ if (timer_over_8254 == 1) {
+ timer_over_8254 = 0;
+ printk(KERN_INFO
+ "ATI board detected. Disabling timer routing over 8254.\n");
+ }
++#endif
+ }
+
+ struct chipset {
+--- a/include/asm-i386/acpi.h 2007-07-08 19:32:17.000000000 -0400
++++ b/include/asm-i386/acpi.h 2007-08-27 14:02:03.000000000 -0400
+@@ -81,11 +81,7 @@ int __acpi_release_global_lock(unsigned
+ :"=r"(n_hi), "=r"(n_lo) \
+ :"0"(n_hi), "1"(n_lo))
+
+-#ifdef CONFIG_X86_IO_APIC
+-extern void check_acpi_pci(void);
+-#else
+-static inline void check_acpi_pci(void) { }
+-#endif
++extern void early_quirks(void);
+
+ #ifdef CONFIG_ACPI
+ extern int acpi_lapic;
+--- a/include/asm-i386/dma.h 2007-07-08 19:32:17.000000000 -0400
++++ b/include/asm-i386/dma.h 2007-08-27 14:01:19.000000000 -0400
+@@ -294,4 +294,6 @@ extern int isa_dma_bridge_buggy;
+ #define isa_dma_bridge_buggy (0)
+ #endif
+
++#define MAX_DMA32_PFN ((4UL*1024*1024*1024) >> PAGE_SHIFT)
++
+ #endif /* _ASM_DMA_H */
+--- a/include/asm-x86_64/io_apic.h 2007-07-08 19:32:17.000000000 -0400
++++ b/include/asm-x86_64/io_apic.h 2007-08-27 14:01:51.000000000 -0400
+@@ -127,4 +127,6 @@ void enable_NMI_through_LVT0 (void * dum
+
+ extern spinlock_t i8259A_lock;
+
++extern int timer_over_8254;
++
+ #endif
+--- a/include/asm-x86_64/proto.h 2007-07-08 19:32:17.000000000 -0400
++++ b/include/asm-x86_64/proto.h 2007-08-27 14:01:19.000000000 -0400
+@@ -106,8 +106,6 @@ extern int fix_aperture;
+ extern int reboot_force;
+ extern int notsc_setup(char *);
+
+-extern int timer_over_8254;
+-
+ extern int gsi_irq_sharing(int gsi);
+
+ extern void smp_local_timer_interrupt(void);