[U-Boot] [PATCH v2 0/6] Enhance support for BeagleBone Black

There are a number of differences between the BeagleBone Black and other AM335x boards that require some modification of the default AM335x EVM configuration. In particular, it lacks NAND flash, has multiple MMC interfaces, and can store its environment in an unused eMMC partition.
The following patch set improves the out-of-box experience on the BeagleBone Black by making the AM335x EVM configuration more modular, and adding a few additional features.
Changes from v1: * Reordered the patches * Broke out the beagleboard target addition into a seperate patch so that it is independent of the other changes * Reversed the NAND logic- rather than using a new token, NO_NAND, I simply define NAND in the configurations for the other boards. * Fixed some bugs introduced by my mmcboot modifications
Justin Waters (6): am335x_evm: Make NAND support modular am335x_evm: Add command line editing am335x_evm: Rework bootcmd to handle two MMC devs Add additional MLO images to .gitignore am335x_evm: Add support for eMMC environment am335x_evm: Add am335x_boneblack variant
.gitignore | 2 +- boards.cfg | 17 +++---- include/configs/am335x_evm.h | 101 ++++++++++++++++++++++++++---------------- 3 files changed, 72 insertions(+), 48 deletions(-)

Give the user the ability to disable NAND support by defining CONFIG_NO_NAND. This will allow custom hardware to easily support this configuration.
Signed-off-by: Justin Waters justin.waters@timesys.com --- boards.cfg | 16 +++++++------- include/configs/am335x_evm.h | 49 ++++++++++++++++++++++++++---------------- 2 files changed, 39 insertions(+), 26 deletions(-)
diff --git a/boards.cfg b/boards.cfg index c0c4282..c0cf446 100644 --- a/boards.cfg +++ b/boards.cfg @@ -241,14 +241,14 @@ integratorcp_cm946es arm arm946es integrator armltd vexpress_ca15_tc2 arm armv7 vexpress armltd vexpress_ca5x2 arm armv7 vexpress armltd vexpress_ca9x4 arm armv7 vexpress armltd -am335x_evm arm armv7 am335x ti am33xx am335x_evm:SERIAL1,CONS_INDEX=1 -am335x_evm_spiboot arm armv7 am335x ti am33xx am335x_evm:SERIAL1,CONS_INDEX=1,SPI_BOOT -am335x_evm_uart1 arm armv7 am335x ti am33xx am335x_evm:SERIAL2,CONS_INDEX=2 -am335x_evm_uart2 arm armv7 am335x ti am33xx am335x_evm:SERIAL3,CONS_INDEX=3 -am335x_evm_uart3 arm armv7 am335x ti am33xx am335x_evm:SERIAL4,CONS_INDEX=4 -am335x_evm_uart4 arm armv7 am335x ti am33xx am335x_evm:SERIAL5,CONS_INDEX=5 -am335x_evm_uart5 arm armv7 am335x ti am33xx am335x_evm:SERIAL6,CONS_INDEX=6 -am335x_evm_usbspl arm armv7 am335x ti am33xx am335x_evm:SERIAL1,CONS_INDEX=1,SPL_USBETH_SUPPORT +am335x_evm arm armv7 am335x ti am33xx am335x_evm:SERIAL1,CONS_INDEX=1,NAND +am335x_evm_spiboot arm armv7 am335x ti am33xx am335x_evm:SERIAL1,CONS_INDEX=1,NAND,SPI_BOOT +am335x_evm_uart1 arm armv7 am335x ti am33xx am335x_evm:SERIAL2,CONS_INDEX=2,NAND +am335x_evm_uart2 arm armv7 am335x ti am33xx am335x_evm:SERIAL3,CONS_INDEX=3,NAND +am335x_evm_uart3 arm armv7 am335x ti am33xx am335x_evm:SERIAL4,CONS_INDEX=4,NAND +am335x_evm_uart4 arm armv7 am335x ti am33xx am335x_evm:SERIAL5,CONS_INDEX=5,NAND +am335x_evm_uart5 arm armv7 am335x ti am33xx am335x_evm:SERIAL6,CONS_INDEX=6,NAND +am335x_evm_usbspl arm armv7 am335x ti am33xx am335x_evm:SERIAL1,CONS_INDEX=1,NAND,SPL_USBETH_SUPPORT ti814x_evm arm armv7 ti814x ti am33xx pcm051 arm armv7 pcm051 phytec am33xx pcm051 sama5d3xek_mmc arm armv7 sama5d3xek atmel at91 sama5d3xek:SAMA5D3,SYS_USE_MMC diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h index c5a6d4b..c53bc21 100644 --- a/include/configs/am335x_evm.h +++ b/include/configs/am335x_evm.h @@ -48,6 +48,27 @@ #define CONFIG_CMD_ASKENV #define CONFIG_VERSION_VARIABLE
+#ifdef CONFIG_NAND +#define NANDARGS \ + "mtdids=" MTDIDS_DEFAULT "\0" \ + "mtdparts=" MTDPARTS_DEFAULT "\0" \ + "nandargs=setenv bootargs console=${console} " \ + "${optargs} " \ + "root=${nandroot} " \ + "rootfstype=${nandrootfstype}\0" \ + "dfu_alt_info_nand=" DFU_ALT_INFO_NAND "\0" \ + "nandroot=ubi0:rootfs rw ubi.mtd=7,2048\0" \ + "nandrootfstype=ubifs rootwait=1\0" \ + "nandsrcaddr=0x280000\0" \ + "nandboot=echo Booting from nand ...; " \ + "run nandargs; " \ + "nand read ${loadaddr} ${nandsrcaddr} ${nandimgsize}; " \ + "bootm ${loadaddr}\0" \ + "nandimgsize=0x500000\0" +#else +#define NANDARGS "" +#endif + /* set to negative value for no autoboot */ #define CONFIG_BOOTDELAY 1 #define CONFIG_ENV_VARS_UBOOT_CONFIG @@ -63,19 +84,12 @@ "fdtfile=undefined\0" \ "console=ttyO0,115200n8\0" \ "optargs=\0" \ - "mtdids=" MTDIDS_DEFAULT "\0" \ - "mtdparts=" MTDPARTS_DEFAULT "\0" \ "dfu_alt_info_mmc=" DFU_ALT_INFO_MMC "\0" \ "dfu_alt_info_emmc=rawemmc mmc 0 3751936\0" \ - "dfu_alt_info_nand=" DFU_ALT_INFO_NAND "\0" \ "mmcdev=0\0" \ "mmcroot=/dev/mmcblk0p2 ro\0" \ "mmcrootfstype=ext4 rootwait\0" \ "bootpart=0:2\0" \ - "nandroot=ubi0:rootfs rw ubi.mtd=7,2048\0" \ - "nandrootfstype=ubifs rootwait=1\0" \ - "nandsrcaddr=0x280000\0" \ - "nandimgsize=0x500000\0" \ "rootpath=/export/rootfs\0" \ "nfsopts=nolock\0" \ "static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}" \ @@ -86,10 +100,6 @@ "${optargs} " \ "root=${mmcroot} " \ "rootfstype=${mmcrootfstype}\0" \ - "nandargs=setenv bootargs console=${console} " \ - "${optargs} " \ - "root=${nandroot} " \ - "rootfstype=${nandrootfstype}\0" \ "spiroot=/dev/mtdblock4 rw\0" \ "spirootfstype=jffs2\0" \ "spisrcaddr=0xe0000\0" \ @@ -118,10 +128,6 @@ "mmcboot=echo Booting from mmc ...; " \ "run mmcargs; " \ "bootm ${loadaddr} - ${fdtaddr}\0" \ - "nandboot=echo Booting from nand ...; " \ - "run nandargs; " \ - "nand read ${loadaddr} ${nandsrcaddr} ${nandimgsize}; " \ - "bootm ${loadaddr}\0" \ "spiboot=echo Booting from spi ...; " \ "run spiargs; " \ "sf probe ${spibusno}:0; " \ @@ -147,7 +153,8 @@ "if test $board_name = A335X_SK; then " \ "setenv fdtfile am335x-evmsk.dtb; fi; " \ "if test $fdtfile = undefined; then " \ - "echo WARNING: Could not determine device tree to use; fi; \0" + "echo WARNING: Could not determine device tree to use; fi; \0" \ + NANDARGS #endif
#define CONFIG_BOOTCOMMAND \ @@ -231,7 +238,6 @@ /* USB Device Firmware Update support */ #define CONFIG_DFU_FUNCTION #define CONFIG_DFU_MMC -#define CONFIG_DFU_NAND #define CONFIG_CMD_DFU #define DFU_ALT_INFO_MMC \ "boot part 0 1;" \ @@ -241,6 +247,8 @@ "u-boot.img.raw mmc 300 3C0;" \ "u-boot.img fat 0 1;" \ "uEnv.txt fat 0 1" +#ifdef CONFIG_NAND +#define CONFIG_DFU_NAND #define DFU_ALT_INFO_NAND \ "SPL part 0 1;" \ "SPL.backup1 part 0 2;" \ @@ -249,6 +257,7 @@ "u-boot part 0 5;" \ "kernel part 0 7;" \ "rootfs part 0 8" +#endif
/* Physical Memory Map */ #define CONFIG_NR_DRAM_BANKS 1 /* 1 bank of DRAM */ @@ -337,9 +346,11 @@ #define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS 8 /* 4KB */
/* nand */ +#ifdef CONFIG_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 +#endif
/* spl export command */ #define CONFIG_CMD_SPL @@ -369,6 +380,8 @@ #define CONFIG_SPL_LDSCRIPT "$(CPUDIR)/am33xx/u-boot-spl.lds"
#define CONFIG_SPL_BOARD_INIT + +#ifdef CONFIG_NAND #define CONFIG_SPL_NAND_AM33XX_BCH #define CONFIG_SPL_NAND_SUPPORT #define CONFIG_SPL_NAND_BASE @@ -395,6 +408,7 @@ #define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000 +#endif
/* * 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM @@ -490,7 +504,6 @@ #define CONFIG_PHY_ADDR 0 #define CONFIG_PHY_SMSC
-#define CONFIG_NAND /* NAND support */ #ifdef CONFIG_NAND #define CONFIG_CMD_NAND

