[tulip] tulip-diag updating EEPROM on Osicom

Edmond E. Shwayri eshwayri@nc.rr.com
Fri Jan 10 08:20:01 2003


I ran into an interesting "problem" and I was hoping someone would have an 
answer.  First the history :

I have an Osicom 4 port card.  I have used the card in Linux for a few 
years now.  It has worked well.   6 months ago I hooked up a hub to one of 
the Osicom ports and I found that the "Autosense" wasn't working 
right.  Since the hub is un-managed I decided to change the setting on the 
Osicom.  Using tulip-diag I changed the media from 800 to 203 for 3 of the 
ports - I forget why I left the fourth alone.  It worked as long as the hub 
was turned on AFTER the Osicom.  It was irritating so a few months later I 
got a managed Cisco switch (already ahve one) and it worked fine.  I didn't 
bother to switch the eeprom back to 800 since everything was working fine.

Recently I decided to upgrade the computer from an old lowly Pentium to a 
new dual AMD.  For maintenance I decided I would also install Windows 2000 
in a dual boot.  When I inserted the Osicom card, Windows detected all 4 
ports and installed drivers.  While all 4 ports were detected, only one was 
marked as working.  The others had the "this device can't be started" and 
the yellow bang.  I noticed that the one port that it was happy with was 
the one port I had NOT changed with tulip-diag.  I booted into Linux and 
asked tulip-diag to dump out the eeprom for the 4 ports.  The port that was 
working looked like this :

tulip-diag.c:v2.09 1/28/2002 Donald Becker (becker@scyld.com)
  http://www.scyld.com/diag/index.html
Index #2: Found a Digital DS21140 Tulip adapter at 0xa400.
  Port selection is 10mpbs-serial, half-duplex.
  Transmit stopped, Receive stopped, half-duplex.
   The Rx process state is 'Stopped'.
   The Tx process state is 'Stopped'.
   The transmit threshold is 72.
EEPROM 64 words, 6 address bits.
PCI Subsystem IDs, vendor 0000, device 0000.
CardBus Information Structure at offset 00000000.
Ethernet MAC Station Address 00:00:BC:11:11:0A.
EEPROM transceiver/media description table.
Leaf node at offset 30, default media type 0800 (Autosense).
  CSR12 direction setting bits 0x0f.
  4 transceiver description blocks:
   21140 Non-MII transceiver for media 0 (10baseT).
    CSR12 control port setting 0x01, command 00 0x8e.
    Media detection by looking for a 0 on bit 7 of the CSR12 control port.
   21140 Non-MII transceiver for media 3 (100baseTx).
    CSR12 control port setting 0x01, command 00 0x6d.
    Media detection by looking for a 1 on bit 6 of the CSR12 control port.
   21140 Non-MII transceiver for media 4 (10baseT-Full Duplex).
    CSR12 control port setting 0x09, command 00 0x8e.
    Media detection by looking for a 0 on bit 7 of the CSR12 control port.
   21140 Non-MII transceiver for media 5 (100baseTx Full Duplex).
    CSR12 control port setting 0x01, command 00 0x6d.
    Media detection by looking for a 1 on bit 6 of the CSR12 control port.
EEPROM contents (64 words):
0x00:  0000 0000 0000 0000 0000 0000 0000 0000
0x08:  0000 0101 0000 11bc 0a11 1e00 0000 0800
0x10:  040f 0100 008e 0103 006d 0904 008e 0105
0x18:  006d 0100 0000 0000 3412 4000 3412 4000
0x20:  0000 0000 0000 0000 0000 0000 0000 0000
0x28:  0000 0000 0000 0000 0000 0000 0000 0000
0x30:  0000 0000 0000 0000 0000 0000 0000 0000
0x38:  0000 0000 0000 0000 0000 0000 0000 2d5d
  ID block CRC 0xe3 (vs. 00).
   Full contents CRC 0x2d5d (read as 0x2d5d).


The one port that was not working looked like :

tulip-diag.c:v2.09 1/28/2002 Donald Becker (becker@scyld.com)
  http://www.scyld.com/diag/index.html
Index #1: Found a Digital DS21140 Tulip adapter at 0xa000.
  Port selection is 10mpbs-serial, half-duplex.
  Transmit stopped, Receive stopped, half-duplex.
   The Rx process state is 'Stopped'.
   The Tx process state is 'Stopped'.
   The transmit threshold is 72.
