Wind River SBC8641D reference board
===========================

Created 06/14/2007 Joe Hamman
Copyright 2007, Embedded Specialties, Inc.
Copyright 2007 Wind River Systems, Inc.
-----------------------------

1. Building U-Boot
------------------
The SBC8641D code is known to build using ELDK 4.1.

    $ make sbc8641d_config
    Configuring for sbc8641d board...

    $ make


2. Switch and Jumper Settings
-----------------------------
All Jumpers & Switches are in their default positions.  Please refer to
the board documentation for details.  Some settings control CPU voltages
and settings may change with board revisions.

3. Known limitations
--------------------
PCI:
	The PCI command may hang if no boards are present in either slot.

4. Reflashing U-Boot
--------------------
The board has two independent flash devices which can be used for dual
booting, or for U-Boot backup and recovery.  A two pin jumper on the
three pin JP10 determines which device is attached to /CS0 line.

Assuming one device has a functional U-Boot, and the other device has
a recently installed non-functional image, to perform a recovery from
that non-functional image goes essentially as follows:

a) power down the board and jumper JP10 to select the functional image.
b) power on the board and let it get to U-Boot prompt.
c) while on, using static precautions, move JP10 back to the failed image.
d) use "md fff00000" to confirm you are looking at the failed image
e) turn off write protect with "prot off all"
f) get new image, i.e. "tftp 200000 /somepath/u-boot.bin"
g) erase failed image: "erase FFF00000 FFF5FFFF"
h) copy in new image: "cp.b 200000 FFF00000 60000"
i) ensure new image is written: "md fff00000"
k) power cycle the board and confirm new image works.
