diff options
author | jb <jb@FreeBSD.org> | 2004-03-09 02:49:24 +0000 |
---|---|---|
committer | jb <jb@FreeBSD.org> | 2004-03-09 02:49:24 +0000 |
commit | 1fdc6e57d5d3b5e473d7e3b037afcb0f08e05880 (patch) | |
tree | a1ccd8c4a11cf38fb9a993e21d8060229661902a /sys/i386 | |
parent | e9062915d30751c7edfb1855484e1aaeca783ca6 (diff) | |
download | FreeBSD-src-1fdc6e57d5d3b5e473d7e3b037afcb0f08e05880.zip FreeBSD-src-1fdc6e57d5d3b5e473d7e3b037afcb0f08e05880.tar.gz |
AMD's ELAN documentation says that you write to the SYS_RST register
in the Memory Mapped Configuration Region (MMCR) to reset the CPU.
If CPU_ELAN is set, try this first to reset the CPU before the
traditional way.
Without this change, my Compulab board powers down on 'reset' instead
of rebooting.
Diffstat (limited to 'sys/i386')
-rw-r--r-- | sys/i386/i386/vm_machdep.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/i386/i386/vm_machdep.c b/sys/i386/i386/vm_machdep.c index b09128d..7007e54 100644 --- a/sys/i386/i386/vm_machdep.c +++ b/sys/i386/i386/vm_machdep.c @@ -43,6 +43,7 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include "opt_cpu.h" #include "opt_isa.h" #include "opt_kstack_pages.h" #include "opt_npx.h" @@ -77,6 +78,9 @@ __FBSDID("$FreeBSD$"); #include <machine/pcb.h> #include <machine/pcb_ext.h> #include <machine/vm86.h> +#ifdef CPU_ELAN +#include <machine/elan_mmcr.h> +#endif #ifdef CPU_ELAN #include <machine/elan_mmcr.h> @@ -559,6 +563,12 @@ cpu_reset_real() } outb(0xf0, 0x00); /* Reset. */ #else +#ifdef CPU_ELAN + if (elan_mmcr != NULL) + /* SYS_RST */ + elan_mmcr->RESCFG = 1; +#endif + /* * Attempt to do a CPU reset via the keyboard controller, * do not turn of the GateA20, as any machine that fails |