reboot fails-- 630e or C3?
Ronald G Minnich
rminnich at lanl.gov
Mon Sep 23 18:34:01 CEST 2002
On Mon, 23 Sep 2002, Steve M. Gehlbach wrote:
> I traced the code to the machine_restart sub in arch/i386/kernel/process.c.
> It seems that linux tries to reset using a keyboard command (out 0xfe,0x64)
> and if that fails it forces a triple fault. Neither seem to work. I tried
> setting b0 of reg 0x46 in the ISA bridge (-d 1039:8), on the sis630e, which
> is labeled "Enable Keyboard Hardware Reset", but it didn't work. So I put
> in a patch to process.c that sets b6,7 of reg 0x46 of the ISA bridge, and
> this works, it causes a reset (per the data sheet). But of course that is a
> kernel patch and I would like to avoid that.
ah yes. Linux restart. It never actually worked for me. In fact I'm
dubious that on most modern machines it ever worked at all. I learned that
once while tracing Linux restart with an ICE. Lots of careful code in
there, but the thing that makes reset happen is ... the triple fault. It's
funny in a way.
What linux seems to be tending to for reset is to set the watchdog timer,
and then just sit there tapping your toes until it times out and resets
the machine. If we can get WDT support for the 630 hardware in, that
would be the way to do it.
> Anyone run into this issue before, or know if I should blame the sis630 or
> the via C3? Seems like a poor design if you can't reboot without a kernel
> patch, although it is a simple one.
The mistake here, in my view, is Intel. At one time, microprocessors had a
reset instruction that would reset the machine. For some reason x86 boxes
never had it -- they relied on magic external stuff. I have never figured
out why Intel did this. Maybe to save a pin? Not sure.
So we have a zillion ways to reset the machine that are in essence "side
effects". You do this strange thing and somehow a reset happens. I find it
I think we need to get WDT support in and make it work that way. That
seems to be the approved method nowadays, and there is support for lots of
chips in the Linux WDT code.
More information about the coreboot