Bug 55018

Summary: [digi] [patch] Digiboard PC/Xem fails to initialize when using digi module (BIOS boot failed (0x00 != 0x4447))
Product: Base System Reporter: Cyrill Shevchuk <cyrill>
Component: kernAssignee: Andre Oppermann <andre>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: 5.1-RELEASE   
Hardware: Any   
OS: Any   
Attachments:
Description Flags
file.diff none

Description Cyrill Shevchuk 2003-07-29 19:30:09 UTC
Module digi.ko can't initialize Digiboard PC/Xem ISA multiport
serial card on old Pentium-100MHz machine.

Error message during boot or manual module loading:

digi0: BIOS boot failed (0x00 != 0x4447)

Fix: Period given to digiboard bios to run is too small. In current version of
sys/dev/digi/digi.c it is 2 * hz ticks, actually it takes my card a little
longer to initialize (logged with default hz=100 value):

digi0: probing on isa bus
digi0: isa? port 0x104 mem 0xd0000
digi0: got reset after 0 iterations
digi0: board type is 0xf5
digi0: Probe returns -10
digi0: probing on isa bus
digi0: isa? port 0x104 mem 0xd0000
digi0: got reset after 0 iterations
digi0: board type is 0xf5
digi0: Probe returns -10
digi0 at port 0x104-0x107 iomem 0xd0000-0xd7fff on isa0
digi0: attaching
digi0: Checking card type
digi0: got reset after 0 iterations
digi0: board type is 0xf5
digi0: internal memory segment 0x0
digi0: got reset after 0 iterations
digi0: short memory test
digi0: 1st memory test ok
digi0: 2nd memory test ok
digi0: 3rd memory test ok
digi0: Got init reset after 0 us
digi0: BIOS uploaded
digi0: BIOS started after 0 us
digi0: BIOS booted after 215 iterations
digi0: Loading FEP/OS
digi0: FEP/OS loaded
digi0: FEP/OS started after 3 iterations
digi0: Digiboard PC/Xem, 64 ports found
digi1: probing on isa bus
digi1: 0x534: Invalid i/o address
digi1: probing on isa bus
digi1: probing on isa bus
digi1: 0xf00: Invalid i/o address
digi1: probing on isa bus
digi1: 0x330: Invalid i/o address
digi1: probing on isa bus
digi1: io address not given
digi1: probing on isa bus
digi1: 0x061: Invalid i/o address
digi1: probing on isa bus
digi1: io address not given


Suggested patch to sys/dev/digi/digi.c (version 1.34):
How-To-Repeat: 
1. Apply following patch to enable verbose init process:

--- sys/dev/digi/digi.c.orig	Tue Jul 29 09:36:38 2003
+++ sys/dev/digi/digi.c	Sun Jul 27 14:21:35 2003
@@ -108,7 +108,7 @@
 static struct con_bios *con_bios_list;
 devclass_t	 digi_devclass;
 static char	 driver_name[] = "digi";
-unsigned 	 digi_debug = 0;
+unsigned 	 digi_debug = 1;
 
 static struct speedtab digispeedtab[] = {
 	{ 0,		0},			/* old (sysV-like) Bx codes */


2. Place these lines in /etc/make.conf:

.if ${.CURDIR} == /usr/src/sys/modules/digi/digi
CFLAGS+= -DDEBUG
.endif

3. Recompile digi.ko module and load it:

# cd /usr/src/sys/modules/digi
# make cleandir && make obj && make depend && make
# cp digi/digi.ko /boot/kernel
# kldload digi
digi0: probing on isa bus
digi0: isa? port 0x104 mem 0xd0000
digi0: got reset after 0 iterations
digi0: board type is 0xf5
digi0: Probe returns -10
digi0: probing on isa bus
digi0: isa? port 0x104 mem 0xd0000
digi0: got reset after 0 iterations
digi0: board type is 0xf5
digi0: Probe returns -10
digi0 at port 0x104-0x107 iomem 0xd0000-0xd7fff on isa0
digi0: attaching
digi0: Checking card type
digi0: got reset after 0 iterations
digi0: board type is 0xf5
digi0: internal memory segment 0x0
digi0: got reset after 0 iterations
digi0: short memory test
digi0: 1st memory test ok
digi0: 2nd memory test ok
digi0: 3rd memory test ok
digi0: Got init reset after 0 us
digi0: BIOS uploaded
digi0: BIOS started after 0 us
digi0: BIOS boot failed (0x00 != 0x4447)
digi1: probing on isa bus
digi1: 0x534: Invalid i/o address
digi1: probing on isa bus
digi1: probing on isa bus
digi1: 0xf00: Invalid i/o address
digi1: probing on isa bus
digi1: 0x330: Invalid i/o address
digi1: probing on isa bus
digi1: io address not given
digi1: probing on isa bus
digi1: 0x061: Invalid i/o address
digi1: probing on isa bus
digi1: io address not given
Comment 1 Andre Oppermann freebsd_committer freebsd_triage 2003-12-27 16:49:20 UTC
Responsible Changed
From-To: freebsd-bugs->andre

Take over.
Comment 2 Andre Oppermann freebsd_committer freebsd_triage 2003-12-28 23:48:51 UTC
State Changed
From-To: open->analyzed

I'll get my Digi/Xem card out of the closet this week and 
test the patch.
Comment 3 Andre Oppermann freebsd_committer freebsd_triage 2005-09-14 16:18:43 UTC
State Changed
From-To: analyzed->patched

Patch committed in sys/dev/digi/digi.c rev. 1.59.
Comment 4 Gavin Atkinson freebsd_committer freebsd_triage 2008-05-29 13:59:11 UTC
Fixed in HEAD and RELENG_7, needs MFC of sys/dev/digi/digi.c 1.59 to
RELENG_6.
Comment 5 dfilter service freebsd_committer freebsd_triage 2010-08-14 23:49:26 UTC
Author: andre
Date: Sat Aug 14 22:49:07 2010
New Revision: 211321
URL: http://svn.freebsd.org/changeset/base/211321

Log:
  MFC r150132:
  
    Increase boot-time DigiBIOS initialization timeout to allow
    for a larger number of chained port modules.
  
    PR:		kern/55018
    Submitted by:	Cyrill Shevchuk <cyrill at cyrills.net>

Modified:
  stable/6/sys/dev/digi/digi.c

Modified: stable/6/sys/dev/digi/digi.c
==============================================================================
--- stable/6/sys/dev/digi/digi.c	Sat Aug 14 22:35:20 2010	(r211320)
+++ stable/6/sys/dev/digi/digi.c	Sat Aug 14 22:49:07 2010	(r211321)
@@ -360,7 +360,7 @@ digi_init(struct digi_softc *sc)
 	DLOG(DIGIDB_INIT, (sc->dev, "BIOS started after %d us\n", i));
 
 	for (i = 0; vW(ptr) != *(u_short *)"GD"; i++) {
-		if (i > 2*hz) {
+		if (i > 5*hz) {
 			log(LOG_ERR, "digi%d: BIOS boot failed "
 			    "(0x%02x != 0x%02x)\n",
 			    sc->res.unit, vW(ptr), *(u_short *)"GD");
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
Comment 6 Andre Oppermann freebsd_committer freebsd_triage 2010-08-14 23:55:56 UTC
State Changed
From-To: patched->closed

Final MFC done.