EEPROM 64 words, 6 address bits.
PCI Subsystem IDs, vendor 0000, device 0000.
CardBus Information Structure at offset 00000000.
Ethernet MAC Station Address 00:00:BC:11:11:09.
EEPROM transceiver/media description table.
Leaf node at offset 30, default media type 0203 (100baseTx).
  CSR12 direction setting bits 0x0f.
  4 transceiver description blocks:
   21140 Non-MII transceiver for media 0 (10baseT).
    CSR12 control port setting 0x01, command 00 0x8e.
    Media detection by looking for a 0 on bit 7 of the CSR12 control port.
   21140 Non-MII transceiver for media 3 (100baseTx).
    CSR12 control port setting 0x01, command 00 0x6d.
    Media detection by looking for a 1 on bit 6 of the CSR12 control port.
   21140 Non-MII transceiver for media 4 (10baseT-Full Duplex).
    CSR12 control port setting 0x09, command 00 0x8e.
    Media detection by looking for a 0 on bit 7 of the CSR12 control port.
   21140 Non-MII transceiver for media 5 (100baseTx Full Duplex).
    CSR12 control port setting 0x01, command 00 0x6d.
    Media detection by looking for a 1 on bit 6 of the CSR12 control port.
EEPROM contents (64 words):
0x00:  0000 0000 0000 0000 0000 0000 0000 0000
0x08:  0000 0101 0000 11bc 0911 1e00 0000 0203
0x10:  040f 0100 008e 0103 006d 0904 008e 0105
0x18:  006d 0100 0000 0000 3412 4000 3412 4000
0x20:  0000 0000 0000 0000 0000 0000 0000 0000
0x28:  0000 0000 0000 0000 0000 0000 0000 0000
0x30:  0000 0000 0000 0000 0000 0000 0000 0000
0x38:  0000 0000 0000 0000 0000 0000 0000 bb5d
  ID block CRC 0xe3 (vs. 00).
   Full contents CRC 0x29e0 (read as 0xbb5d).

So, I used tulip-diag and told that port to switch from 203 back 800 for 
media (its original setting before I played with it).  Once I did that the 
tulip-diag after the change was :

tulip-diag.c:v2.09 1/28/2002 Donald Becker (becker@scyld.com)
  http://www.scyld.com/diag/index.html
Index #1: Found a Digital DS21140 Tulip adapter at 0xa000.
  Port selection is 10mpbs-serial, half-duplex.
  Transmit stopped, Receive stopped, half-duplex.
   The Rx process state is 'Stopped'.
   The Tx process state is 'Stopped'.
   The transmit threshold is 72.
EEPROM 64 words, 6 address bits.
PCI Subsystem IDs, vendor 0000, device 0000.
CardBus Information Structure at offset 00000000.
Ethernet MAC Station Address 00:00:BC:11:11:09.
EEPROM transceiver/media description table.
Leaf node at offset 30, default media type 0800 (Autosense).
  CSR12 direction setting bits 0x0f.
  4 transceiver description blocks:
   21140 Non-MII transceiver for media 0 (10baseT).
    CSR12 control port setting 0x01, command 00 0x8e.
    Media detection by looking for a 0 on bit 7 of the CSR12 control port.
   21140 Non-MII transceiver for media 3 (100baseTx).
    CSR12 control port setting 0x01, command 00 0x6d.
    Media detection by looking for a 1 on bit 6 of the CSR12 control port.
   21140 Non-MII transceiver for media 4 (10baseT-Full Duplex).
    CSR12 control port setting 0x09, command 00 0x8e.
    Media detection by looking for a 0 on bit 7 of the CSR12 control port.
   21140 Non-MII transceiver for media 5 (100baseTx Full Duplex).
    CSR12 control port setting 0x01, command 00 0x6d.
    Media detection by looking for a 1 on bit 6 of the CSR12 control port.
EEPROM contents (64 words):
0x00:  0000 0000 0000 0000 0000 0000 0000 0000
0x08:  0000 0101 0000 11bc 0911 1e00 0000 0800
0x10:  040f 0100 008e 0103 006d 0904 008e 0105
0x18:  006d 0100 0000 0000 3412 4000 3412 4000
0x20:  0000 0000 0000 0000 0000 0000 0000 0000
0x28:  0000 0000 0000 0000 0000 0000 0000 0000
0x30:  0000 0000 0000 0000 0000 0000 0000 0000
0x38:  0000 0000 0000 0000 0000 0000 0000 bb5d
  ID block CRC 0xe3 (vs. 00).
   Full contents CRC 0xbb5d (read as 0xbb5d).

So, I rebooted into Windows and now I had two working ports instead of 
1.  I went back into Linux and changed the other 2 ports as well and now 
all 4 ports show up as working.  The question is why?  Could be the 
auto-sense / fixed media; however, what is more striking is the Full 
Contents CRC.
Before the switch back to the original 800 :
Full contents CRC 0x29e0 (read as 0xbb5d).
After the switch :
Full contents CRC 0xbb5d (read as 0xbb5d).
So, what it looks like is that tulip-diag doesn't change the CRC when it 
updates a setting.  The Windows driver could very well be looking at the 
CRC and saying, ooops corrupt eeprom - don't load port.  Isn't there any 
way to update CRC when one updates a setting?