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 very weird.
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.
ron