Xilinx ML300 platform
=====================

0. Introduction
---------------

The Xilinx ML300 board is based on the Virtex-II Pro FPGA with
integrated AMCC PowerPC 405 core. The board is normally booted from
System ACE CF. U-Boot is then run out of main memory.

An FPGA is a configurable and thus very flexible device. To
accommodate for this flexibility this port of U-Boot includes the
required means to regenerate the drivers and configuration files if
you decide to change the hardware design. The required steps are
described below.


1. Requirements
---------------

To compile and run U-Boot on the Xilinx ML300 platform you need the
following items.

- A Xilinx ML300 platform (see http://www.xilinx.com/ml300)
- EDK and ISE development tools (shipping with ML300)
- Parallel4 cable (shipping with ML300)
- The EDK reference design for ML300. You can get this as design #6 from
  http://www.xilinx.com/ise/embedded/edk_examples.htm
- A BOOTP/TFTP server


2. Quick Start
--------------

To compile and run U-Boot on ML300 follow the steps below. Make sure
to consult the documentation for U-Boot, EDK, and the EDK reference
design for ML300 if you have any questions.

1. Implement the EDK reference design for ML300. You can use any of
   the project files, for example from a xygwin shell:
   $ xps -nw system_linux.xmp
   XPS% run init_bram
2. Configure and compile U-Boot. Change into the root directory of
   U-Boot and run:
   $ export CROSS_COMPILE=powerpc-eabi-
   $ make ml300_config
   $ make
3. Set up the ML300, connect the Parallel4 and the serial cable. Start
   a terminal on your host computer and set the communication
   parameters to 9600,8N1,no handshake.
4. Set up the BOOTP/TFTP server on your host machine. U-Boot is
   preconfigured to use a fixed HW MAC address of 00:0A:35:00:22:01.
5. Download the bitstream to the ML300.
6. Use XMD to download and run U-Boot on the ML300:
   $ xmd
   XMD% ppcconnect
   XMD% dow u-boot
   XMD% run

You can now make an ACE file out of bitstream and U-Boot:
   $ xmd genace.tcl -jprog -board ml300 -hw  \
     implementation/download.bit -elf u-boot -ace top.ace

Put the ACE file onto the MicroDrive, for example into xilinx/myace,
and reboot ML300.


3. Generating a Custom BSP for U-Boot
-------------------------------------

If you decide to change the EDK reference design for ML300 or if you
build a new design from scratch either with the Base System Builder in
XPS or all by hand you most likely will change the base addresses for
the Uart and the Ethernet peripheral. If you do so you will have two
options:

1. Edit boards/xilinx/ml300/xparameters.h to reflect the changes you
   made to your hardware.
2. Use the MLD technology provided by Xilinx Platform Studio to make
   the changes automatically. To do so go to the root directory of the
   EDK reference design for ML300. Copy the Linux project file and the
   Linux software configuration file:
   $ cp system_linux.xmp system_uboot.xmp
   $ cp system_linux.mss system_uboot.mss

   Edit system_uboot.xmp and and have it point to system_uboot.mss for
   the software configuration.

   Then, copy the sw_services directory in
   boards/xilinx/ml300/sw_services to the root directory of the EDK
   reference design for ML300.
   $ cp -R <uboot dir>/boards/xilinx/ml300/sw_services <edk dir>

   Modify system_uboot.mss. Look for the Linux library definition
   and change it to generate a BSP for U-Boot. An example, might look
   like this:

   BEGIN LIBRARY
    PARAMETER LIBRARY_NAME = uboot
    PARAMETER LIBRARY_VER = 1.00.a
    PARAMETER CONNECTED_PERIPHS = (opb_uart16550_0,opb_ethernet_0)
    PARAMETER TARGET_DIR = <uboot dir>
   END

   Now, you are ready to generate the Xilinx ML300 BSP for U-Boot:
   $ xps -nw system_uboot.xmp
   XPS% run libs

   If all goes well the new configuration has been copied into the
   right places within the U-Boot source tree. Recompile U-Boot and
   run it on the ML300.


4. ToDo
-------

- Add support for all other peripherals on ML300.
- Read the MAC address out of the IIC EEPROM.
- Store the bootargs in the IIC EEPROM.


5. References
-------------

ML300:			http://www.xilinx.com/ml300
EDK:			http://www.xilinx.com/edk
ISE:			http://www.xilinx.com/ise
Reference Design:	http://www.xilinx.com/ise/embedded/edk_examples.htm