Skip site navigation (1)Skip section navigation (2)
Date:      Wed,  5 May 1999 01:35:08 -0700 (PDT)
From:      max@cca.usart.ru
To:        freebsd-gnats-submit@freebsd.org
Subject:   kern/11507: CS89XX (i386/isa/if_cs.c) fails to properly initialize CS8920-based PnP NIC
Message-ID:  <19990505083508.304E215301@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         11507
>Category:       kern
>Synopsis:       CS89XX (i386/isa/if_cs.c) fails to properly initialize CS8920-based PnP NIC
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed May  5 01:40:01 PDT 1999
>Closed-Date:
>Last-Modified:
>Originator:     Max Gotlib
>Release:        GreeBSD-CURRENT (05.02.99) (affected starting with 04.16.99)
>Organization:
The Urals State Academy of Railway Transport
>Environment:
FreeBSD unxsrv.ks.usart.ru 4.0-CURRENT FreeBSD 4.0-CURRENT #2: Tue Mar 4 10:22:25 ES 1999     root@unxsrv.ks.usart.ru:/usr/src/sys/compile/UNXSRV  i386

>Description:
See PR kern/11462 for the primary problem description.
The proposed (former) patch was built against CURRENT (04.16.99(
source tree state, but then there were a number of changes, conserning
PnP stuff, so another "bug" was introdused. The simthoms are the following:
while booting kernel it correctly locates PnP CS9820-based NIC,
but in case of EEPROM driver configuration block checksum mismatch (I've
got ten IBM 300GLs with such a "feature"), driver fails to assing
media for the NIC and panics. More, since the driver "forgets" to initialize
the "id_alive" if "isa_device" structure, PnP code simply throws the
driver away during attachment procedure. More, because of the changes in
the PnP code, "old" sceme (when it was supposed that "id_unit" could be
equil to "id_id") used in PnP interrupt handler became broken and
driver gets no IRQs (constant OACTIVE interface state).
>How-To-Repeat:
Just try to boot :) I've performed tests in IBM 300GL with
embedded CS8920M-based NIC
>Fix:
The solution is the following: simply ignore the EEPROM checksum
mismatch (controlled by the oppropriate #define) and introduce oppropriate
fixes in the driver's code (for "id_alive" and "id_id" typos).

Here the patch (includes proposed in kern/11462 one)
for /sys/i386/isa/if_cs.c:
=========================
--- if_cs.c.ORIG        Mon Apr 19 20:19:57 1999
+++ if_cs.c     Wed May  5 13:13:30 1999
@@ -34,6 +34,8 @@
  */
 
 /* #define      CS_DEBUG */
+#define  IGNORE_CHKSUM_MISMATCH
+
 #include "cs.h"
 #include "bpfilter.h"
 
@@ -165,7 +167,7 @@
 
 #ifdef CS_DEBUG
                printf("%02x %02x ",(unsigned char)buffer[i],
-                                       (unsigned char)buffer[i+1]);
+                                       (unsigned char)(buffer[i] >> 8));
 #endif
        }
 
@@ -186,7 +188,12 @@
        cksum &= 0xffff;
        if (cksum==0)
                return 0;
+#ifdef IGNORE_CHKSUM_MISMATCH
+       printf ("cs: checksum mismatched, ignoring\n");
+       return (0);
+#else
        return -1;
+#endif
 }
 
 static int
@@ -599,6 +606,18 @@
 
                 if (sc->adapter_cnf & A_CNF_MEDIA)
                         ifmedia_add(&sc->media, IFM_ETHER|IFM_AUTO, 0, NULL);
