| ------------------------------------------------------------------------ |
| 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 fc060000 fc07ffff |
| => cp.b 1800000 fc060000 10000 |
| |
| All this can be integrated into an environment command: |
| => setenv upd_fdt 'tftp 1800000 a3m071/a3m071.dtb;run mtdargs addip2 addtty; \ |
| fdt addr 1800000;fdt boardsetup;fdt chosen;erase fc060000 fc07ffff; \ |
| cp.b 1800000 fc060000 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 |