| ------------------------------------------------------------------------ | 
 | A3M071 board support | 
 | ------------------------------------------------------------------------ | 
 |  | 
 |  | 
 | SPL NOR flash support: | 
 | ---------------------- | 
 | To boot fast into the OS (Linux), this board port integrates the SPL | 
 | framework. This means, that a special, stripped-down version of | 
 | U-Boot runs in the beginning. In the case of the A3M071 board, this | 
 | SPL U-Boot version is less than 16 KiB big. This SPL U-Boot can either | 
 | boot the OS (Linux) or a "real", full-blown U-Boot. This detection | 
 | on whether to boot Linux or U-Boot is done by using the "boot_os" | 
 | environment variable. If "boot_os" is set to "yes", Linux will be | 
 | loaded and booted from the SPL U-Boot version. Otherwise, the | 
 | full-blown U-Boot version will be loaded and run. | 
 |  | 
 | Enabling Linux booting: | 
 | ----------------------- | 
 | From U-Boot: | 
 | => setenv boot_os yes | 
 | => saveenv | 
 |  | 
 | From Linux: | 
 | $ fw_setenv boot_os yes | 
 |  | 
 | Enabling U-Boot booting: | 
 | ------------------------ | 
 | From U-Boot: | 
 | => setenv boot_os no | 
 | => saveenv | 
 |  | 
 | From Linux: | 
 | $ fw_setenv boot_os no | 
 |  | 
 |  | 
 | Preparing Linux image(s) for booting from SPL U-Boot: | 
 | ----------------------------------------------------- | 
 | To boot the Linux kernel from the SPL, the DT blob (fdt) needs to get | 
 | prepard/patched first. U-Boot usually inserts some dynamic values into | 
 | the DT binary (blob), e.g. autodetected memory size, MAC addresses, | 
 | clocks speeds etc. To generate this patched DT blob, you can use | 
 | the following command: | 
 |  | 
 | 1. Load fdt blob to SDRAM: | 
 | => tftp 1800000 a3m071/a3m071.dtb | 
 |  | 
 | 2. Set bootargs as desired for Linux booting (e.g. flash_mtd): | 
 | => run mtdargs addip2 addtty | 
 |  | 
 | 3. Use "fdt" commands to patch the DT blob: | 
 | => fdt addr 1800000 | 
 | => fdt boardsetup | 
 | => fdt chosen | 
 |  | 
 | 4. Display patched DT blob (optional): | 
 | => fdt print | 
 |  | 
 | 5. Save fdt to NOR flash: | 
 | => erase fc180000 fc07ffff | 
 | => cp.b 1800000 fc180000 10000 | 
 |  | 
 | All this can be integrated into an environment command: | 
 | => setenv upd_fdt 'tftp 1800000 a3m071/a3m071.dtb;run mtdargs addip addtty; \ | 
 | 	fdt addr 1800000;fdt boardsetup;fdt chosen;erase fc180000 fc07ffff; \ | 
 | 	cp.b 1800000 fc180000 10000' | 
 | => saveenv | 
 |  | 
 | After this, only "run upd_fdt" needs to get called to load, patch | 
 | and save the DT blob into NOR flash. | 
 |  | 
 | Additionally, the Linux kernel image has to be saved uncompressed in | 
 | its uImage file (and not gzip compressed). This can be done with this | 
 | command: | 
 |  | 
 | $ mkimage -A ppc -O linux -T kernel -C none -a 0 -e 0 \ | 
 | 	-n "Linux Kernel Image" -d vmlinux.bin uImage.uncompressed | 
 |  | 
 | ------------------------------------------------------------------------ | 
 | Stefan Roese, 2012-08-23 |