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

To change your MAC address, there can not be a MAC address predefined in
U-Boot. To ensure that this does not occur, check your
include/configs/<board_name>.h file, and check to see that the following
settings are _not_ or commented out there.

#define HARDCODE_MAC			1
#define CONFIG_ETHADDR			02:80:ad:20:31:b8

The purpose of HARDCODE_MAC is to hardcode the MAC address in software,
(not what we want), or to preset it to 02:80:ad:20:31:b8 (not what we
want either).

You can check this in a running U-Boot, by doing a power cycle, then
before U-Boot tries to do any networking, running the 'printenv' command

  BOOT> printenv

  ethaddr=02:80:ad:20:31:b8

If you see the 'ethaddr' variable show up, like the above, you need to
recompile U-Boot, with the above settings commented out of the
include/configs/<board_name>.h file.

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 environental variable	       <- can not change, without
					  resetting board/U-Boot
LAN91C111 Registers		       <- volitle
LAN91C111 EEPROM		       <- Non Volitle

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
