Enhance support for BeagleBone Black
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
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
@@ -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
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.Signed-off-by Justin Waters <[email protected]>
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>
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.Signed-off-by Justin Waters <[email protected]>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
PATCH 1/5 am335x_evm: Make NAND support modular
In reply to Justin WatersQuoted 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.Signed-off-by Justin Waters <[email protected]>--- include/configs/am335x_evm.h | 55 ++++++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 18 deletions(-)include/configs/am335x_evm.h +0
-0
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
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.Signed-off-by Justin Waters <[email protected]>--- include/configs/am335x_evm.h | 55 ++++++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 18 deletions(-)include/configs/am335x_evm.h +0
-0include/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_NANDinto 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
PATCH 2/5 am335x_evm: Add am335x_boneblack variant
In reply to Justin WatersThe 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
@@ -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
@@ -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
PATCH 3/5 am335x_evm: Add command line editing
In reply to Justin WatersMany 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
@@ -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
PATCH 4/5 am335x_evm: Rework bootcmd to handle two MMC devs
In reply to Justin WatersThe 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
@@ -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
PATCH 5/5 Add additional MLO images to .gitignore
In reply to Justin WatersThis rule catches images such as MLO.byteswap
--- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
.gitignore +1 -1
@@ -24,7 +24,7 @@ # Top-level generic files # -/MLO +/MLO* /SPL /System.map /u-boot
Signature · 1 line
1.7.9.6
cover Enhance support for BeagleBone Black
In reply to Justin WatersQuoted 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>
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