Skip to contentSkip to conversation

ARM: vexpress: Extend default boot sequence to load script from MMC

U-Boot Jon Medhurst (Tixy) 3 participants 7 messages Nov 29, 2011 – Nov 30, 2011 Arm/versatile express platform

lore
Share & tools
lore
#0 lore raw

Extend the default boot sequence on Versatile Express to load a boot script from MMC.

---
 include/configs/vexpress_common.h |   20 ++++++++++++++++++--
 1 files changed, 18 insertions(+), 2 deletions(-)
include/configs/vexpress_common.h +18 -2
index a4ae5a8..d56f19d 100644
@@ -178,6 +178,8 @@
 #define CONFIG_CMD_SAVEENV
 #define CONFIG_NET_MULTI
 #define CONFIG_CMD_RUN
+#define CONFIG_CMD_BOOTD
+#define CONFIG_CMD_ECHO
 
 #define CONFIG_CMD_FAT
 #define CONFIG_DOS_PARTITION		1
@@ -226,7 +228,14 @@
 #define CONFIG_SYS_INIT_SP_ADDR		CONFIG_SYS_GBL_DATA_OFFSET
 
 /* Basic environment settings */
-#define CONFIG_BOOTCOMMAND		"run bootflash;"
+#define CONFIG_BOOTCOMMAND \
+	"if mmc rescan ${mmcdev}; then " \
+		"if run loadbootscript; then " \
+			"run bootscript; " \
+		"fi; " \
+	"fi; " \
+	"run bootflash;"
+
 #ifdef CONFIG_VEXPRESS_ORIGINAL_MEMORY_MAP
 #define CONFIG_PLATFORM_ENV_SETTINGS \
 		"loadaddr=0x80008000\0" \
@@ -258,7 +267,12 @@
 			"devtmpfs.mount=0  vmalloc=256M\0" \
 		"bootflash=run flashargs; " \
 			"cp ${ramdisk_addr} ${ramdisk_addr_r} ${maxramdisk}; " \
-			"bootm ${kernel_addr} ${ramdisk_addr_r}\0"
+			"bootm ${kernel_addr} ${ramdisk_addr_r}\0" \
+		"mmcdev=0\0" \
+		"bootscr=boot.scr\0" \
+		"loadbootscript=fatload mmc ${mmcdev} ${loadaddr} ${bootscr}\0" \
+		"bootscript=echo Running bootscript from mmc ...; " \
+			"source ${loadaddr}\0"
 
 /* FLASH and environment organization */
 #define PHYS_FLASH_SIZE			0x04000000	/* 64MB */
@@ -305,6 +319,8 @@
 #define CONFIG_SYS_PROMPT		"VExpress# "
 #define CONFIG_SYS_PBSIZE		(CONFIG_SYS_CBSIZE + \
 					sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT_HUSH_PS2	"> "
 #define CONFIG_SYS_BARGSIZE		CONFIG_SYS_CBSIZE /* Boot args buffer */
 #define CONFIG_CMD_SOURCE
 #define CONFIG_SYS_LONGHELP
Signature · 1 line
1.7.4.1
Acked-by
#1 lore raw
Quoted 4 lines · Jon Medhurst (Tixy)

Extend the default boot sequence on Versatile Express to load a boot script from MMC.

Quoted 57 lines
---
 include/configs/vexpress_common.h |   20 ++++++++++++++++++--
 1 files changed, 18 insertions(+), 2 deletions(-)
include/configs/vexpress_common.h +18 -2
index a4ae5a8..d56f19d 100644
@@ -178,6 +178,8 @@
 #define CONFIG_CMD_SAVEENV
 #define CONFIG_NET_MULTI
 #define CONFIG_CMD_RUN
+#define CONFIG_CMD_BOOTD
+#define CONFIG_CMD_ECHO
 
 #define CONFIG_CMD_FAT
 #define CONFIG_DOS_PARTITION		1
@@ -226,7 +228,14 @@
 #define CONFIG_SYS_INIT_SP_ADDR		CONFIG_SYS_GBL_DATA_OFFSET
 
 /* Basic environment settings */
-#define CONFIG_BOOTCOMMAND		"run bootflash;"
+#define CONFIG_BOOTCOMMAND \
+	"if mmc rescan ${mmcdev}; then " \
+		"if run loadbootscript; then " \
+			"run bootscript; " \
+		"fi; " \
+	"fi; " \
+	"run bootflash;"
+
 #ifdef CONFIG_VEXPRESS_ORIGINAL_MEMORY_MAP
 #define CONFIG_PLATFORM_ENV_SETTINGS \
 		"loadaddr=0x80008000\0" \
@@ -258,7 +267,12 @@
 			"devtmpfs.mount=0  vmalloc=256M\0" \
 		"bootflash=run flashargs; " \
 			"cp ${ramdisk_addr} ${ramdisk_addr_r} ${maxramdisk}; " \
-			"bootm ${kernel_addr} ${ramdisk_addr_r}\0"
+			"bootm ${kernel_addr} ${ramdisk_addr_r}\0" \
+		"mmcdev=0\0" \
+		"bootscr=boot.scr\0" \
+		"loadbootscript=fatload mmc ${mmcdev} ${loadaddr} ${bootscr}\0" \
+		"bootscript=echo Running bootscript from mmc ...; " \
+			"source ${loadaddr}\0"
 
 /* FLASH and environment organization */
 #define PHYS_FLASH_SIZE			0x04000000	/* 64MB */
@@ -305,6 +319,8 @@
 #define CONFIG_SYS_PROMPT		"VExpress# "
 #define CONFIG_SYS_PBSIZE		(CONFIG_SYS_CBSIZE + \
 					sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT_HUSH_PS2	"> "
 #define CONFIG_SYS_BARGSIZE		CONFIG_SYS_CBSIZE /* Boot args buffer */
 #define CONFIG_CMD_SOURCE
 #define CONFIG_SYS_LONGHELP
#2 lore raw
In reply to Jon Medhurst (Tixy)
Quoted 4 lines · Jon Medhurst (Tixy)

Extend the default boot sequence on Versatile Express to load a boot script from MMC.

Is there any interest in defining a common 'fancy' boot command? Over on beagleboard (and a few other eval boards) we are (or will be) doing, roughly:
Is there mmc? {
Can we load a bootscript? {
load it, do it
}

  Can we load uEnv.txt? {
    Did it set 'uenvcmd'? {
      Run it
    }

}
Did we load the kernel? {
bootm it
}
}
Try nand.

And it's not hard to replace NAND with "whatever flash the board sets"

Signature · 1 line
Tom
#3 lore raw
Quoted 18 lines · Tom Rini
Quoted 4 lines · Jon Medhurst (Tixy)

Extend the default boot sequence on Versatile Express to load a boot script from MMC.

Is there any interest in defining a common 'fancy' boot command? Over on beagleboard (and a few other eval boards) we are (or will be) doing, roughly:
Is there mmc? {
Can we load a bootscript? {
load it, do it
}

  Can we load uEnv.txt? {
    Did it set 'uenvcmd'? {
      Run it
    }
Quoted 8 lines

}
Did we load the kernel? {
bootm it
}
}
Try nand.

And it's not hard to replace NAND with "whatever flash the board sets"

It could make sense. However, the combinations of boot methods could get quite big, e.g. do we include pxeboot, tftp?

If everything was included in the common 'fancy boot' then some boards would have to define boot methods (or stubs) for things they weren't interested in. And, conversely, if fancy boot didn't include everything, then other people would need to extend it.

I came across this issue with my patch. I wanted to look for a common pattern to copy for my boot command. I was tempted by those which included other options but then realised we didn't currently have a use for them, and if I added them there would be more testing and maintenance required.

So perhaps the number of boards interested in the common function would be very small?

Signature · 1 line
Tixy
#4 lore raw
Quoted 26 lines · Jon Medhurst (Tixy)
Quoted 25 lines · Tom Rini
Quoted 4 lines · Jon Medhurst (Tixy)

Extend the default boot sequence on Versatile Express to load a boot script from MMC.

Is there any interest in defining a common 'fancy' boot command? ?Over on beagleboard (and a few other eval boards) we are (or will be) doing, roughly:
Is there mmc? {
? Can we load a bootscript? {
? ? load it, do it
? }
? Can we load uEnv.txt? {
? ? Did it set 'uenvcmd'? {
? ? ? Run it
? ? }
? }
? Did we load the kernel? {
? ? bootm it
? }
}
Try nand.

Quoted 4 lines
Quoted 1 line

