Linksys EtherFast 10/100 (3'rd rev.) and collisions.

Guido Classen classeng@fh-trier.de
Wed Jul 22 10:20:44 1998


John G. wrote:

> Hello, I have a Linksys EtherFast 10/100 (the 3'rd rev.--the one with
> the Linksys logo written on it; I'm using tulip 0.89H).  My problem is,
> occasionally when I boot the computer the card starts causing bursts of
> collisions, and flooding the syslogs with the following:
>
> Jul 17 17:24:27 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0186c000.
> Jul 17 17:24:30 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0042c000.
> Jul 17 17:24:33 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0186c000.
> Jul 17 17:24:36 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0042c000.
>
> I think the problem is the driver isn't finding the MII transceiver in
> these instances, but I'm open to other suggestions and/or patches.
>
> General info:
>
> tulip.c   0.89H
> kernel    2.0.34
> distro    RH 5.1
>
> /etc/conf.modules:  (I've also tried MII 10baseT, which might cause the
> problem to be a little more likely to occur, but not by much)
>
> alias           net-pf-4        off     # IPX
> alias           net-pf-5        off     # appletalk
>
> alias eth0 tulip
> # options       tulip           options=9 debug=1       # MII 10baseT
> options         tulip           options=12 debug=1      # 10baseT
> # options       tulip           options=3 debug=1       # 100baseT
> # options       tulip           options=4 debug=1       # 10baseT-FD
> # options       tulip           options=5 debug=1       # 100baseT-FD
>
> Syslogs when there are other machines on the network and things don't
> work:
>
> Jul 17 17:24:18 john kernel: tulip.c:v0.89H 5/23/98
> becker@cesdis.gsfc.nasa.gov
> Jul 17 17:24:18 john kernel: eth0: Lite-On 82c168 PNIC at 0xdf00, 00 a0
> cc 20 9e 30, IRQ 10.
> Jul 17 17:24:19 john named[346]: starting.  named 4.9.7-REL Tue Jun 30
> 15:58:21 EDT 1998
> ^Iroot@porky.redhat.com:/usr/src/bs/BUILD/bind-4.9.7/named
> Jul 17 17:24:19 john named[346]: cache zone "" loaded (serial 0)
> Jul 17 17:24:19 john named[346]: primary zone "0.0.127.in-addr.arpa"
> loaded (serial 1997022700)
> Jul 17 17:24:19 john named[347]: Ready to answer queries.
> Jul 17 17:24:19 john named[347]: sysquery: sendto([198.32.64.12].53):
> Network is unreachable
> Jul 17 17:24:21 john kernel: CSLIP: code copyright 1989 Regents of the
> University of California
> Jul 17 17:24:21 john kernel: SLIP: version 0.8.4-NET3.019-NEWTTY-MODULAR
> (dynamic channels, max=256).
> Jul 17 17:24:21 john kernel: SLIP linefill/keepalive option.
> Jul 17 17:24:21 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 01860000.
> Jul 17 17:24:23 john sendmail[417]: starting daemon (8.8.7):
> SMTP+queueing@01:00:00
> Jul 17 17:24:24 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0042c000.
> Jul 17 17:24:27 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0186c000.
> Jul 17 17:24:30 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0042c000.
> Jul 17 17:24:33 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0186c000.
> Jul 17 17:24:36 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0042c000.
> Jul 17 17:24:39 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0186c000.
> Jul 17 17:24:42 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0042c000.
> Jul 17 17:24:45 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0186c000.
> Jul 17 17:24:48 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0042c000.
> Jul 17 17:24:51 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 0186c000.
>
> Syslogs when I'm the only machine on the network and when things don't
> work
> (note the absence of 'c' in 01860000 and 0042000 as opposed to 0186c000
> and 0042c000 in all change notices after the first):
>
> Jul 18 11:34:51 john kernel: tulip.c:v0.89H 5/23/98
> becker@cesdis.gsfc.nasa.gov
> Jul 18 11:34:51 john kernel: eth0: Lite-On 82c168 PNIC at 0xdf00, 00 a0
> cc 20 9e 30, IRQ 10.
> Jul 18 11:34:52 john named[346]: starting.  named 4.9.7-REL Tue Jun 30
> 15:58:21 EDT 1998
> ^Iroot@porky.redhat.com:/usr/src/bs/BUILD/bind-4.9.7/named
> Jul 18 11:34:52 john named[346]: cache zone "" loaded (serial 0)
> Jul 18 11:34:52 john named[346]: primary zone "0.0.127.in-addr.arpa"
> loaded (serial 1997022700)
> Jul 18 11:34:52 john named[347]: Ready to answer queries.
> Jul 18 11:34:52 john named[347]: sysquery: sendto([128.9.0.107].53):
> Network is unreachable
> Jul 18 11:34:54 john kernel: CSLIP: code copyright 1989 Regents of the
> University of California
> Jul 18 11:34:54 john kernel: SLIP: version 0.8.4-NET3.019-NEWTTY-MODULAR
> (dynamic channels, max=256).
> Jul 18 11:34:54 john kernel: SLIP linefill/keepalive option.
> Jul 18 11:34:54 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 01860000.
> Jul 18 11:34:55 john sendmail[417]: starting daemon (8.8.7):
> SMTP+queueing@01:00:00
> Jul 18 11:34:57 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 00420000.
> Jul 18 11:35:00 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 01860000.
> Jul 18 11:35:03 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 00420000.
> Jul 18 11:35:06 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 01860000.
> Jul 18 11:35:09 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 00420000.
> Jul 18 11:35:12 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 01860000.
> Jul 18 11:35:15 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 00420000.
> Jul 18 11:35:18 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 01860000.
>
> Syslogs when things work correctly:
>
> Jul 18 11:02:31 john kernel: tulip.c:v0.89H 5/23/98
> becker@cesdis.gsfc.nasa.gov
> Jul 18 11:02:31 john kernel: eth0: Lite-On 82c168 PNIC at 0xdf00, 00 a0
> cc 20 9e 30, IRQ 10.
> Jul 18 11:02:31 john kernel: eth0:  MII transceiver found at MDIO
> address 1, config 0000 status 7829.
> Jul 18 11:02:31 john kernel: eth0:  Advertising 01e1 on PHY 1,
> previously advertising 6100.
> Jul 18 11:02:32 john named[346]: starting.  named 4.9.7-REL Tue Jun 30
> 15:58:21 EDT 1998
> ^Iroot@porky.redhat.com:/usr/src/bs/BUILD/bind-4.9.7/named
> Jul 18 11:02:32 john named[346]: cache zone "" loaded (serial 0)
> Jul 18 11:02:32 john named[346]: primary zone "0.0.127.in-addr.arpa"
> loaded (serial 1997022700)
> Jul 18 11:02:32 john named[347]: Ready to answer queries.
> Jul 18 11:02:32 john named[347]: sysquery: sendto([128.8.10.90].53):
> Network is unreachable
> Jul 18 11:02:34 john kernel: CSLIP: code copyright 1989 Regents of the
> University of California
> Jul 18 11:02:34 john kernel: SLIP: version 0.8.4-NET3.019-NEWTTY-MODULAR
> (dynamic channels, max=256).
> Jul 18 11:02:34 john kernel: SLIP linefill/keepalive option.
> Jul 18 11:02:34 john kernel: eth0: Changing PNIC configuration to
> half-duplex, CSR6 816e0000.
> Jul 18 11:02:36 john sendmail[417]: starting daemon (8.8.7):
> SMTP+queueing@01:00:00
>
> --
> John G.  jmich@iname.com
>
> "we build confusing systems with nonfunctioning or poor quality drivers"
>  -- Jim Allchin, a senior vice president of Microsoft, WinHEC 98
> (borrowed)



 Hello John,

I had a similar problem with my LightOn PNIC 82c168 Card
I had patched tulip.c v89h as follows and everything worked fine.

insert in function tulip_open() at line 1339 after  "tp->cur_tx++; }"
this:
 if (tp->chip_id == LC82C168)
  outl(0x21, ioaddr + CSR15);

I have changed the function mdio_read() from:
  while (--i > 0)
     if ( ! ((retval = inl(ioaddr + 0xA0)) & 0x80000000))
     return retval & 0xffff;
to:
  while (--i > 0)
   if ( ! (inl(ioaddr + 0xA0) & 0x80000000)) {
    udelay(1000);
     return inl(ioaddr + 0xA0) & 0xffff;
   }

and corresponding then function mdio_write() from:

  outl(cmd, ioaddr + 0xA0);
  do
  if ( ! (inl(ioaddr + 0xA0) & 0x80000000))
     break;
  while (--i > 0);
  return;

to:

  outl(cmd, ioaddr + 0xA0);
  do
   if ( ! (inl(ioaddr + 0xA0) & 0x80000000))  {
    udelay(1000);
    break;
   }
   while (--i > 0);
  return;

Without the udelay(1000) the Myson MII wouldn't be detectet correctly by
the driver and the driver don't work in most cases

Guido Classen