Bug 17391

Summary: FreeBSD boot loader does not recognize keyboard on MSI 6195 motherboard
Product: Base System Reporter: sperber <sperber>
Component: i386Assignee: John Baldwin <jhb>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: 3.2-RELEASE   
Hardware: Any   
OS: Any   

Description sperber 2000-03-15 13:10:01 UTC
The FreeBSD boot disk (of all releases mentioned above) starts up with

keyboard: no

on my new Athlon 600Mhz system on an MSI 6195 motherboard.

This is not a hardware problem, as both NT and RedHat 6.1 boot
fine on the system.

How-To-Repeat: Boot off any of the boot.flp images.
Comment 1 Sheldon Hearn 2000-03-15 13:27:39 UTC
On Wed, 15 Mar 2000 05:08:33 PST, sperber@informatik.uni-tuebingen.de wrote:

> The FreeBSD boot disk (of all releases mentioned above) starts up with
> 
> keyboard: no
> 
> on my new Athlon 600Mhz system on an MSI 6195 motherboard.

What keyboard have you got, and is the keyboard enabled in your BIOS?

Ciao,
Sheldon.
Comment 2 sperber 2000-03-15 13:31:10 UTC
>>>>> "Sheldon" == Sheldon Hearn <sheldonh@uunet.co.za> writes:

Sheldon> On Wed, 15 Mar 2000 05:08:33 PST, sperber@informatik.uni-tuebingen.de wrote:

>> The FreeBSD boot disk (of all releases mentioned above) starts up with
>> 
>> keyboard: no
>> 
>> on my new Athlon 600Mhz system on an MSI 6195 motherboard.

Sheldon> What keyboard have you got,

I've tried a Keysonic KB 230, an old Cherry MF/2 keyboard (previously
hooked up and working fine on another FreeBSD system), and an Olivetti
PS/2 keyboard.  Same result everywhere.

Sheldon> and is the keyboard enabled in your BIOS?

Yes.

-- 
Cheers =8-} Mike
Friede, Völkerverständigung und überhaupt blabla
Comment 3 Sheldon Hearn freebsd_committer freebsd_triage 2000-03-15 13:48:25 UTC
Responsible Changed
From-To: freebsd-bugs->rnordier

Robert, can you have a look at this one? 

Comment 4 sperber 2000-03-15 18:06:13 UTC
>>>>> "Sheldon" == Sheldon Hearn <sheldonh@uunet.co.za> writes:

Sheldon> On Wed, 15 Mar 2000 05:08:33 PST, sperber@informatik.uni-tuebingen.de wrote:

>> The FreeBSD boot disk (of all releases mentioned above) starts up with
>> 
>> keyboard: no
>> 
>> on my new Athlon 600Mhz system on an MSI 6195 motherboard.

I've found the cause: it's the timing of the keyboard probe.  When I
set

#define PROBE_MAXRETRY	500
#define PROBE_MAXWAIT	40000

in probe_keyboard.c, the keyboard gets detected.  Furthermore, I can
install with -h.

It seems to me the delay code there is going to be less and less
likely to work with newer motherboards.

-- 
Cheers =8-} Mike
Friede, Völkerverständigung und überhaupt blabla
Comment 5 rnordier freebsd_committer freebsd_triage 2000-06-13 22:43:12 UTC
Responsible Changed
From-To: rnordier->freebsd-bugs

Return this to the pool, as I'm not actively involved with the boot code 
just now.
Comment 6 John Baldwin freebsd_committer freebsd_triage 2000-06-19 18:37:25 UTC
Responsible Changed
From-To: freebsd-bugs->jhb

This may be fixed by some hacking around in boot2's keyboard probe code. 
Since I sort of maintain boot2, I'll take this.
Comment 7 Keith Jones 2002-10-15 20:19:23 UTC
Hi,

As it doesn't look like much has happened with this PR I thought I'd 
resurrect it, so I took a look at the boot code. The commentary around 
delay1ms() in /usr/src/sys/boot/i386/libi386/vidconsole.c has this to say:

/*
  * This routine uses an inb to an unused port, the time to execute that
  * inb is approximately 1.25uS.  This value is pretty constant across
  * all CPU's and all buses, with the exception of some PCI implentations
  * that do not forward this I/O address to the ISA bus as they know it
  * is not a valid ISA bus address, those machines execute this inb in
  * 60 nS :-(.
  *
  */

The unused port in question is port 0x84. (Incidentally, this is 
#define'd in the code; the macro is used in delay7() but not in 
delay1ms(). This should probably be corrected for neatness' sake.)

I suspect the MSI 6195 is one of those boards which breaks the delay 
routine. ;) (Strangely enough, MSI chipset works just fine with it.)

There are two workarounds for this; either, as suggested, whack up 
PROBE_MAXWAIT to about 20 times its current value, or come up with a 
better delay routine. The only problem I can see with increasing 
PROBE_MAXWAIT is that it may slow things down marginally when you boot 
up a machine that doesn't have a keyboard and don't put the '-P' option 
into 'boot.conf'. A better delay routine might be neater but is beyond 
my capabilities, I'm afraid ;)

Keith
Comment 8 sperber 2002-10-20 16:48:19 UTC
This PR can be closed.

>>>>> "Keith" == Keith Jones <kmjones@blueyonder.co.uk> writes:

Keith> Hi,

Keith> As it doesn't look like much has happened with this PR I thought I'd
Keith> resurrect it, so I took a look at the boot code. The commentary around
Keith> delay1ms() in /usr/src/sys/boot/i386/libi386/vidconsole.c has this to
Keith> say:

Keith> /*
Keith>   * This routine uses an inb to an unused port, the time to execute that
Keith>   * inb is approximately 1.25uS.  This value is pretty constant across
Keith>   * all CPU's and all buses, with the exception of some PCI implentations
Keith>   * that do not forward this I/O address to the ISA bus as they know it
Keith>   * is not a valid ISA bus address, those machines execute this inb in
Keith>   * 60 nS :-(.
Keith>   *
Keith>   */

Keith> The unused port in question is port 0x84. (Incidentally, this is
Keith> #define'd in the code; the macro is used in delay7() but not in
Keith> delay1ms(). This should probably be corrected for neatness' sake.)

Keith> I suspect the MSI 6195 is one of those boards which breaks the delay
Keith> routine. ;) (Strangely enough, MSI chipset works just fine with it.)

Keith> There are two workarounds for this; either, as suggested, whack up
Keith> PROBE_MAXWAIT to about 20 times its current value, or come up with a
Keith> better delay routine. The only problem I can see with increasing
Keith> PROBE_MAXWAIT is that it may slow things down marginally when you boot
Keith> up a machine that doesn't have a keyboard and don't put the '-P'
Keith> option into 'boot.conf'. A better delay routine might be neater but is
Keith> beyond my capabilities, I'm afraid ;)

I just checked again: for whatever reason, things work fine now with
4.6.2.  Thanks for taking a look!

-- 
Cheers =8-} Mike
Friede, Völkerverständigung und überhaupt blabla
Comment 9 John Baldwin freebsd_committer freebsd_triage 2002-10-20 19:32:04 UTC
State Changed
From-To: open->closed

Submitter reports that problem does not occur with 4.6.2.