And it's not hard to replace NAND with "whatever flash the board sets"

It could make sense. However, the combinations of boot methods could get quite big, e.g. do we include pxeboot, tftp?

Well, maybe we define some blocks (TRY_MMC, TRY_ENET, TRY_NAND, TRY_SPI, ...) ...

Quoted 4 lines

If everything was included in the common 'fancy boot' then some boards would have to define boot methods (or stubs) for things they weren't interested in. And, conversely, if fancy boot didn't include everything, then other people would need to extend it.

... provide a few examples of the blocks strung together and have people string up what they need themselves, so long as it's an otherwise good idea to have complex default boot methods?

Signature · 1 line
Tom
#5 lore raw
Quoted 36 lines · Tom Rini
Quoted 26 lines · Jon Medhurst (Tixy)
Quoted 25 lines · Tom Rini
Quoted 4 lines · Jon Medhurst (Tixy)

Extend the default boot sequence on Versatile Express to load a boot script from MMC.

Is there any interest in defining a common 'fancy' boot command? Over on beagleboard (and a few other eval boards) we are (or will be) doing, roughly:
Is there mmc? {
Can we load a bootscript? {
load it, do it
}

  Can we load uEnv.txt? {
    Did it set 'uenvcmd'? {
      Run it
    }

}
Did we load the kernel? {
bootm it
}
}
Try nand.

Quoted 4 lines
Quoted 1 line

And it's not hard to replace NAND with "whatever flash the board sets"

It could make sense. However, the combinations of boot methods could get quite big, e.g. do we include pxeboot, tftp?

Well, maybe we define some blocks (TRY_MMC, TRY_ENET, TRY_NAND, TRY_SPI, ...) ...

Quoted 8 lines
Quoted 4 lines

If everything was included in the common 'fancy boot' then some boards would have to define boot methods (or stubs) for things they weren't interested in. And, conversely, if fancy boot didn't include everything, then other people would need to extend it.

... provide a few examples of the blocks strung together and have people string up what they need themselves, so long as it's an otherwise good idea to have complex default boot methods?

If something like this was planned for BeagleBoard anyway, then perhaps it could written in terms of these TRY_MMC etc. macros (which seem like a reasonable idea to me). Then a working prototype could be posted as an RFC for others to comment on? I suspect at the moment there's not many people reading this 'vexpress' thread ;-)

Signature · 1 line
Tixy
#6 lore raw
Quoted 46 lines · Jon Medhurst (Tixy)
Quoted 36 lines · Tom Rini
Quoted 26 lines · Jon Medhurst (Tixy)
Quoted 25 lines · Tom Rini
Quoted 4 lines · Jon Medhurst (Tixy)

Extend the default boot sequence on Versatile Express to load a boot script from MMC.

Is there any interest in defining a common 'fancy' boot command? ?Over on beagleboard (and a few other eval boards) we are (or will be) doing, roughly:
Is there mmc? {
? Can we load a bootscript? {
? ? load it, do it
? }
? Can we load uEnv.txt? {
? ? Did it set 'uenvcmd'? {
? ? ? Run it
? ? }
? }
? Did we load the kernel? {
? ? bootm it
? }
}
Try nand.

Quoted 4 lines
Quoted 1 line

And it's not hard to replace NAND with "whatever flash the board sets"

It could make sense. However, the combinations of boot methods could get quite big, e.g. do we include pxeboot, tftp?

Well, maybe we define some blocks (TRY_MMC, TRY_ENET, TRY_NAND, TRY_SPI, ...) ...

Quoted 8 lines
Quoted 4 lines

If everything was included in the common 'fancy boot' then some boards would have to define boot methods (or stubs) for things they weren't interested in. And, conversely, if fancy boot didn't include everything, then other people would need to extend it.

... provide a few examples of the blocks strung together and have people string up what they need themselves, so long as it's an otherwise good idea to have complex default boot methods?

Quoted 5 lines

If something like this was planned for BeagleBoard anyway, then perhaps it could written in terms of these TRY_MMC etc. macros (which seem like a reasonable idea to me). Then a working prototype could be posted as an RFC for others to comment on? I suspect at the moment there's not many people reading this 'vexpress' thread ;-)

Note that beagleboard already has the switch logic, but I see your point, and it's on my TODO list, hopefully in time for v2012.03 tho.

Signature · 1 line
Tom