Date: Wed, 19 Apr 1995 11:15:30 +1000 From: Bruce Evans <bde@zeta.org.au> To: current@FreeBSD.org, rgrimes@gndrsh.aac.dev.com Subject: Re: Fix for motherboards that don't reboot. Message-ID: <199504190115.LAA15783@godzilla.zeta.org.au>
next in thread | raw e-mail | index | archive | help
>I spent some time talking with a BIOS engineer today about the problem >of FreeBSD not rebooting on some motherboards and have come up with >the following patch that fixes the problem on the board I have here. > void > cpu_reset() { >+ >+ /* Attempt to do a CPU reset via the keyboard controller */ >+ outb(IO_KBD + 4, 0xFE); This is what I implemented for Minix about (sigh) 6 years ago. I found that outputting 0xFC works better. AFAIR 0xFE strobes the CPU reset line and 0xFC additionally strobes GateA20. Both methods worked in protected mode on the machines that I had access to, but in real mode, (with A20 forced to 0) several machines hung, apparently due to a bad fetch of the first instruction after reset. The first instruction was usually invalid and jumped to the BIOS invalid instruction handler, which was braindamaged and looped. Trapping it with a debugger and jumping to the correct reset vector worked. I suspect the reset worked better in protected mode only because the invalid instruction handler was invalid and the system eventually got reset better after a triple fault. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199504190115.LAA15783>