Skip to contentSkip to conversation

Enhance support for BeagleBone Black

PATCH New Justin Waters 3 participants 12 messages Jul 9, 2013 – Jul 17, 2013

lore
Share & tools
lore
#0 lore raw

cover 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 without impacting the existing AM335x boards.

Justin Waters (5):
am335x_evm: Make NAND support modular
am335x_evm: Add am335x_boneblack variant
am335x_evm: Add command line editing
am335x_evm: Rework bootcmd to handle two MMC devs Add additional MLO images to .gitignore

 .gitignore                   |    2 +-
 boards.cfg                   |    1 +
 include/configs/am335x_evm.h |  107 +++++++++++++++++++++++++++---------------
 3 files changed, 70 insertions(+), 40 deletions(-)
Signature · 1 line
1.7.9.6
#1 lore raw

PATCH 1/5 am335x_evm: Make NAND support modular

Give the user the ability to disable NAND support by defining CONFIG_NO_NAND. This will allow custom hardware to easily support this configuration.

---
 include/configs/am335x_evm.h |   55 ++++++++++++++++++++++++++++--------------
 1 file changed, 37 insertions(+), 18 deletions(-)
include/configs/am335x_evm.h +37 -18
index c5a6d4b..7bcfe2e 100644
@@ -42,12 +42,39 @@
 
 #define CONFIG_SYS_CACHELINE_SIZE       64
 
+#ifdef CONFIG_NO_NAND
+#undef CONFIG_NAND
+#else
+#define CONFIG_NAND
+#endif
+
 /* commands to include */
 #include <config_cmd_default.h>
 
 #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 +90,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 +106,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 +134,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 +159,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 +244,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 +253,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 +263,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 +352,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 +386,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 +414,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 +510,6 @@
 #define CONFIG_PHY_ADDR			0
 #define CONFIG_PHY_SMSC
 
-#define CONFIG_NAND
 /* NAND support */
 #ifdef CONFIG_NAND
 #define CONFIG_CMD_NAND
Signature · 1 line
1.7.9.6
#2 lore raw

PATCH 1/5 am335x_evm: Make NAND support modular

Quoted 5 lines · 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.

Just make boards.cfg set NAND by default, ala the console number.

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130709/f80bde75/attachment.pgp>
#3 lore raw

PATCH 1/5 am335x_evm: Make NAND support modular

Tom,

Quoted 9 lines · Tom Rini
Quoted 5 lines · 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.

Just make boards.cfg set NAND by default, ala the console number.

Sounds good to me. That was my original preference, but I was trying to be as non-invasive as possible. I'll make the change now that I have the blessing.

-Justin

#4 lore raw

PATCH 1/5 am335x_evm: Make NAND support modular

In reply to Justin Waters
Quoted 16 lines · 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.

---
 include/configs/am335x_evm.h |   55  
++++++++++++++++++++++++++++--------------
 1 file changed, 37 insertions(+), 18 deletions(-)
include/configs/am335x_evm.h +0 -0
index c5a6d4b..7bcfe2e 100644

include/configs/am335x_evm.h line 49

Quoted 8 lines
include/configs/am335x_evm.h +5 -0
@@ -42,12 +42,39 @@
 
 #define CONFIG_SYS_CACHELINE_SIZE       64
 
+#ifdef CONFIG_NO_NAND
+#undef CONFIG_NAND
+#else
+#define CONFIG_NAND
+#endif

Wouldn't it be cleaner to move CONFIG_NAND into boards.cfg, so if you want NAND to be absent, you just add a similar target that doesn't set it?

Especially if this is for custom hardware, which ought to get its own board.cfg line.

-Scott

#5 lore raw

PATCH 1/5 am335x_evm: Make NAND support modular

Quoted 30 lines · Scott Wood
Quoted 16 lines · 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.

---
 include/configs/am335x_evm.h |   55  
++++++++++++++++++++++++++++--------------
 1 file changed, 37 insertions(+), 18 deletions(-)
include/configs/am335x_evm.h +0 -0
index c5a6d4b..7bcfe2e 100644

include/configs/am335x_evm.h line 49

Quoted 8 lines
include/configs/am335x_evm.h +5 -0
@@ -42,12 +42,39 @@
 
 #define CONFIG_SYS_CACHELINE_SIZE       64
 
+#ifdef CONFIG_NO_NAND
+#undef CONFIG_NAND
+#else
+#define CONFIG_NAND
+#endif

Wouldn't it be cleaner to move CONFIG_NAND into boards.cfg, so if you want NAND to be absent, you just add a similar target that doesn't set it?

Quoted 2 lines

Especially if this is for custom hardware, which ought to get its own board.cfg line.

