i386: prepare shared kernel/reboot_fixups.c
authorThomas Gleixner <tglx@linutronix.de>
Thu, 11 Oct 2007 09:12:34 +0000 (11:12 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 11 Oct 2007 09:12:34 +0000 (11:12 +0200)
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/i386/kernel/Makefile
arch/i386/kernel/reboot_fixups.c [deleted file]
arch/i386/kernel/reboot_fixups_32.c [new file with mode: 0644]

index 4ff5e93d23c9570e0c689e4df285b1553a0a59fd..57b41c4d5fdee300ca8520032b818e18418b74b6 100644 (file)
@@ -24,7 +24,7 @@ obj-$(CONFIG_X86_TRAMPOLINE)  += trampoline.o
 obj-$(CONFIG_X86_MPPARSE)      += mpparse.o
 obj-$(CONFIG_X86_LOCAL_APIC)   += apic_32.o nmi_32.o
 obj-$(CONFIG_X86_IO_APIC)      += io_apic_32.o
-obj-$(CONFIG_X86_REBOOTFIXUPS) += reboot_fixups.o
+obj-$(CONFIG_X86_REBOOTFIXUPS) += reboot_fixups_32.o
 obj-$(CONFIG_KEXEC)            += machine_kexec.o relocate_kernel_32.o crash_32.o
 obj-$(CONFIG_CRASH_DUMP)       += crash_dump.o
 obj-$(CONFIG_X86_NUMAQ)                += numaq.o
diff --git a/arch/i386/kernel/reboot_fixups.c b/arch/i386/kernel/reboot_fixups.c
deleted file mode 100644 (file)
index 03e1cce..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * linux/arch/i386/kernel/reboot_fixups.c
- *
- * This is a good place to put board specific reboot fixups.
- *
- * List of supported fixups:
- * geode-gx1/cs5530a - Jaya Kumar <jayalk@intworks.biz>
- * geode-gx/lx/cs5536 - Andres Salomon <dilinger@debian.org>
- *
- */
-
-#include <asm/delay.h>
-#include <linux/pci.h>
-#include <asm/reboot_fixups.h>
-#include <asm/msr.h>
-
-static void cs5530a_warm_reset(struct pci_dev *dev)
-{
-       /* writing 1 to the reset control register, 0x44 causes the
-       cs5530a to perform a system warm reset */
-       pci_write_config_byte(dev, 0x44, 0x1);
-       udelay(50); /* shouldn't get here but be safe and spin-a-while */
-       return;
-}
-
-static void cs5536_warm_reset(struct pci_dev *dev)
-{
-       /*
-        * 6.6.2.12 Soft Reset (DIVIL_SOFT_RESET)
-        * writing 1 to the LSB of this MSR causes a hard reset.
-        */
-       wrmsrl(0x51400017, 1ULL);
-       udelay(50); /* shouldn't get here but be safe and spin a while */
-}
-
-struct device_fixup {
-       unsigned int vendor;
-       unsigned int device;
-       void (*reboot_fixup)(struct pci_dev *);
-};
-
-static struct device_fixup fixups_table[] = {
-{ PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_LEGACY, cs5530a_warm_reset },
-{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA, cs5536_warm_reset },
-};
-
-/*
- * we see if any fixup is available for our current hardware. if there
- * is a fixup, we call it and we expect to never return from it. if we
- * do return, we keep looking and then eventually fall back to the
- * standard mach_reboot on return.
- */
-void mach_reboot_fixups(void)
-{
-       struct device_fixup *cur;
-       struct pci_dev *dev;
-       int i;
-
-       for (i=0; i < ARRAY_SIZE(fixups_table); i++) {
-               cur = &(fixups_table[i]);
-               dev = pci_get_device(cur->vendor, cur->device, NULL);
-               if (!dev)
-                       continue;
-
-               cur->reboot_fixup(dev);
-       }
-}
-
diff --git a/arch/i386/kernel/reboot_fixups_32.c b/arch/i386/kernel/reboot_fixups_32.c
new file mode 100644 (file)
index 0000000..03e1cce
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * linux/arch/i386/kernel/reboot_fixups.c
+ *
+ * This is a good place to put board specific reboot fixups.
+ *
+ * List of supported fixups:
+ * geode-gx1/cs5530a - Jaya Kumar <jayalk@intworks.biz>
+ * geode-gx/lx/cs5536 - Andres Salomon <dilinger@debian.org>
+ *
+ */
+
+#include <asm/delay.h>
+#include <linux/pci.h>
+#include <asm/reboot_fixups.h>
+#include <asm/msr.h>
+
+static void cs5530a_warm_reset(struct pci_dev *dev)
+{
+       /* writing 1 to the reset control register, 0x44 causes the
+       cs5530a to perform a system warm reset */
+       pci_write_config_byte(dev, 0x44, 0x1);
+       udelay(50); /* shouldn't get here but be safe and spin-a-while */
+       return;
+}
+
+static void cs5536_warm_reset(struct pci_dev *dev)
+{
+       /*
+        * 6.6.2.12 Soft Reset (DIVIL_SOFT_RESET)
+        * writing 1 to the LSB of this MSR causes a hard reset.
+        */
+       wrmsrl(0x51400017, 1ULL);
+       udelay(50); /* shouldn't get here but be safe and spin a while */
+}
+
+struct device_fixup {
+       unsigned int vendor;
+       unsigned int device;
+       void (*reboot_fixup)(struct pci_dev *);
+};
+
+static struct device_fixup fixups_table[] = {
+{ PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_LEGACY, cs5530a_warm_reset },
+{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA, cs5536_warm_reset },
+};
+
+/*
+ * we see if any fixup is available for our current hardware. if there
+ * is a fixup, we call it and we expect to never return from it. if we
+ * do return, we keep looking and then eventually fall back to the
+ * standard mach_reboot on return.
+ */
+void mach_reboot_fixups(void)
+{
+       struct device_fixup *cur;
+       struct pci_dev *dev;
+       int i;
+
+       for (i=0; i < ARRAY_SIZE(fixups_table); i++) {
+               cur = &(fixups_table[i]);
+               dev = pci_get_device(cur->vendor, cur->device, NULL);
+               if (!dev)
+                       continue;
+
+               cur->reboot_fixup(dev);
+       }
+}
+