-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PATCH] x86 reboot: Add reboot fixup for gx1/cs5530a
This patch by Jaya Kumar introduces a generic infrastructure to deal with x86 chipsets with nonstandard reset sequences, and adds support for the Geode gx1/cs5530a chipset. Signed-off-by: Jaya Kumar <jayalk@intworks.biz> Signed-off-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
- Loading branch information
Jaya Kumar
authored and
Linus Torvalds
committed
May 1, 2005
1 parent
67701ae
commit a2f7c35
Showing
5 changed files
with
87 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
/* | ||
* 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> | ||
* | ||
*/ | ||
|
||
#include <asm/delay.h> | ||
#include <linux/pci.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; | ||
} | ||
|
||
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 }, | ||
}; | ||
|
||
/* | ||
* 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 < (sizeof(fixups_table)/sizeof(fixups_table[0])); i++) { | ||
cur = &(fixups_table[i]); | ||
dev = pci_get_device(cur->vendor, cur->device, 0); | ||
if (!dev) | ||
continue; | ||
|
||
cur->reboot_fixup(dev); | ||
} | ||
|
||
printk(KERN_WARNING "No reboot fixup found for your hardware\n"); | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#ifndef _LINUX_REBOOT_FIXUPS_H | ||
#define _LINUX_REBOOT_FIXUPS_H | ||
|
||
#ifdef CONFIG_X86_REBOOTFIXUPS | ||
extern void mach_reboot_fixups(void); | ||
#else | ||
#define mach_reboot_fixups() ((void)(0)) | ||
#endif | ||
|
||
#endif /* _LINUX_REBOOT_FIXUPS_H */ |