mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
GEODE: reboot fixup for geode machines with CS5536 boards
Writing to MSR 0x51400017 forces a hard reset on CS5536-based machines, this has the reboot fixup do just that if such a board is detected. Acked-by: Jordan Crouse <jordan.crouse@amd.com> Signed-off-by: Andres Salomon <dilinger@debian.org> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: Andi Kleen <ak@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
1feb17e286
commit
95069f89e8
2 changed files with 15 additions and 2 deletions
|
@ -441,8 +441,8 @@ config X86_REBOOTFIXUPS
|
|||
this config is intended, is when reboot ends with a stalled/hung
|
||||
system.
|
||||
|
||||
Currently, the only fixup is for the Geode GX1/CS5530A/TROM2.1.
|
||||
combination.
|
||||
Currently, the only fixup is for the Geode machines using
|
||||
CS5530A and CS5536 chipsets.
|
||||
|
||||
Say Y if you want to enable the fixup. Currently, it's safe to
|
||||
enable this option even if you don't need it.
|
||||
|
|
|
@ -5,12 +5,14 @@
|
|||
*
|
||||
* 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)
|
||||
{
|
||||
|
@ -21,6 +23,16 @@ static void cs5530a_warm_reset(struct pci_dev *dev)
|
|||
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;
|
||||
|
@ -29,6 +41,7 @@ struct device_fixup {
|
|||
|
||||
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 },
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue