mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-25 04:23:46 +00:00
4e5909450e
The rest of the unmigrated CONFIG symbols in the CONFIG_SYS_NAND namespace do not easily transition to Kconfig. In many cases they likely should come from the device tree instead. Move these out of CONFIG namespace and in to CFG namespace. Signed-off-by: Tom Rini <trini@konsulko.com> Reviewed-by: Simon Glass <sjg@chromium.org>
200 lines
7.4 KiB
ReStructuredText
200 lines
7.4 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
|
.. sectionauthor:: Tom Rini <trini@konsulko.com>
|
|
|
|
Summary
|
|
=======
|
|
|
|
This document covers various features of the `am335x_evm` default
|
|
configuration, some of the related defconfigs, and how to enable hardware
|
|
features not present by default in the defconfigs.
|
|
|
|
Hardware
|
|
--------
|
|
|
|
The binary produced by this board supports, based on parsing of the EEPROM
|
|
documented in TI's reference designs:
|
|
* AM335x GP EVM
|
|
* AM335x EVM SK
|
|
* The Beaglebone family of designs
|
|
|
|
Customization
|
|
-------------
|
|
|
|
Given that all of the above boards are reference platforms (and the
|
|
Beaglebone platforms are OSHA), it is likely that this platform code and
|
|
configuration will be used as the basis of a custom platform. It is
|
|
worth noting that aside from things such as NAND or MMC only being
|
|
required if a custom platform makes use of these blocks, the following
|
|
are required, depending on design:
|
|
|
|
* GPIO is only required if DDR3 power is controlled in a way similar to EVM SK
|
|
* SPI is only required for SPI flash, or exposing the SPI bus.
|
|
|
|
The following blocks are required:
|
|
|
|
* I2C, to talk with the PMIC and ensure that we do not run afoul of
|
|
errata 1.0.24.
|
|
|
|
When removing options as part of customization, note that you will likely need
|
|
to look at both `include/configs/am335x_evm.h`,
|
|
`include/configs/ti_am335x_common.h` and `include/configs/am335x_evm.h` as the
|
|
migration to Kconfig is not yet complete.
|
|
|
|
NAND
|
|
----
|
|
|
|
The AM335x GP EVM ships with a 256MiB NAND available in most profiles. In
|
|
this example to program the NAND we assume that an SD card has been
|
|
inserted with the files to write in the first SD slot and that mtdparts
|
|
have been configured correctly for the board. All images are first loaded
|
|
into memory, then written to NAND.
|
|
|
|
Step-1: Building u-boot for NAND boot
|
|
Set following CONFIGxx options for NAND device.
|
|
CONFIG_SYS_NAND_PAGE_SIZE number of main bytes in NAND page
|
|
CONFIG_SYS_NAND_OOBSIZE number of OOB bytes in NAND page
|
|
CONFIG_SYS_NAND_BLOCK_SIZE number of bytes in NAND erase-block
|
|
CFG_SYS_NAND_ECCPOS ECC map for NAND page
|
|
CONFIG_NAND_OMAP_ECCSCHEME (refer doc/README.nand)
|
|
|
|
Step-2: Flashing NAND via MMC/SD
|
|
|
|
.. code-block:: text
|
|
|
|
# select BOOTSEL to MMC/SD boot and boot from MMC/SD card
|
|
U-Boot # mmc rescan
|
|
# erase flash
|
|
U-Boot # nand erase.chip
|
|
U-Boot # env default -f -a
|
|
U-Boot # saveenv
|
|
# flash MLO. Redundant copies of MLO are kept for failsafe
|
|
U-Boot # load mmc 0 0x82000000 MLO
|
|
U-Boot # nand write 0x82000000 0x00000 0x20000
|
|
U-Boot # nand write 0x82000000 0x20000 0x20000
|
|
U-Boot # nand write 0x82000000 0x40000 0x20000
|
|
U-Boot # nand write 0x82000000 0x60000 0x20000
|
|
# flash u-boot.img
|
|
U-Boot # load mmc 0 0x82000000 u-boot.img
|
|
U-Boot # nand write 0x82000000 0x80000 0x60000
|
|
# flash kernel image
|
|
U-Boot # load mmc 0 0x82000000 uImage
|
|
U-Boot # nand write 0x82000000 ${nandsrcaddr} ${nandimgsize}
|
|
# flash filesystem image
|
|
U-Boot # load mmc 0 0x82000000 filesystem.img
|
|
U-Boot # nand write 0x82000000 ${loadaddress} 0x300000
|
|
|
|
Step-3: Set BOOTSEL pin to select NAND boot, and POR the device.
|
|
The device should boot from images flashed on NAND device.
|
|
|
|
|
|
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:
|
|
|
|
.. code-block:: text
|
|
|
|
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 header. 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.
|
|
|
|
.. code-block:: text
|
|
|
|
# Ensure we are able to talk with this mmc device
|
|
U-Boot # mmc rescan
|
|
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
|
|
# 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:
|
|
|
|
.. code-block:: text
|
|
|
|
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:
|
|
|
|
.. code-block:: text
|
|
|
|
Using Device Tree in place at 80f80000, end 80f85928
|
|
Using Device Tree in place at 80f80000, end 80f88928
|
|
|
|
So then you:
|
|
|
|
.. code-block:: text
|
|
|
|
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 filesystem 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:
|
|
|
|
.. code-block:: text
|
|
|
|
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
|