[U-Boot] [PATCH 2/2] am335x_evm: Update, document Falcon Mode support
Tom Rini
trini at ti.com
Wed Jul 3 22:09:23 CEST 2013
- Update Falcon Mode support so that the offsets used in eMMC (or a raw
SD card) would allow for enough room for a device tree to be used
rather than an ATAGS blob as well as environment to be saved in eMMC.
- Add board/ti/am335x/README which covers a few basic items, and
provides an example of Falcon Mode for eMMC, FAT SD card and NAND.
- Round up the size of u-boot.img.raw to match these use-cases, and add
the entries for Falcon Mode to DFU for eMMC, FAT SD cards and NAND
- Correct CONFIG_CMD_SPL_WRITE_SIZE size (eraseblocks are 128KiB)
Signed-off-by: Tom Rini <trini at ti.com>
---
board/ti/am335x/README | 123 ++++++++++++++++++++++++++++++++++++++++++
include/configs/am335x_evm.h | 19 ++++---
2 files changed, 135 insertions(+), 7 deletions(-)
create mode 100644 board/ti/am335x/README
diff --git a/board/ti/am335x/README b/board/ti/am335x/README
new file mode 100644
index 0000000..565f18c
--- /dev/null
+++ b/board/ti/am335x/README
@@ -0,0 +1,123 @@
+Summary
+=======
+
+This document covers various features of the 'am335x_evm' build, and some of
+the related build targets (am335x_evm_uartN, etc).
+
+Hardware
+========
+
+The binary produced by this board supports, based on parsing of the EEPROM
+doumentd in TI's reference designs:
+- AM335x GP EVM
+- AM335x EVM SK
+- Beaglebone White
+- Beaglebone Black
+
+Falcon Mode
+===========
+
+The default build includes "Falcon Mode" (see doc/README.falcon) via NAND,
+eMMC (or raw SD cards) and FAT SD cards. Our default behavior currently is
+to read a 'c' on the console while in SPL at any point prior to loading the
+OS payload (so as soon as possible) to opt to booting full U-Boot. Also
+note that while one can program Falcon Mode "in place" great care needs to
+be taken by the user to not 'brick' their setup. As these are all eval
+boards with multiple boot methods, recovery should not be an issue in this
+worst-case however.
+
+Falcon Mode: eMMC
+=================
+
+The recommended layout in this case is:
+
+MMC BLOCKS |--------------------------------| LOCATION IN BYTES
+0x0000 - 0x007F : MBR or GPT table : 0x000000 - 0x020000
+0x0080 - 0x00FF : ARGS or FDT file : 0x010000 - 0x020000
+0x0100 - 0x01FF : SPL.backup1 (first copy used) : 0x020000 - 0x040000
+0x0200 - 0x02FF : SPL.backup2 (second copy used) : 0x040000 - 0x060000
+0x0300 - 0x06FF : U-Boot : 0x060000 - 0x0e0000
+0x0700 - 0x08FF : U-Boot Env + Redundant : 0x0e0000 - 0x120000
+0x0900 - 0x28FF : Kernel : 0x120000 - 0x520000
+
+Note that when we run 'spl export' it will prepare to boot the kernel.
+This includes relocation of the uImage from where we loaded it to the entry
+point defined in the head. As these locations overlap by default, it would
+leave us with an image that if written to MMC will not boot, so instead of
+using the loadaddr variable we use 0x81000000 in the following example. In
+this example we are loading from the network, for simplicity, and assume a
+valid partition table already exists and 'mmc dev' has already been run to
+select the correct device. Also note that if you previously had a FAT
+partition (such as on a Beaglebone Black) it is not enough to write garbage
+into the area, you must delete it from the partition table first.
+
+A further word of warning about using eMMC and partition tables. When
+working with SD cards we can get away with erasing small areas at a time,
+however on eMMC we must keep erases aligned to eraseblocks and thus the
+first erase we issue will erase the partition table. If you have an
+existing table you wish to re-use you must use 'mmc read' to save it. If
+you wish to create a new table, U-Boot supports (but this build does not
+enable) creating GPT-style tables. For more information about that see
+doc/README.gpt
+
+# Ensure are able to talk with this mmc device, erase most previous contents
+U-Boot # mmc rescan
+U-Boot # mmc erase 80 680
+U-Boot # tftp 81000000 am335x/MLO
+# Write to two of the backup locations ROM uses
+U-Boot # mmc write 81000000 100 100
+U-Boot # mmc write 81000000 200 100
+# Write U-Boot to the location set in the config
+U-Boot # tftp 81000000 am335x/u-boot.img
+U-Boot # mmc write 81000000 300 400
+# Load kernel and device tree into memory, perform export
+U-Boot # tftp 81000000 am335x/uImage
+U-Boot # run findfdt
+U-Boot # tftp ${fdtaddr} am335x/${fdtfile}
+U-Boot # run mmcargs
+U-Boot # spl export fdt 81000000 - ${fdtaddr}
+# Write the updated device tree to MMC
+U-Boot # mmc write ${fdtaddr} 80 80
+U-Boot # mmc erase 900 2000
+# Write the uImage to MMC
+U-Boot # mmc write 81000000 900 2000
+
+Falcon Mode: FAT SD cards
+=========================
+
+In this case the additional file is written to the filesystem. In this
+example we assume that the uImage and device tree to be used are already on
+the FAT filesystem (only the uImage MUST be for this to function
+afterwards) along with a Falcon Mode aware MLO and the FAT partition has
+already been created and marked bootable:
+
+U-Boot # mmc rescan
+# Load kernel and device tree into memory, perform export
+U-Boot # load mmc 0:1 ${loadaddr} uImage
+U-Boot # run findfdt
+U-Boot # load mmc 0:1 ${fdtaddr} ${fdtfile}
+U-Boot # run mmcargs
+U-Boot # spl export fdt ${loadaddr} - ${fdtaddr}
+
+This will print a number of lines and then end with something like:
+ Using Device Tree in place at 80f80000, end 80f85928
+ Using Device Tree in place at 80f80000, end 80f88928
+So then you:
+
+U-Boot # fatwrite mmc 0:1 0x80f80000 args 8928
+
+Falcon Mode: NAND
+=================
+
+In this case the additional data is written to another partition of the
+NAND. In this example we assume that the uImage and device tree to be are
+already located on the NAND somewhere (such as fileystem or mtd partition)
+along with a Falcon Mode aware MLO written to the correct locations for
+booting and mtdparts have been configured correctly for the board:
+
+U-Boot # nand read ${loadaddr} kernel
+U-Boot # load nand rootfs ${fdtaddr} /boot/am335x-evm.dtb
+U-Boot # run nandargs
+U-Boot # spl export fdt ${loadaddr} - ${fdtaddr}
+U-Boot # nand erase.part u-boot-spl-os
+U-Boot # nand write ${fdtaddr} u-boot-spl-os
diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
index c5a6d4b..0f12c75 100644
--- a/include/configs/am335x_evm.h
+++ b/include/configs/am335x_evm.h
@@ -238,7 +238,11 @@
"rootfs part 0 2;" \
"MLO fat 0 1;" \
"MLO.raw mmc 100 100;" \
- "u-boot.img.raw mmc 300 3C0;" \
+ "u-boot.img.raw mmc 300 400;" \
+ "spl-os-args.raw mmc 80 80;" \
+ "spl-os-image.raw mmc 900 2000;" \
+ "spl-os-args fat 0 1;" \
+ "spl-os-image fat 0 1;" \
"u-boot.img fat 0 1;" \
"uEnv.txt fat 0 1"
#define DFU_ALT_INFO_NAND \
@@ -247,8 +251,9 @@
"SPL.backup2 part 0 3;" \
"SPL.backup3 part 0 4;" \
"u-boot part 0 5;" \
- "kernel part 0 7;" \
- "rootfs part 0 8"
+ "u-boot-spl-os part 0 6;" \
+ "kernel part 0 8;" \
+ "rootfs part 0 9"
/* Physical Memory Map */
#define CONFIG_NR_DRAM_BANKS 1 /* 1 bank of DRAM */
@@ -332,14 +337,14 @@
#define CONFIG_SYS_SPL_ARGS_ADDR (PHYS_DRAM_1 + 0x100)
/* raw mmc */
-#define CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR 0x500 /* address 0xa0000 */
-#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR 0x8 /* address 0x1000 */
-#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS 8 /* 4KB */
+#define CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR 0x900 /* address 0x120000 */
+#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR 0x80 /* address 0x10000 */
+#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS 0x80 /* 64KiB */
/* nand */
#define CONFIG_CMD_SPL_NAND_OFS 0x240000 /* end of u-boot */
#define CONFIG_SYS_NAND_SPL_KERNEL_OFFS 0x280000
-#define CONFIG_CMD_SPL_WRITE_SIZE 0x1000
+#define CONFIG_CMD_SPL_WRITE_SIZE 0x2000
/* spl export command */
#define CONFIG_CMD_SPL
--
1.7.9.5
More information about the U-Boot
mailing list