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