Am 2013-07-11 15:54, schrieb Justin Waters:
Give the user the ability to disable NAND support by defining CONFIG_NO_NAND. This will allow custom hardware to easily support this configuration.
If NAND is not enabled, we could also ifdef the SPI/MTD/CMD_FS configurations since they are not used on BeagleBone Black either. Maybe something for a follow-up patch rather than a new version of this patchset.
-- Stefan

Stefan,
On Fri, 2013-07-12 at 07:30 -0400, Stefan Agner wrote:
Am 2013-07-11 15:54, schrieb Justin Waters:
Give the user the ability to disable NAND support by defining CONFIG_NO_NAND. This will allow custom hardware to easily support this configuration.
If NAND is not enabled, we could also ifdef the SPI/MTD/CMD_FS configurations since they are not used on BeagleBone Black either. Maybe something for a follow-up patch rather than a new version of this patchset.
Agreed on all accounts. I focused on the NAND mostly because the logic was gumming up the environment storage, and I needed it out of the way for the eMMC boot. It was an added bonus that it decreases the image size and cleans up the initialization. The others were more innocuous, so I skipped them for the time being.
-Justin

Many modern U-Boot ports enable command line editing and a history buffer. The am335x_evm configuration is fairly comprehensive as it is, so a few extra kb should not be noticable, and it adds a very convenient feature.
Signed-off-by: Justin Waters justin.waters@timesys.com --- include/configs/am335x_evm.h | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h index c53bc21..ea68b57 100644 --- a/include/configs/am335x_evm.h +++ b/include/configs/am335x_evm.h @@ -37,6 +37,9 @@ #define CONFIG_OF_LIBFDT #define CONFIG_CMD_BOOTZ #define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */ +#define CONFIG_CMDLINE_EDITING +#define CONFIG_STACKSIZE (128 * 1024) +#define CONFIG_AUTO_COMPLETE #define CONFIG_SETUP_MEMORY_TAGS #define CONFIG_INITRD_TAG

The BeagleBone Black can boot from either the MMC card or eMMC chip on board. We should try both interfaces.
This modification also allows a graceful fallback if a device exists but boot images are not present on it.
Changes for v2:
* Fix boot partition - it should always show up as mmcblk0p2 * Fix missing FDT load
Signed-off-by: Justin Waters justin.waters@timesys.com --- include/configs/am335x_evm.h | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-)
diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h index ea68b57..0df0e7a 100644 --- a/include/configs/am335x_evm.h +++ b/include/configs/am335x_evm.h @@ -128,9 +128,23 @@ "loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz\0" \ "loaduimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile}\0" \ "loadfdt=load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}\0" \ - "mmcboot=echo Booting from mmc ...; " \ - "run mmcargs; " \ - "bootm ${loadaddr} - ${fdtaddr}\0" \ + "mmcboot=mmc dev ${mmcdev}; " \ + "if mmc rescan; then " \ + "echo SD/MMC found on device ${mmcdev};" \ + "if run loadbootenv; then " \ + "echo Loaded environment from ${bootenv};" \ + "run importbootenv;" \ + "fi;" \ + "if test -n $uenvcmd; then " \ + "echo Running uenvcmd ...;" \ + "run uenvcmd;" \ + "fi;" \ + "if run loaduimage; then " \ + "run loadfdt;" \ + "run mmcargs; " \ + "bootm ${loadaddr} - ${fdtaddr};" \ + "fi;" \ + "fi;\0" \ "spiboot=echo Booting from spi ...; " \ "run spiargs; " \ "sf probe ${spibusno}:0; " \ @@ -162,23 +176,11 @@
#define CONFIG_BOOTCOMMAND \ "run findfdt; " \ - "mmc dev ${mmcdev}; if mmc rescan; then " \ - "echo SD/MMC found on device ${mmcdev};" \ - "if run loadbootenv; then " \ - "echo Loaded environment from ${bootenv};" \ - "run importbootenv;" \ - "fi;" \ - "if test -n $uenvcmd; then " \ - "echo Running uenvcmd ...;" \ - "run uenvcmd;" \ - "fi;" \ - "if run loaduimage; then " \ - "run loadfdt;" \ - "run mmcboot;" \ - "fi;" \ - "else " \ - "run nandboot;" \ - "fi;" \ + "run mmcboot;" \ + "setenv mmcdev 1; " \ + "setenv bootpart 1:2; " \ + "run mmcboot;" \ + "run nandboot;"
/* Clock Defines */ #define V_OSCK 24000000 /* Clock output from T2 */

