Home | History | Annotate | only in /external/u-boot/board/ti/am335x
Up to higher level directory
NameDateSize
board.c22-Oct-202026.5K
board.h22-Oct-20202.3K
Kconfig22-Oct-2020439
MAINTAINERS22-Oct-2020381
Makefile22-Oct-2020201
mux.c22-Oct-202015K
README22-Oct-20208.2K
u-boot.lds22-Oct-20202.8K

README

      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