If you already followed the i.MX31ADS Compiling Uboot steps or got a compiled U-boot image, copy u-boot.bin to /tftpboot:
$ cp u-boot.bin /tftpboot
If you have RedBoot on your board follow the "Installing RedBoot using U-Boot", but if you already have been installed U-Boot and are just installing a new version jump to "Installing U-Boot using U-Boot".
Load the U-boot image to board RAM:
RedBoot> load -v -r -b 0x100000 /tftpboot/u-boot.bin -h 10.29.244.27
Where:
0x100000 is the memory position where the firmware image will be downloaded;
10.29.244.27 is your host IP which is running the TFTP server.
Erase the Flash:
RedBoot> fis erase -f 0xA0000000 -l 0x00040000
To make sure about what area you should erase, perform the fis list command and compare the areas
Write the image to Flash:
RedBoot> fis write -f 0xA0000000 -b 0x100000 -l 0x00040000
Reset the board:
RedBoot> reset
You should see something like this:
U-Boot 1.3.3 (May 26 2008 - 11:19:43)
CPU: Freescale i.MX31 at 531 MHz
Board: MX31ADS
DRAM: 128 MB
Flash: 32 MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
=>
First upload the U-Boot firmware using Network (Transferring file over network ) or Serial (Transferring File Over Serial)
This is a common serial transfer output:
=> loady
## Ready for binary (ymodem) download to 0x80800000 at 115200 bps...
CCmode, 1359(SOH)/0(STX)/0(CAN) packets, 9 retries
## Total Size = 0x0002a388 = 172936 Bytes
Unprotect the bootloader flash area:
protect off A0000000 A003FFFF
Erase the flash blocks:
erase A0000000 A003FFFF
Copy from RAM to Flash: If firmware has been thansfered over serial:
cp.b 80800000 A0000000 2a388
If firmware has been transfered over tftp:
cp.b 100000 A0000000 2a388
To do that you need to compile U-Boot with this define:
#define CONFIG_SKIP_LOWLEVEL_INIT 1
Then enter in GDB and execute:
(arm-gdb) restore u-boot.bin binary 0x87f00000
Restoring binary file u-boot.bin into memory (0x87f00000 to 0x87f2c790)
(arm-gdb) set $pc = 0x87f00000
(arm-gdb) c
You will see U-Boot starting in the serial console. Then compile a new U-Boot without the CONFIG_SKIP_LOWLEVEL_INIT and follow the Installing U-Boot using U-Boot to install U-Boot in the flash.
losh> ifconfig sm0 dhcp
losh> load raw 0x81000000 115764 /tftp/10.29.244.27:u-boot.bin.lite
losh> exec 0x81000000 -
I'm trying to run U-boot with starting address in middle of DDR RAM, instead of flash ROM. It starts to run from 0xA0100000 just fine, but somewhere in the relocation code (crt0_64.S) it gets a Sync exception. I'm going to try the below option tomorrow, hopefully disabling the remap might help.
#define CONFIG_SKIP_LOWLEVEL_INIT 1