This is the readme for the Das U-Boot standalone program smc91111

The main purpose of this is to manage MAC addresses on platforms
which include the SMC91111 integrated 10/100 MAC Phy, with attached
EEPROMs.


Contents:
------------------------
1. Ensuring U-Boot's MAC address can be set in hardware
2. Running the smc91111_eeprom program
3. Setting MAC addresses
4. Other things you can do with this
5. Things to be done.


1. Ensuring U-Boot's MAC address can be set in hardware
--------------------------------------------------------------------------

On the Internet - MAC addresses are very important. Short for Media
Access Control address, a hardware address that uniquely identifies
each node of a network. When things are not unique - bad things
can happen.  This is why U-Boot makes it difficult to change MAC
addresses.

To find out who has a MAC address, or to purchase MAC addresses, goto
the IEEE, at:
http://standards.ieee.org/regauth/oui/index.shtml

2. Running the smc91111_eeprom program
---------------------------------------------------------------------

After Uboot is compiled, there should be three files of interest:
-rwxr-xr-x    1		8806 2004-10-11 14:00 smc91111_eeprom	    <- ELF
-rwxr-xr-x    1		3440 2004-10-11 14:00 smc91111_eeprom.bin   <- BIN
-rwxr-xr-x    1		9524 2004-10-11 14:00 smc91111_eeprom.srec  <- SREC

if there is not, check the examples/Makefile, and ensure there is something
like for your architecture:

   ifeq ($(ARCH),blackfin)
   SREC	  += smc91111_eeprom.srec
   BIN	  += smc91111_eeprom.bin smc91111_eeprom
   endif

To load the files: there are two methods: a) serial or b) network. Since
it is not a good idea to start doing things on the network before the
MAC address is set, this example will do things over serial.

a) Loading the elf file via the serial port
--------------------------------------------
Loading the elf is very easy - just ensure that the location
you specify things to load as is not the load address specified
in the Makefile.

BOOT> loadb 0x1000000

## Ready for binary (kermit) download to 0x01000000 at 57600 bps...

(type CNTL-\ then C)
(Back at local machine)
----------------------------------------------------
Kermit>send ~/u-boot_1.1.1/examples/smc91111_eeprom
Kermit>connect

Connecting to /dev/ttyS0, speed 57600
 Escape character: Ctrl-\ (ASCII 28, FS): enabled
Type the escape character followed by C to get back,
or followed by ? to see other options.
----------------------------------------------------
## Total Size	   = 0x00002266 = 8806 Bytes
## Start Addr	   = 0x01000000

BOOT> bootelf 0x1000000

Loading .text @ 0x00001000 (3440 bytes)
## Starting application at 0x000010d8 ...

SMC91111>

b) Loading the binary file via the serial port
-----------------------------------------------
For many toolchains, the entry point is not the load point.
The Load point is a hard coded address from the
examples/Makefile. The entry point can be found by doing something
like:

  u-boot_1.1.1/examples> bfin-elf-objdump -d smc91111_eeprom |less

  smc91111_eeprom:     file format elf32-bfin

  Disassembly of section .text:

  00001000 <smc91111_eeprom-0xd8>:
      1000:
  000010d8 <smc91111_eeprom>:

You can see that the entry point (or the address that should be
jumped to is 0x10d8). This is also the same as the entry point
of the elf file.

Now we load it to the actual load location:

BOOT> loadb 0x1000

## Ready for binary (kermit) download to 0x00001000 at 57600 bps...

(Back at pinky.dsl-only.net)
----------------------------------------------------
Kermit>send /tftpboot/eeprom.bin
Kermit>connect

Connecting to /dev/ttyS0, speed 57600
 Escape character: Ctrl-\ (ASCII 28, FS): enabled
Type the escape character followed by C to get back,
or followed by ? to see other options.
----------------------------------------------------
## Total Size	   = 0x00000d70 = 3440 Bytes
## Start Addr	   = 0x00001000

