Re: Re: [Etherboot-developers] 3C905CX-TXM flashing with cromutil hangs

Hans-Peter Jansen <[email protected]>
Newsgroups gmane.linux.drivers.vortex.devel
Message-ID <[email protected]>
Dear Donald,

pretty late follow up, sorry. On the bright side, my netbooted ramdisk 
rescue environment has pretty nice evolved 'til the last time...

On Friday 18 April 2003 18:18, Donald Becker wrote:
> On Fri, 18 Apr 2003, Hans-Peter Jansen wrote:
> >
> > > vortex-diag.c:v2.09 9/18/2002 Donald Becker ([email protected])
> > >  http://www.scyld.com/diag/index.html
> > > Index #1: Found a 3c905C Tornado 100baseTx adapter at 0xd800.
> > > Hmmm, no response to the ID command, trying again..
> > > ACKKK, this may not be a programmable Flash part!
> > > Unknown BIOS ROM ID 55 AA.
>
> This is a different style of flash part with variable sector sizes
> and a new command structure.
>
> I have updated libflash with code that may work with the new parts.
> Who has a board with a AM29F002BT or AM29F002BB that could try it
> out?

Done.

I have two different NICS, some labeled 3C905CX-TXM with a AM29F002BT
and some 3C905C-TX-M with a Atmel AT49BV512. While the latter could
be easily flashed with cromutil (will check vortex-diag soon), the 
former resisted insistently on any attempts :-(.

This is with your libflash v2.06 with AM29F002BT (-vB):

vortex-diag.c:v2.14 12/28/2002 Donald Becker ([email protected])
 http://www.scyld.com/diag/index.html
Index #1: Found a 3c905C Tornado 100baseTx adapter at 0xd000.
 Station address 00:0a:0d:d4:77:d7.
  Receive mode is 0x07: Normal unicast and all multicast.
 Indication enable is 06c6, interrupt enable is 0000.
 No interrupt sources are pending.
 Transceiver/media interfaces available:  100baseTx 10baseT.
Transceiver type in use:  Autonegotiate.
 MAC settings: full-duplex.
 Station address set to 00:0a:0d:d4:77:d7.
 Configuration options 0012.
Saved EEPROM settings of a 3Com Vortex/Boomerang:
 3Com Node Address 00:0A:0D:D4:77:D7 (used as a unique ID only).
 OEM Station address 00:0A:0D:D4:77:D7 (used as the ethernet address).
  Device ID 9200,  Manufacturer ID 6d50.
  Manufacture date (MM/DD/YYYY) 11/12/2001, division H, product SZ.
  No BIOS ROM is present.                   <- vortex-diag doesn't 
                                               recognize the flash ->
 Transceiver selection: Autonegotiate.
   Options: negotiated duplex, link beat required.
 PCI Subsystem IDs: Vendor 10b7 Device 1000.
 100baseTx 10baseT.
  Vortex format checksum is incorrect (06 vs. 10b7).
  Cyclone format checksum is incorrect (0x9c vs. 0x9d).
  Hurricane format checksum is incorrect (0xb5 vs. 0x9d).
 MII PHY found at address 24, status 782d.
 MII PHY 0 at #24 transceiver registers:
   3000 782d 0040 6177 05e1 45e1 0003 0000
   0000 0000 0000 0000 0000 0000 0000 0000
   1000 0301 0000 0000 0000 029d 0100 0000
   003f fd3e 0f00 ff40 002f 0000 80a0 000b.

Hmmm, no response to the ID command, trying again with '80/60'..
That did not work either, trying with '90/01'...

<!-- 90/01 is expected to work with this device, but it doesn't --!>

ACKKK, this may not be a programmable Flash part!
 BIOS ROM ID 55 AA, looking up vendor...
Unknown BIOS ROM ID 55 AA.
0x000: 55 aa 08 e9 bf 07 55 4c 44 52 00 00 05 03 00 00 U.....ULDR......
0x010: 00 00 e0 06 50 05 70 00 58 00 38 00 6d 00 30 04 ....P.p.X.8.m.0.
0x020: 00 00 00 10 e8 27 10 df c0 05 00 01 00 00 00 00 ................
0x030: 00 00 00 00 00 00 00 00 24 50 6e 50 01 02 00 00 .........PnP....
0x040: 00 de 00 00 00 00 c3 00 c8 00 02 00 00 14 00 00 ................
0x050: 00 00 49 03 00 00 00 00 50 43 49 52 b7 10 00 92 ..I.....PCIR....
0x060: 00 00 18 00 00 02 00 00 73 00 00 00 00 80 00 00 ........s.......
0x070: 55 4e 44 49 16 af 00 00 01 02 9a 03 00 08 38 38 UNDI..........88
0x080: a0 25 50 43 49 52 4d 42 41 20 32 02 00 00 00 00 ..PCIRMBA.2.....
0x090: 00 00 00 33 43 6f 6d 20 31 30 2f 31 30 30 20 45 ...3Com.10.100.E
0x0a0: 74 68 65 72 6e 65 74 20 4e 49 43 00 00 00 00 00 thernet.NIC.....

Consequently, -S ends up with an 8k image out of 256k. (expected)

As far, as I understand the code, the problem is the identification
of the device, which doesn't seem to respond on any of the three  
attempts made. <grr> 

According to 
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/21527d.pdf
p. 16, the command sequence seems to differ from other such devices, 
therefor I experimented with a specialized do_cmd():

static void do_am_cmd(long addr_ioaddr, long data_ioaddr, int cmd)
{
	flash_out(addr_ioaddr, data_ioaddr, 0x555, 0xAA);
	flash_out(addr_ioaddr, data_ioaddr, 0x2AA, 0x55);
	flash_out(addr_ioaddr, data_ioaddr, 0x555, cmd);
	/* Alternate command is simply
	   flash_out(addr_ioaddr, data_ioaddr, 0, cmd); */
}

in both, the first do_cmd() and the one in the 90/01 method in 
get_part_id() without success. Does 3com fiddle with any hardware 
protection here? But I doubt, that this would protect the id reading.
Am I on a lost track? What can I try next?

BTW, attached is a gcc3.3 compile fix for vortex-diag.c.

Best regards,
Pete
vortex-diag-gcc3.3.diff (text/x-diff, 3.3 KB)
--- vortex-diag.c.orig	2003-07-04 15:37:53.000000000 +0200
+++ vortex-diag.c	2003-07-04 15:37:56.000000000 +0200
@@ -39,44 +39,44 @@
 static char *usage_msg =
 "Usage: vortex-diag [-aDEefFgGhmPqrRtvVwW] [-p <IOport>] [-[AF] <media>]\n"
 "  For details and other options see http://www.scyld.com/diag/index.html\n";
 
 static const char long_usage_msg[] =
-"Usage: %s [-aDfrRvVw] [-AF <speed+duplex>] [-#<BoardNum>]
-
-   Show the internal state of a network adapter.
-
-   The common usage is
-      vortex-diag -aem
-
- Frequently used options are
-   -a  --show_all_registers	Print all registers.
-   -e  --show-eeprom	Dump EEPROM contents, \"-ee\" shows the details.
-   -m  --show_mii		Print the MII transceiver state
-					Using -mm monitors the link.
-   -f  --force		Perform operation, even on a running NIC.
-
- To operate on a single NIC, or one that hasn't been automatically found:
-   -#  --card_num	INDEX	Operate on the specified card index.
-   -p  --port-base	IOADDR	Assume an adapter at the specified I/O address.
-   -t  --chip-type	TYPE	Specify adapter type with '-p', use '-1' to list.
-
- To change the persistent EEPROM settings
-   -G  --parameters PARMS	Set adapter-specific parameters.
-   -H  --new-hwaddr 01:23:45:67:ab:cd
-        Set a new hardware station address.  Read the documentation first!
-   -w  --write-EEPROM	 Actually write the new settings into the EEPROM.
- To read and write the boot BIOS extension Flash ROM
-   -B       Show the first few bytes of the ROM
-   -L FILE  Load the Flash from FILE.
-   -S FILE  Store the Flash image to FILE.
-
-   -D  --debug
-   -v  --verbose	Report each action taken.
-   -V  --version	Emit version information.
-
-   -A  --advertise <speed|setting>  (See the mii-diag manual page.)
+"Usage: %s [-aDfrRvVw] [-AF <speed+duplex>] [-#<BoardNum>]\n\
+\n\
+   Show the internal state of a network adapter.\n\
+\n\
+   The common usage is\n\
+      vortex-diag -aem\n\
+\n\
+ Frequently used options are\n\
+   -a  --show_all_registers	Print all registers.\n\
+   -e  --show-eeprom	Dump EEPROM contents, \"-ee\" shows the details.\n\
+   -m  --show_mii		Print the MII transceiver state\n\
+					Using -mm monitors the link.\n\
+   -f  --force		Perform operation, even on a running NIC.\n\
+\n\
+ To operate on a single NIC, or one that hasn't been automatically found:\n\
+   -#  --card_num	INDEX	Operate on the specified card index.\n\
+   -p  --port-base	IOADDR	Assume an adapter at the specified I/O address.\n\
+   -t  --chip-type	TYPE	Specify adapter type with '-p', use '-1' to list.\n\
+\n\
+ To change the persistent EEPROM settings\n\
+   -G  --parameters PARMS	Set adapter-specific parameters.\n\
+   -H  --new-hwaddr 01:23:45:67:ab:cd\n\
+        Set a new hardware station address.  Read the documentation first!\n\
+   -w  --write-EEPROM	 Actually write the new settings into the EEPROM.\n\
+ To read and write the boot BIOS extension Flash ROM\n\
+   -B       Show the first few bytes of the ROM\n\
+   -L FILE  Load the Flash from FILE.\n\
+   -S FILE  Store the Flash image to FILE.\n\
+\n\
+   -D  --debug\n\
+   -v  --verbose	Report each action taken.\n\
+   -V  --version	Emit version information.\n\
+\n\
+   -A  --advertise <speed|setting>  (See the mii-diag manual page.)\n\
 ";
 
 #if ! defined(__OPTIMIZE__)
 #warning  You must compile this program with the correct options!
 #warning  See the last lines of the source file.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.