[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?