This rule catches images such as MLO.byteswap
Signed-off-by: Justin Waters justin.waters@timesys.com --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.gitignore b/.gitignore index 771b860..d1282e7 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,7 @@ # Top-level generic files #
-/MLO +/MLO* /SPL /System.map /u-boot

Some boards, such as the BeagleBone Black, have an eMMC chip intstead of NAND. We can use the eMMC boot partition to store the environment, since it isn't used for anything else. This allows us to have a configurable environment on those boards.
Signed-off-by: Justin Waters justin.waters@timesys.com --- include/configs/am335x_evm.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h index 0df0e7a..e3f75cd 100644 --- a/include/configs/am335x_evm.h +++ b/include/configs/am335x_evm.h @@ -486,7 +486,12 @@ # define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED # define CONFIG_ENV_OFFSET (892 << 10) /* 892 KiB in */ # define CONFIG_ENV_SECT_SIZE (4 << 10) /* 4 KB sectors */ -#endif /* SPI support */ +#elif defined(CONFIG_EMMC_BOOT) +# undef CONFIG_ENV_IS_NOWHERE +# define CONFIG_ENV_IS_IN_MMC +# define CONFIG_SYS_MMC_ENV_DEV 1 +# define CONFIG_SYS_MMC_ENV_PART 2 +#endif
/* Unsupported features */ #undef CONFIG_USE_IRQ

The BeagleBone Black differs from the other AM335x boards in a few significant ways, so it makes sense to create a custom configuration for it. In particular, it uses eMMC instead of NAND flash.
Signed-off-by: Justin Waters justin.waters@timesys.com --- boards.cfg | 1 + 1 file changed, 1 insertion(+)
diff --git a/boards.cfg b/boards.cfg index c0cf446..461f69b 100644 --- a/boards.cfg +++ b/boards.cfg @@ -249,6 +249,7 @@ am335x_evm_uart3 arm armv7 am335x ti am335x_evm_uart4 arm armv7 am335x ti am33xx am335x_evm:SERIAL5,CONS_INDEX=5,NAND am335x_evm_uart5 arm armv7 am335x ti am33xx am335x_evm:SERIAL6,CONS_INDEX=6,NAND am335x_evm_usbspl arm armv7 am335x ti am33xx am335x_evm:SERIAL1,CONS_INDEX=1,NAND,SPL_USBETH_SUPPORT +am335x_boneblack arm armv7 am335x ti am33xx am335x_evm:SERIAL1,CONS_INDEX=1,EMMC_BOOT ti814x_evm arm armv7 ti814x ti am33xx pcm051 arm armv7 pcm051 phytec am33xx pcm051 sama5d3xek_mmc arm armv7 sama5d3xek atmel at91 sama5d3xek:SAMA5D3,SYS_USE_MMC