+               else {
+                       printf (CS_NAME"%d: adapter reports no media"
+                               ", assuming 10baseT\n", unit);
+                       sc->adapter_cnf |= A_CNF_10B_T;
+                       ifmedia_add(&sc->media, IFM_ETHER|IFM_10_T, 0, NULL);
+                       if (sc->chip_type != CS8900) {
+                               ifmedia_add(&sc->media,
+                                       IFM_ETHER|IFM_10_T|IFM_FDX, 0, NULL);
+                               ifmedia_add(&sc->media,
+                                       IFM_ETHER|IFM_10_T|IFM_HDX, 0, NULL);
+                       }
+               }
 
                 /* Set default media from EEPROM */
                 switch (sc->adapter_cnf & A_CNF_MEDIA_TYPE) {
@@ -1307,11 +1326,11 @@
 {
     struct csintr_list *intr;
 
-    for (intr=csintr_head; intr; intr=intr->next) {
-           if (intr->unit == unit)
+    for (intr=csintr_head; intr; intr=intr->next)
+           if (intr->unit == unit) {
                csintr_sc(intr->sc, unit);
                break;
-       }
+           }
 }
 
 static char *
@@ -1378,7 +1397,8 @@
     if (!sc) return;
 
     bzero(sc, sizeof *sc);
-    if (cs_cs89x0_probe(sc, &irq, &drq, iobase, unit, flags) == 0
+    if ((dev->id_alive = 
+        cs_cs89x0_probe(sc, &irq, &drq, iobase, unit, flags)) == 0
        || cs_attach(sc, unit, flags) == 0) {
            free(sc, M_DEVBUF);
     } else {
@@ -1391,6 +1411,6 @@
                printf("failed to pnp card parametars\n");
        }
     }
-    csintr_pnp_add(sc, dev->id_unit);
+    csintr_pnp_add(sc, dev->id_id);
 }
 #endif /* NPNP */

=========================

