1 Summary 2 ======= 3 4 This document covers various features of the 'am335x_evm' build, and some of 5 the related build targets (am335x_evm_uartN, etc). 6 7 Hardware 8 ======== 9 10 The binary produced by this board supports, based on parsing of the EEPROM 11 documented in TI's reference designs: 12 - AM335x GP EVM 13 - AM335x EVM SK 14 - Beaglebone White 15 - Beaglebone Black 16 17 Customization 18 ============= 19 20 Given that all of the above boards are reference platforms (and the 21 Beaglebone platforms are OSHA), it is likely that this platform code and 22 configuration will be used as the basis of a custom platform. It is 23 worth noting that aside from things such as NAND or MMC only being 24 required if a custom platform makes use of these blocks, the following 25 are required, depending on design: 26 27 - GPIO is only required if DDR3 power is controlled in a way similar to 28 EVM SK 29 - SPI is only required for SPI flash, or exposing the SPI bus. 30 31 The following blocks are required: 32 - I2C, to talk with the PMIC and ensure that we do not run afoul of 33 errata 1.0.24. 34 35 When removing options as part of customization, 36 CONFIG_EXTRA_ENV_SETTINGS will need additional care to update for your 37 needs and to remove no longer relevant options as in some cases we 38 define additional text blocks (such as for NAND or DFU strings). Also 39 note that all of the SPL options are grouped together, rather than with 40 the IP blocks, so both areas will need their choices updated to reflect 41 the custom design. 42 43 NAND 44 ==== 45 46 The AM335x GP EVM ships with a 256MiB NAND available in most profiles. In 47 this example to program the NAND we assume that an SD card has been 48 inserted with the files to write in the first SD slot and that mtdparts 49 have been configured correctly for the board. All images are first loaded 50 into memory, then written to NAND. 51 52 Step-1: Building u-boot for NAND boot 53 Set following CONFIGxx options for NAND device. 54 CONFIG_SYS_NAND_PAGE_SIZE number of main bytes in NAND page 55 CONFIG_SYS_NAND_OOBSIZE number of OOB bytes in NAND page 56 CONFIG_SYS_NAND_BLOCK_SIZE number of bytes in NAND erase-block 57 CONFIG_SYS_NAND_ECCPOS ECC map for NAND page 58 CONFIG_NAND_OMAP_ECCSCHEME (refer doc/README.nand) 59 60 Step-2: Flashing NAND via MMC/SD 61 # select BOOTSEL to MMC/SD boot and boot from MMC/SD card 62 U-Boot # mmc rescan 63 # erase flash 64 U-Boot # nand erase.chip 65 U-Boot # env default -f -a 66 U-Boot # saveenv 67 # flash MLO. Redundant copies of MLO are kept for failsafe 68 U-Boot # load mmc 0 0x82000000 MLO 69 U-Boot # nand write 0x82000000 0x00000 0x20000 70 U-Boot # nand write 0x82000000 0x20000 0x20000 71 U-Boot # nand write 0x82000000 0x40000 0x20000 72 U-Boot # nand write 0x82000000 0x60000 0x20000 73 # flash u-boot.img 74 U-Boot # load mmc 0 0x82000000 u-boot.img 75 U-Boot # nand write 0x82000000 0x80000 0x60000 76 # flash kernel image 77 U-Boot # load mmc 0 0x82000000 uImage 78 U-Boot # nand write 0x82000000 ${nandsrcaddr} ${nandimgsize} 79 # flash filesystem image 80 U-Boot # load mmc 0 0x82000000 filesystem.img 81 U-Boot # nand write 0x82000000 ${loadaddress} 0x300000 82 83 Step-3: Set BOOTSEL pin to select NAND boot, and POR the device. 84 The device should boot from images flashed on NAND device. 85 86 NOR 87 === 88 89 The Beaglebone White can be equipped with a "memory cape" that in turn can 90 have a NOR module plugged into it. In this case it is then possible to 91 program and boot from NOR. Note that due to how U-Boot is designed we 92 must build a specific version of U-Boot that knows we have NOR flash. This 93 build is named 'am335x_evm_nor'. Further, we have a 'am335x_evm_norboot' 94 build that will assume that the environment is on NOR rather than NAND. In 95 the following example we assume that and SD card has been populated with 96 MLO and u-boot.img from a 'am335x_evm_nor' build and also contains the 97 'u-boot.bin' from a 'am335x_evm_norboot' build. When booting from NOR, a 98 binary must be written to the start of NOR, with no header or similar 99 prepended. In the following example we use a size of 512KiB (0x80000) 100 as that is how much space we set aside before the environment, as per 101 the config file. 102 103 U-Boot # mmc rescan 104 U-Boot # load mmc 0 ${loadaddr} u-boot.bin 105 U-Boot # protect off 08000000 +80000 106 U-Boot # erase 08000000 +80000 107 U-Boot # cp.b ${loadaddr} 08000000 ${filesize} 108 109 Falcon Mode 110 =========== 111 112 The default build includes "Falcon Mode" (see doc/README.falcon) via NAND, 113 eMMC (or raw SD cards) and FAT SD cards. Our default behavior currently is 114 to read a 'c' on the console while in SPL at any point prior to loading the 115 OS payload (so as soon as possible) to opt to booting full U-Boot. Also 116 note that while one can program Falcon Mode "in place" great care needs to 117 be taken by the user to not 'brick' their setup. As these are all eval 118 boards with multiple boot methods, recovery should not be an issue in this 119 worst-case however. 120 121 Falcon Mode: eMMC 122 ================= 123 124 The recommended layout in this case is: 125 126 MMC BLOCKS |--------------------------------| LOCATION IN BYTES 127 0x0000 - 0x007F : MBR or GPT table : 0x000000 - 0x020000 128 0x0080 - 0x00FF : ARGS or FDT file : 0x010000 - 0x020000 129 0x0100 - 0x01FF : SPL.backup1 (first copy used) : 0x020000 - 0x040000 130 0x0200 - 0x02FF : SPL.backup2 (second copy used) : 0x040000 - 0x060000 131 0x0300 - 0x06FF : U-Boot : 0x060000 - 0x0e0000 132 0x0700 - 0x08FF : U-Boot Env + Redundant : 0x0e0000 - 0x120000 133 0x0900 - 0x28FF : Kernel : 0x120000 - 0x520000 134 135 Note that when we run 'spl export' it will prepare to boot the kernel. 136 This includes relocation of the uImage from where we loaded it to the entry 137 point defined in the header. As these locations overlap by default, it 138 would leave us with an image that if written to MMC will not boot, so 139 instead of using the loadaddr variable we use 0x81000000 in the following 140 example. In this example we are loading from the network, for simplicity, 141 and assume a valid partition table already exists and 'mmc dev' has already 142 been run to select the correct device. Also note that if you previously 143 had a FAT partition (such as on a Beaglebone Black) it is not enough to 144 write garbage into the area, you must delete it from the partition table 145 first. 146 147 # Ensure we are able to talk with this mmc device 148 U-Boot # mmc rescan 149 U-Boot # tftp 81000000 am335x/MLO 150 # Write to two of the backup locations ROM uses 151 U-Boot # mmc write 81000000 100 100 152 U-Boot # mmc write 81000000 200 100 153 # Write U-Boot to the location set in the config 154 U-Boot # tftp 81000000 am335x/u-boot.img 155 U-Boot # mmc write 81000000 300 400 156 # Load kernel and device tree into memory, perform export 157 U-Boot # tftp 81000000 am335x/uImage 158 U-Boot # run findfdt 159 U-Boot # tftp ${fdtaddr} am335x/${fdtfile} 160 U-Boot # run mmcargs 161 U-Boot # spl export fdt 81000000 - ${fdtaddr} 162 # Write the updated device tree to MMC 163 U-Boot # mmc write ${fdtaddr} 80 80 164 # Write the uImage to MMC 165 U-Boot # mmc write 81000000 900 2000 166 167 Falcon Mode: FAT SD cards 168 ========================= 169 170 In this case the additional file is written to the filesystem. In this 171 example we assume that the uImage and device tree to be used are already on 172 the FAT filesystem (only the uImage MUST be for this to function 173 afterwards) along with a Falcon Mode aware MLO and the FAT partition has 174 already been created and marked bootable: 175 176 U-Boot # mmc rescan 177 # Load kernel and device tree into memory, perform export 178 U-Boot # load mmc 0:1 ${loadaddr} uImage 179 U-Boot # run findfdt 180 U-Boot # load mmc 0:1 ${fdtaddr} ${fdtfile} 181 U-Boot # run mmcargs 182 U-Boot # spl export fdt ${loadaddr} - ${fdtaddr} 183 184 This will print a number of lines and then end with something like: 185 Using Device Tree in place at 80f80000, end 80f85928 186 Using Device Tree in place at 80f80000, end 80f88928 187 So then you: 188 189 U-Boot # fatwrite mmc 0:1 0x80f80000 args 8928 190 191 Falcon Mode: NAND 192 ================= 193 194 In this case the additional data is written to another partition of the 195 NAND. In this example we assume that the uImage and device tree to be are 196 already located on the NAND somewhere (such as filesystem or mtd partition) 197 along with a Falcon Mode aware MLO written to the correct locations for 198 booting and mtdparts have been configured correctly for the board: 199 200 U-Boot # nand read ${loadaddr} kernel 201 U-Boot # load nand rootfs ${fdtaddr} /boot/am335x-evm.dtb 202 U-Boot # run nandargs 203 U-Boot # spl export fdt ${loadaddr} - ${fdtaddr} 204 U-Boot # nand erase.part u-boot-spl-os 205 U-Boot # nand write ${fdtaddr} u-boot-spl-os 206