Date: Wed, 14 Nov 2007 15:37:51 -0500 From: John Baldwin <jhb@freebsd.org> To: freebsd-arch@freebsd.org Cc: Billy Newsom <billy@nlcc.us> Subject: Re: reBoot code: can we detect if there is an AT keyboard controller? Message-ID: <200711141537.51447.jhb@freebsd.org> In-Reply-To: <473B521D.7050202@nlcc.us> References: <473B521D.7050202@nlcc.us>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 14 November 2007 02:53:01 pm Billy Newsom wrote: > AFAIK, the FreeBSD kernel still relies on a 90s codebase for rebooting... It uses the > keyboard controller reset method to do a warm reboot. > > I have had trouble with this method over the years... a Pentium Pro and more recently > a Mac Pro with no keyboard controller. I have speculated that Mac laptops and blade > servers would also lack the KBC. If Intel continues their progress of dropping > deprecated hardware, the KBC could disappear in the next 3 to 5 years. > > So could there be some intelligent software code to check the presence of this > device, and if not present, use the alternate reboot? The ACPI reboot sequence, for > example, works for FreeBSD 6.2 and later, on my Mac Pro quad Xeon, amd64. > > Unfortunately, although the kernel detects the presence of a KBC during boot, it > doesn't seem that this information gets stored as a global variable for later use. (I > made this assertion a few times at freebsd-stable.) It seems like the logical course > is to only reboot the keyboard controller if such a thing exists!! > > Looking back at my notes and my previous research, it appears that the code is around > where you can find the cpu_reset code near... > > /* "good night, sweet prince .... <THUNK!>" */ > > Setting hw.acpi.handle_reboot=1 must bypass that. Could we force the use of this > tunable when it's obvious that the KBC is missing? Actually, I recently updated the reboot code to try several other sequences besides just the keyboard controller such as flipping reset bits in I/O ports 0xcf9 and 0x92. Also, when I did the update I also fixed a bug in the triple-fault last-effort that had caused it to not actually cause a triple-fault. As a result, you might be able to reboot just fine now on newer stable w/o the tunable if you have this commit: revision 1.259.2.6 date: 2007/04/30 17:45:44; author: jhb; state: Exp; lines: +40 -6 MFC: Various fixes to cpu_reset_real() - Try to use the reset control register (I/O port 0xcf9) and the fast a20 and init register (I/O port 0x92) if the keyboard reset fails. - Fix the triple fault to actually work when PGE is enabled. -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200711141537.51447.jhb>