Sigh, as soon as I sent this my mail client decided it would be a good idea to show me the other replies from a couple days ago saying the same thing. I need a new mail client...

-Scott

#6 lore raw

PATCH 2/5 am335x_evm: Add am335x_boneblack variant

In reply to Justin Waters

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.

We can use the eMMC boot partition to store the environment, since it isn't used for anything else.

---
 boards.cfg                   |    1 +
 include/configs/am335x_evm.h |    7 ++++++-
 2 files changed, 7 insertions(+), 1 deletion(-)
boards.cfg +1 -0
index c0c4282..7dea9e8 100644
@@ -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
 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_boneblack             arm         armv7       am335x              ti             am33xx      am335x_evm:SERIAL1,CONS_INDEX=1,EMMC_BOOT,NO_NAND
 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
include/configs/am335x_evm.h +6 -1
index 7bcfe2e..5947f5a 100644
@@ -487,7 +487,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
Signature · 1 line
1.7.9.6
#7 lore raw

PATCH 3/5 am335x_evm: Add command line editing

In reply to Justin Waters

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.

---
 include/configs/am335x_evm.h |    3 +++
 1 file changed, 3 insertions(+)
include/configs/am335x_evm.h +3 -0
index 5947f5a..e33d0ea 100644
@@ -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
 
Signature · 1 line
1.7.9.6
#8 lore raw

PATCH 4/5 am335x_evm: Rework bootcmd to handle two MMC devs

In reply to Justin Waters

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.

---
 include/configs/am335x_evm.h |   42 ++++++++++++++++++++++--------------------
 1 file changed, 22 insertions(+), 20 deletions(-)
include/configs/am335x_evm.h +22 -20
index e33d0ea..0e3db27 100644
@@ -134,9 +134,22 @@
 	"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 mmcargs; " \
+				"bootm ${loadaddr} - ${fdtaddr};" \
+			"fi;" \
+		"fi;\0" \
 	"spiboot=echo Booting from spi ...; " \
 		"run spiargs; " \
 		"sf probe ${spibusno}:0; " \
@@ -168,23 +181,12 @@
 
 #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; " \
+	"setenv mmcroot /dev/mmcblk1p2 ro; " \
+	"run mmcboot;" \
+	"run nandboot;"
 
 /* Clock Defines */
 #define V_OSCK				24000000  /* Clock output from T2 */
Signature · 1 line
1.7.9.6
#9 lore raw

PATCH 5/5 Add additional MLO images to .gitignore

In reply to Justin Waters

This rule catches images such as MLO.byteswap

---
 .gitignore |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
.gitignore +1 -1
index 771b860..d1282e7 100644
@@ -24,7 +24,7 @@
 # Top-level generic files
 #
 
-/MLO
+/MLO*
 /SPL
 /System.map
 /u-boot
Signature · 1 line
1.7.9.6
#10 lore raw

cover Enhance support for BeagleBone Black

In reply to Justin Waters
Quoted 8 lines · Justin Waters

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 without impacting the existing AM335x boards.

So, I was wondering how to best handle this last week. The problem is that most of what you've done for BeagleBone Black also fits with BeagleBone White and EVM SK. Or all 3 may be best served (depending on the use case) with env as a file on FAT.

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130709/e256d989/attachment.pgp>
#11 lore raw

cover Enhance support for BeagleBone Black

Tom,

Quoted 8 lines · Tom Rini
Quoted 6 lines · Justin Waters

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.

Quoted 8 lines
Quoted 2 lines

The following patch set improves the out-of-box experience on the BeagleBone Black without impacting the existing AM335x boards.

So, I was wondering how to best handle this last week. The problem is that most of what you've done for BeagleBone Black also fits with BeagleBone White and EVM SK. Or all 3 may be best served (depending on the use case) with env as a file on FAT.

I tried to factor out the work as best I could. For instance, the Black is the only board with eMMC (to my knowledge), so I wanted to treat that similiarly to the SPI flash- if we have the ability to store the environment in a read/write fashion, I'd like to take advantage of it.

The multiple SD card boot changes are generic, though- they should work on any of the AM335x boards without any modification. So something like the EVM will function out of the box. I have one on hand- I can give it a try.

My personal preference is to provide different targets for each of the flavors (evm, sk, bone, boneblack). The boards.cfg file provides a really nice mechanism for supporting similar platforms, so I tried to separate my changes to allow for that. Then again, I'm not the one maintaining these boards, and there's already an EEPROM on the board for differentiating between the different platforms, so perhaps multiple configurations are overkill.

In any event, let me know if you have any preferences. I'm certainly open to suggestions, and I have other AM335x platforms to test on as well.

-Justin