BOOT> go 0x10D8

## Starting application at 0x000010D8 ...

SMC91111>

3. Setting MAC addresses
--------------------------------------------------------------------------

The MAC address can be stored in four locations:

-Boot environmental variable in Flash <- can not change, without
					  re-flashing U-Boot.
U-Boot environmental variable	       <- can not change, without
					  resetting board/U-Boot
LAN91C111 Registers		       <- volatile
LAN91C111 EEPROM		       <- Non-volatile

If you have not activated the network, and do not have a hardcoded
or pre-assigned MAC address in U-Boot, the environmental variables
should be blank, and allow you to set things one time.

To set the EEPROM MAC address to 12:34:56:78:9A:BC

SMC91111> W E 20 3412

Writing EEPROM register 20 with 3412
SMC91111> W E 21 7856

Writing EEPROM register 21 with 7856
SMC91111> W E 22 BC9A

Writing EEPROM register 22 with bc9a
EEPROM contents copied to MAC
SMC91111> P

Current MAC Address in SMSC91111 12:34:56:78:9a:bc
Current MAC Address in EEPROM	 12:34:56:78:9a:bc

(CNTRL-C to exit)
SMC91111> ## Application terminated, rc = 0x0

BOOT> reset
U-Boot 1.1.1 (gcc version: 3.3.3)
Release Version Beta released on Oct 10 2004 - 00:34:35
Blackfin support by LG Soft India
For further information please check this link http://www.blackfin.uclinux.org
BOOT> ping 192.168.0.4

Using MAC Address 12:34:56:78:9A:BC
host 192.168.0.4 is alive


4. Other things that you can do
--------------------------------------------------------------------------
After the stand alone application is running, there are a few options:
 - P : Print the MAC
 - D : Dump the LAN91C111 EEPROM contents
 - M : Dump the LAN91C111 MAC contents
 - C : Copies the MAC address from the EEPROM to the LAN91C111
 - W : Write a register in the EEPROM or in the MAC

SMC91111> P

Current MAC Address in SMSC91111 12:34:56:78:9a:bc
Current MAC Address in EEPROM	 12:34:56:78:9a:bc

SMC91111> D

IOS2-0	  000	  001	  002	  003	  004	  005	  006	  007
CONFIG 00:ffff 04:ffff 08:ffff 0c:ffff 10:ffff 14:ffff 18:ffff 1c:ffff
BASE   01:ffff 05:ffff 09:ffff 0d:ffff 11:ffff 15:ffff 19:ffff 1d:ffff
       02:ffff 06:ffff 0a:ffff 0e:0020 12:ffff 16:ffff 1a:ffff 1e:ffff
       03:ffff 07:ffff 0b:ffff 0f:ffff 13:ffff 17:ffff 1b:ffff 1f:ffff

20:3412 21:7856 22:bc9a 23:ffff 24:ffff 25:ffff 26:ffff 27:ffff
28:ffff 29:ffff 2a:ffff 2b:ffff 2c:ffff 2d:ffff 2e:ffff 2f:ffff
30:ffff 31:ffff 32:ffff 33:ffff 34:ffff 35:ffff 36:ffff 37:ffff
38:ffff 39:ffff 3a:ffff 3b:ffff 3c:ffff 3d:ffff 3e:ffff 3f:ffff

SMC91111> M

    Bank0 Bank1 Bank2 Bank3
00  0000  a0b1	3332  0000
02  0000  1801	8000  0000
04  0000  3412	8080  0000
06  0000  7856	003f  0000
08  0404  bc9a	02df  3332
0a  0000  ffff	02df  3391
0c  0000  1214	0004  001f
0e  3300  3301	3302  3303

SMC91111> C

EEPROM contents copied to MAC

SMC91111> W E 2A ABCD

Writing EEPROM register 2a with abcd

SMC91111> W M 14 FF00

Writing MAC register bank 1, reg 04 with ff00
