rework reboot mechanism with the new watchdog fixes
The fixing of the watchdog driver makes it generate a NMI so the reboot_fixup can no longer be called from NMI context, instead, override the machine_retart callback with our southrbridge reboot mechanism. Patch by Bernhard Loos. SVN-Revision: 19977
This commit is contained in:
parent
fe348a7039
commit
86494323fe
3 changed files with 46 additions and 2 deletions
|
@ -280,7 +280,7 @@ CONFIG_X86_MINIMUM_CPU_FAMILY=4
|
|||
CONFIG_X86_POPAD_OK=y
|
||||
# CONFIG_X86_PPRO_FENCE is not set
|
||||
CONFIG_X86_RDC321X=y
|
||||
CONFIG_X86_REBOOTFIXUPS=y
|
||||
# CONFIG_X86_REBOOTFIXUPS is not set
|
||||
# CONFIG_X86_RESERVE_LOW_64K is not set
|
||||
# CONFIG_X86_UP_APIC is not set
|
||||
# CONFIG_X86_VERBOSE_BOOTUP is not set
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Makefile for the RDC321x specific parts of the kernel
|
||||
#
|
||||
obj-$(CONFIG_X86_RDC321X) := gpio.o platform.o pci.o
|
||||
obj-$(CONFIG_X86_RDC321X) := gpio.o platform.o pci.o reboot.o
|
||||
|
||||
|
|
44
target/linux/rdc/files-2.6.30/arch/x86/mach-rdc321x/reboot.c
Normal file
44
target/linux/rdc/files-2.6.30/arch/x86/mach-rdc321x/reboot.c
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <asm/reboot.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
static void rdc321x_reset(void)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
/* write to southbridge config register 0x41
|
||||
enable pci reset on cpu reset, make internal port 0x92 writeable
|
||||
and switch port 0x92 to internal */
|
||||
outl(0x80003840, 0xCF8);
|
||||
i = inl(0xCFC);
|
||||
i |= 0x1600;
|
||||
outl(i, 0xCFC);
|
||||
|
||||
/* soft reset */
|
||||
outb(1, 0x92);
|
||||
}
|
||||
|
||||
static int __init rdc_setup_reset(void)
|
||||
{
|
||||
machine_ops.emergency_restart = rdc321x_reset;
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(rdc_setup_reset);
|
Loading…
Reference in a new issue