forked from Minki/linux
ec7b97208a
c861519fcf
("MIPS: Fix delay loops which may
be removed by GCC.") which made it upstream was an outdated version of the
patch and is lacking some the removal of two variables that became unused
thus resulting in further warnings and build breakage. The commit
from ae878615d7cee5d7346946cf1ae1b60e427013c2 was correct however.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
48 lines
927 B
C
48 lines
927 B
C
/*
|
|
* linux/arch/mips/sni/process.c
|
|
*
|
|
* Reset a SNI machine.
|
|
*/
|
|
#include <linux/delay.h>
|
|
|
|
#include <asm/io.h>
|
|
#include <asm/reboot.h>
|
|
#include <asm/sni.h>
|
|
|
|
/*
|
|
* This routine reboots the machine by asking the keyboard
|
|
* controller to pulse the reset-line low. We try that for a while,
|
|
* and if it doesn't work, we do some other stupid things.
|
|
*/
|
|
static inline void kb_wait(void)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < 0x10000; i++)
|
|
if ((inb_p(0x64) & 0x02) == 0)
|
|
break;
|
|
}
|
|
|
|
/* XXX This ends up at the ARC firmware prompt ... */
|
|
void sni_machine_restart(char *command)
|
|
{
|
|
int i;
|
|
|
|
/* This does a normal via the keyboard controller like a PC.
|
|
We can do that easier ... */
|
|
local_irq_disable();
|
|
for (;;) {
|
|
for (i = 0; i < 100; i++) {
|
|
kb_wait();
|
|
udelay(50);
|
|
outb_p(0xfe, 0x64); /* pulse reset low */
|
|
udelay(50);
|
|
}
|
|
}
|
|
}
|
|
|
|
void sni_machine_power_off(void)
|
|
{
|
|
*(volatile unsigned char *)PCIMT_CSWCSM = 0xfd;
|
|
}
|