And just the same in uue:
=========================
begin 644 if_cs.c.diff
M+2TM(&EF7V-S+F,N3U))1PE-;VX@07!R(#$Y(#(P.C$Y.C4W(#$Y.3D**RLK
M(&EF7V-S+F,)5V5D($UA>2`@-2`Q,SHQ,SHS,"`Q.3DY"D!`("TS-"PV("LS
M-"PX($!`"B`@*B\*(`H@+RH@(V1E9FEN90D@0U-?1$5"54<@*B\**R-D969I
M;F4@($E'3D]215]#2$M354U?34E334%40T@**PH@(VEN8VQU9&4@(F-S+F@B
M"B`C:6YC;'5D92`B8G!F:6QT97(N:"(*(`I`0"`M,38U+#<@*S$V-RPW($!`
M"B`*("-I9F1E9B!#4U]$14)51PH@"0EP<FEN=&8H(B4P,G@@)3`R>"`B+"AU
M;G-I9VYE9"!C:&%R*6)U9F9E<EMI72P*+0D)"0D)*'5N<VEG;F5D(&-H87(I
M8G5F9F5R6VDK,5TI.PHK"0D)"0DH=6YS:6=N960@8VAA<BDH8G5F9F5R6VE=
M(#X^(#@I*3L*("-E;F1I9@H@"7T*(`I`0"`M,3@V+#<@*S$X."PQ,B!`0`H@
M"6-K<W5M("8](#!X9F9F9CL*(`EI9B`H8VMS=6T]/3`I"B`)"7)E='5R;B`P
M.PHK(VEF9&5F($E'3D]215]#2$M354U?34E334%40T@**PEP<FEN=&8@*")C
M<SH@8VAE8VMS=6T@;6ES;6%T8VAE9"P@:6=N;W)I;F=<;B(I.PHK"7)E='5R
M;B`H,"D["BLC96QS90H@"7)E='5R;B`M,3L**R-E;F1I9@H@?0H@"B!S=&%T
M:6,@:6YT"D!`("TU.3DL-B`K-C`V+#$X($!`"B`*("`@("`@("`@("`@("`@
M("!I9B`H<V,M/F%D87!T97)?8VYF("8@05]#3D9?345$24$I"B`@("`@("`@
M("`@("`@("`@("`@("`@("!I9FUE9&EA7V%D9"@F<V,M/FUE9&EA+"!)1DU?
M151(15)\249-7T%55$\L(#`L($Y53$PI.PHK"0EE;'-E('L**PD)"7!R:6YT
M9B`H0U-?3D%-12(E9#H@861A<'1E<B!R97!O<G1S(&YO(&UE9&EA(@HK"0D)
M"2(L(&%S<W5M:6YG(#$P8F%S951<;B(L('5N:70I.PHK"0D)<V,M/F%D87!T
M97)?8VYF('P]($%?0TY&7S$P0E]4.PHK"0D):69M961I85]A9&0H)G-C+3YM
M961I82P@249-7T542$52?$E&35\Q,%]4+"`P+"!.54Q,*3L**PD)"6EF("AS
M8RT^8VAI<%]T>7!E("$]($-3.#DP,"D@>PHK"0D)"6EF;65D:6%?861D*"9S
M8RT^;65D:6$L"BL)"0D)"4E&35]%5$A%4GQ)1DU?,3!?5'Q)1DU?1D18+"`P
M+"!.54Q,*3L**PD)"0EI9FUE9&EA7V%D9"@F<V,M/FUE9&EA+`HK"0D)"0E)
M1DU?151(15)\249-7S$P7U1\249-7TA$6"P@,"P@3E5,3"D["BL)"0E]"BL)
M"7T*(`H@("`@("`@("`@("`@("`@("\J(%-E="!D969A=6QT(&UE9&EA(&9R
M;VT@14504D]-("HO"B`@("`@("`@("`@("`@("`@<W=I=&-H("AS8RT^861A
M<'1E<E]C;F8@)B!!7T-.1E]-141)05]465!%*2!["D!`("TQ,S`W+#$Q("LQ
M,S(V+#$Q($!`"B!["B`@("`@<W1R=6-T(&-S:6YT<E]L:7-T("II;G1R.PH@
M"BT@("`@9F]R("AI;G1R/6-S:6YT<E]H96%D.R!I;G1R.R!I;G1R/6EN='(M
M/FYE>'0I('L*+0D@("`@:68@*&EN='(M/G5N:70@/3T@=6YI="D**R`@("!F
M;W(@*&EN='(]8W-I;G1R7VAE860[(&EN='([(&EN='(]:6YT<BT^;F5X="D*
M*PD@("`@:68@*&EN='(M/G5N:70@/3T@=6YI="D@>PH@"0EC<VEN=')?<V,H
M:6YT<BT^<V,L('5N:70I.PH@"0EB<F5A:SL*+0E]"BL)("`@('T*('T*(`H@
M<W1A=&EC(&-H87(@*@I`0"`M,3,W."PW("LQ,SDW+#@@0$`*("`@("!I9B`H
M(7-C*2!R971U<FX["B`*("`@("!B>F5R;RAS8RP@<VEZ96]F("IS8RD["BT@
M("`@:68@*&-S7V-S.#EX,%]P<F]B92AS8RP@)FER<2P@)F1R<2P@:6]B87-E
M+"!U;FET+"!F;&%G<RD@/3T@,`HK("`@(&EF("@H9&5V+3YI9%]A;&EV92`]
M(`HK"2!C<U]C<S@Y>#!?<')O8F4H<V,L("9I<G$L("9D<G$L(&EO8F%S92P@
M=6YI="P@9FQA9W,I*2`]/2`P"B`)?'P@8W-?871T86-H*'-C+"!U;FET+"!F
M;&%G<RD@/3T@,"D@>PH@"2`@("!F<F5E*'-C+"!-7T1%5D)51BD["B`@("`@
M?2!E;'-E('L*0$`@+3$S.3$L-B`K,30Q,2PV($!`"B`)"7!R:6YT9B@B9F%I
M;&5D('1O('!N<"!C87)D('!A<F%M971A<G-<;B(I.PH@"7T*("`@("!]"BT@
M("`@8W-I;G1R7W!N<%]A9&0H<V,L(&1E=BT^:61?=6YI="D["BL@("`@8W-I
M;G1R7W!N<%]A9&0H<V,L(&1E=BT^:61?:60I.PH@?0H@(V5N9&EF("\J($Y0
&3E`@*B\*
`
end


>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19990505083508.304E215301>