Skip site navigation (1)Skip section navigation (2)
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>