On Thu, Jul 11, 2013 at 09:55:03AM -0400, Justin Waters wrote:
The BeagleBone Black differs from the other AM335x boards in a few significant ways, so it makes sense to create a custom configuration for it. In particular, it uses eMMC instead of NAND flash.
Signed-off-by: Justin Waters justin.waters@timesys.com
boards.cfg | 1 + 1 file changed, 1 insertion(+)
diff --git a/boards.cfg b/boards.cfg index c0cf446..461f69b 100644 --- a/boards.cfg +++ b/boards.cfg @@ -249,6 +249,7 @@ am335x_evm_uart3 arm armv7 am335x ti am335x_evm_uart4 arm armv7 am335x ti am33xx am335x_evm:SERIAL5,CONS_INDEX=5,NAND am335x_evm_uart5 arm armv7 am335x ti am33xx am335x_evm:SERIAL6,CONS_INDEX=6,NAND am335x_evm_usbspl arm armv7 am335x ti am33xx am335x_evm:SERIAL1,CONS_INDEX=1,NAND,SPL_USBETH_SUPPORT +am335x_boneblack arm armv7 am335x ti am33xx am335x_evm:SERIAL1,CONS_INDEX=1,EMMC_BOOT ti814x_evm arm armv7 ti814x ti am33xx pcm051 arm armv7 pcm051 phytec am33xx pcm051 sama5d3xek_mmc arm armv7 sama5d3xek atmel at91 sama5d3xek:SAMA5D3,SYS_USE_MMC
One minor nit, do we have room for SPL_USBETH_SUPPORT since you turned off NAND? I bet you do, and the default sysboot pins will try USB too.

Hi,
Am 2013-07-11 15:54, schrieb Justin Waters:
Justin Waters (6): am335x_evm: Make NAND support modular am335x_evm: Add command line editing am335x_evm: Rework bootcmd to handle two MMC devs Add additional MLO images to .gitignore am335x_evm: Add support for eMMC environment am335x_evm: Add am335x_boneblack variant
Applied your patches on v2013.07-rc3 and compiled the beaglebone target. Works fine on my BeagleBone Black.
Tested-by: Stefan Agner stefan@agner.ch
-- Stefan

On Thu, Jul 11, 2013 at 09:54:57AM -0400, Justin Waters wrote:
There are a number of differences between the BeagleBone Black and other AM335x boards that require some modification of the default AM335x EVM configuration. In particular, it lacks NAND flash, has multiple MMC interfaces, and can store its environment in an unused eMMC partition.
The following patch set improves the out-of-box experience on the BeagleBone Black by making the AM335x EVM configuration more modular, and adding a few additional features.
Changes from v1:
- Reordered the patches
- Broke out the beagleboard target addition into a seperate patch so that it is independent of the other changes
- Reversed the NAND logic- rather than using a new token, NO_NAND, I simply define NAND in the configurations for the other boards.
- Fixed some bugs introduced by my mmcboot modifications
Justin Waters (6): am335x_evm: Make NAND support modular am335x_evm: Add command line editing am335x_evm: Rework bootcmd to handle two MMC devs Add additional MLO images to .gitignore am335x_evm: Add support for eMMC environment am335x_evm: Add am335x_boneblack variant
.gitignore | 2 +- boards.cfg | 17 +++---- include/configs/am335x_evm.h | 101 ++++++++++++++++++++++++++---------------- 3 files changed, 72 insertions(+), 48 deletions(-)
Applied to u-boot-ti/master, thanks!
participants (3)
-
Justin Waters
-
Stefan Agner
-
Tom Rini