| ------------------------------------------------------------------------ | |
| 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 |