diff options
Diffstat (limited to 'arch/i386/kernel')
-rw-r--r-- | arch/i386/kernel/reboot_fixups.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/i386/kernel/reboot_fixups.c b/arch/i386/kernel/reboot_fixups.c index 2d78d918340f..03e1cce58f49 100644 --- a/arch/i386/kernel/reboot_fixups.c +++ b/arch/i386/kernel/reboot_fixups.c | |||
@@ -5,12 +5,14 @@ | |||
5 | * | 5 | * |
6 | * List of supported fixups: | 6 | * List of supported fixups: |
7 | * geode-gx1/cs5530a - Jaya Kumar <jayalk@intworks.biz> | 7 | * geode-gx1/cs5530a - Jaya Kumar <jayalk@intworks.biz> |
8 | * geode-gx/lx/cs5536 - Andres Salomon <dilinger@debian.org> | ||
8 | * | 9 | * |
9 | */ | 10 | */ |
10 | 11 | ||
11 | #include <asm/delay.h> | 12 | #include <asm/delay.h> |
12 | #include <linux/pci.h> | 13 | #include <linux/pci.h> |
13 | #include <asm/reboot_fixups.h> | 14 | #include <asm/reboot_fixups.h> |
15 | #include <asm/msr.h> | ||
14 | 16 | ||
15 | static void cs5530a_warm_reset(struct pci_dev *dev) | 17 | static void cs5530a_warm_reset(struct pci_dev *dev) |
16 | { | 18 | { |
@@ -21,6 +23,16 @@ static void cs5530a_warm_reset(struct pci_dev *dev) | |||
21 | return; | 23 | return; |
22 | } | 24 | } |
23 | 25 | ||
26 | static void cs5536_warm_reset(struct pci_dev *dev) | ||
27 | { | ||
28 | /* | ||
29 | * 6.6.2.12 Soft Reset (DIVIL_SOFT_RESET) | ||
30 | * writing 1 to the LSB of this MSR causes a hard reset. | ||
31 | */ | ||
32 | wrmsrl(0x51400017, 1ULL); | ||
33 | udelay(50); /* shouldn't get here but be safe and spin a while */ | ||
34 | } | ||
35 | |||
24 | struct device_fixup { | 36 | struct device_fixup { |
25 | unsigned int vendor; | 37 | unsigned int vendor; |
26 | unsigned int device; | 38 | unsigned int device; |
@@ -29,6 +41,7 @@ struct device_fixup { | |||
29 | 41 | ||
30 | static struct device_fixup fixups_table[] = { | 42 | static struct device_fixup fixups_table[] = { |
31 | { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_LEGACY, cs5530a_warm_reset }, | 43 | { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_LEGACY, cs5530a_warm_reset }, |
44 | { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA, cs5536_warm_reset }, | ||
32 | }; | 45 | }; |
33 | 46 | ||
34 | /* | 47 | /* |