Skip to contentSkip to conversation

vexpress64 FVP and Juno configuration updates

PATCH Superseded Ryan Harkin 2 participants 14 messages Oct 1, 2015 – Oct 2, 2015

Subsystems (2)

v3 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

v3 cover vexpress64 FVP and Juno configuration updates

This patch series updates the default configuration of the vexpress64 FVP and Juno platforms to allow it to work on a variety of setups without modification by the user.

[PATCH v3 01/10] vexpress64: fix checkpatch warnings
[PATCH v3 02/10] vexpress64: Kconfig: tidy up
[PATCH v3 03/10] vexpress64: increase max gunzip size
[PATCH v3 04/10] vexpress64: fvp dram: add DRAM configuration [PATCH v3 05/10] vexpress64: juno: add androidboot.hardware=juno [PATCH v3 06/10] common/armflash: add command to check if image exists [PATCH v3 07/10] common/armflash: load_image returns success or failure [PATCH v3 08/10] vexpress64: juno: add optional initrd [PATCH v3 09/10] vexpress64: juno: add alternate kernel and device tree [PATCH v3 10/10] vexpress64: juno: use /dev/sda2

 arch/arm/Kconfig                       |  4 ++++
 board/armltd/vexpress64/Kconfig        | 17 -----------------
 board/armltd/vexpress64/MAINTAINERS    |  5 +++++
 common/cmd_armflash.c                  | 31 ++++++++++++++++++++++++++-----
 configs/vexpress_aemv8a_dram_defconfig | 19 +++++++++++++++++++
 include/configs/vexpress_aemv8a.h      | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++--------
 6 files changed, 107 insertions(+), 30 deletions(-)

Changes since v1:
- dropped the Kconfig changes for CONFIG_SYS_BOOTM_LEN
- added CONFIG_SYS_BOOTM_LEN to include/configs/vexpress_aemv8a.h

Changes since v2:
- fixed warning in cmd_armflash.c due to missing hunk from patch 07/10:
common/cmd_armflash.c:207:4: warning: 'return' with no value, in function returning non-void [-Wreturn-type]

#1 lore raw

PATCH v3 1/10 vexpress64: Kconfig: tidy up

The FVP and Juno settings were identical, but duplicated, so I removed the duplication with this patch.

CC David Feng <[email protected]>
CC Bhupesh Sharma <[email protected]>
CC Linus Walleij <[email protected]>
---
 board/armltd/vexpress64/Kconfig | 17 -----------------
 1 file changed, 17 deletions(-)
board/armltd/vexpress64/Kconfig +0 -17
index f5693ae..8da3bec 100644
@@ -1,5 +1,3 @@
-if TARGET_VEXPRESS64_BASE_FVP
-
 config SYS_BOARD
 	default "vexpress64"
 
@@ -8,18 +6,3 @@ config SYS_VENDOR
 
 config SYS_CONFIG_NAME
 	default "vexpress_aemv8a"
-
-endif
-
-if TARGET_VEXPRESS64_JUNO
-
-config SYS_BOARD
-	default "vexpress64"
-
-config SYS_VENDOR
-	default "armltd"
-
-config SYS_CONFIG_NAME
-	default "vexpress_aemv8a"
-
-endif
Signature · 1 line
2.1.0
#2 lore raw

PATCH v3 2/10 Kconfig: add CONFIG_SYS_BOOTM_LEN

In reply to Ryan Harkin

As config migrates from board config files to Kconfig, when adding CONFIG_SYS_BOOTM_LEN to a platform, I decided to add Kconfig support for CONFIG_SYS_BOOTM_LEN.

CC Masahiro Yamada <[email protected]>
CC Simon Glass <[email protected]>
CC Linus Walleij <[email protected]>
---
 Kconfig | 7 +++++++
 1 file changed, 7 insertions(+)
Kconfig +7 -0
index f364a7a..e86a60d 100644
@@ -190,6 +190,13 @@ config SYS_CLK_FREQ
 	help
 	  TODO: Move CONFIG_SYS_CLK_FREQ for all the architecture
 
+config CONFIG_SYS_BOOTM_LEN
+	hex "Max uImage length"
+	help
+	  Normally compressed uImages are limited to an uncompressed size of
+	  8 MBytes. If this is not enough, you can define CONFIG_SYS_BOOTM_LEN
+	  to adjust this setting to your needs.
+
 endmenu		# Boot images
 
 source "common/Kconfig"
Signature · 1 line
2.1.0
#3 lore raw

PATCH v3 3/10 vexpress64: Kconfig: add CONFIG_SYS_BOOTM_LEN

In reply to Ryan Harkin

vexpress64 kernels are usually over 8 MBytes in length, so setting the max uImage length to 0x4000000 (64 Mbytes) should give us plenty of scope for expansion.

I mostly chose this length to match other board configs that use "(64 << 20)", however, Kconfig doesn't allow arithmetic operations.

CC Masahiro Yamada <yamada.m at jp.panasonic.com
CC Linus Walleij <[email protected]>
---
 board/armltd/vexpress64/Kconfig | 3 +++
 1 file changed, 3 insertions(+)
board/armltd/vexpress64/Kconfig +3 -0
index 8da3bec..72679be 100644
@@ -1,3 +1,6 @@
+config CONFIG_SYS_BOOTM_LEN
+	default 0x4000000
+
 config SYS_BOARD
 	default "vexpress64"
 
Signature · 1 line
2.1.0
#4 lore raw

PATCH v3 4/10 vexpress64: fvp dram: add DRAM configuration

In reply to Ryan Harkin

Create an additional FVP configuration to boot images pre-loaded into DRAM.

Sometimes it's preferential to boot the model by loading the files directly into DRAM via model parameters, rather than using SemiHosting.

An example of model parmaters that are used to pre-load the files into DRAM:

    --data cluster0.cpu0=Image at 0x80080000 \
    --data cluster0.cpu0=fvp-base-gicv2-psci.dtb at 0x83000000 \
    --data cluster0.cpu0=uInitrd at 0x84000000
CC David Feng <[email protected]>
CC Bhupesh Sharma <[email protected]>
CC Linus Walleij <[email protected]>
---
 arch/arm/Kconfig                       |  4 ++++
 configs/vexpress_aemv8a_dram_defconfig | 19 +++++++++++++++++++
 include/configs/vexpress_aemv8a.h      | 25 +++++++++++++++++++++++--
 3 files changed, 46 insertions(+), 2 deletions(-)
arch/arm/Kconfig +4 -0
index 0b07e08..bc16546 100644
@@ -563,6 +563,10 @@ config TARGET_VEXPRESS64_BASE_FVP
 	select ARM64
 	select SEMIHOSTING
 
+config TARGET_VEXPRESS64_BASE_FVP_DRAM
+	bool "Support Versatile Express ARMv8a FVP BASE model booting from DRAM"
+	select ARM64
+
 config TARGET_VEXPRESS64_JUNO
 	bool "Support Versatile Express Juno Development Platform"
 	select ARM64
configs/vexpress_aemv8a_dram_defconfig new file +19 -0
new file mode 100644
index 0000000..e9fc870
@@ -0,0 +1,19 @@
+CONFIG_ARM=y
+CONFIG_TARGET_VEXPRESS64_BASE_FVP_DRAM=y
+CONFIG_SYS_MALLOC_F_LEN=0x2000
+CONFIG_DEFAULT_DEVICE_TREE="vexpress64"
+# CONFIG_CMD_CONSOLE is not set
+# CONFIG_CMD_IMLS is not set
+# CONFIG_CMD_XIMG is not set
+# CONFIG_CMD_EDITENV is not set
+# CONFIG_CMD_ENV_EXISTS is not set
+# CONFIG_CMD_LOADS is not set
+# CONFIG_CMD_FLASH is not set
+# CONFIG_CMD_FPGA is not set
+# CONFIG_CMD_ITEST is not set
+# CONFIG_CMD_SETEXPR is not set
+# CONFIG_CMD_NFS is not set
+# CONFIG_CMD_MISC is not set
+CONFIG_DM=y
+CONFIG_DM_SERIAL=y
+CONFIG_SYS_PROMPT="VExpress64# "
include/configs/vexpress_aemv8a.h +23 -2
index 53b0f74..0228732 100644
@@ -30,7 +30,8 @@
 #define CONFIG_BOOTP_VCI_STRING		"U-boot.armv8.vexpress_aemv8a"
 
 /* Link Definitions */
-#ifdef CONFIG_TARGET_VEXPRESS64_BASE_FVP
+#if defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP) || \
+	defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP_DRAM)
 /* ATF loads u-boot here for BASE_FVP model */
 #define CONFIG_SYS_TEXT_BASE		0x88000000
 #define CONFIG_SYS_INIT_SP_ADDR         (CONFIG_SYS_SDRAM_BASE + 0x03f00000)
@@ -101,7 +102,8 @@
 #define GICR_BASE			(0x2f100000)
 #else
 
-#ifdef CONFIG_TARGET_VEXPRESS64_BASE_FVP
+#if defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP) || \
+	defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP_DRAM)
 #define GICD_BASE			(0x2f000000)
 #define GICC_BASE			(0x2c000000)
 #elif CONFIG_TARGET_VEXPRESS64_JUNO
@@ -231,6 +233,25 @@
 
 #define CONFIG_BOOTDELAY		1
 
+#elif CONFIG_TARGET_VEXPRESS64_BASE_FVP_DRAM
+#define CONFIG_EXTRA_ENV_SETTINGS	\
+				"kernel_addr=0x80080000\0"	\
+				"initrd_addr=0x84000000\0"	\
+				"fdt_addr=0x83000000\0"		\
+				"fdt_high=0xffffffffffffffff\0"	\
+				"initrd_high=0xffffffffffffffff\0"
+
+#define CONFIG_BOOTARGS		"console=ttyAMA0 earlyprintk=pl011,"\
+				"0x1c090000 debug user_debug=31 "\
+				"androidboot.hardware=fvpbase "\
+				"root=/dev/vda2 rw "\
+				"rootwait "\
+				"loglevel=9"
+
+#define CONFIG_BOOTCOMMAND	"booti $kernel_addr $initrd_addr $fdt_addr"
+
+#define CONFIG_BOOTDELAY		1
+
 #else
 #error "Unknown board variant"
 #endif
Signature · 1 line
2.1.0
#5 lore raw

PATCH v3 4/10 vexpress64: fvp dram: add DRAM configuration

I'm sorry about this, it's becoming embarassing: I've dropped the maintainer hunk this time.

I'll stop posting until my jetlag subsides and make sure I've covered all the bases.

Apologies.

Quoted 124 lines · Ryan Harkin

Create an additional FVP configuration to boot images pre-loaded into DRAM.

Sometimes it's preferential to boot the model by loading the files directly into DRAM via model parameters, rather than using SemiHosting.

An example of model parmaters that are used to pre-load the files into DRAM:

    --data cluster0.cpu0=Image at 0x80080000 \
    --data cluster0.cpu0=fvp-base-gicv2-psci.dtb at 0x83000000 \
    --data cluster0.cpu0=uInitrd at 0x84000000
CC David Feng <[email protected]>
CC Bhupesh Sharma <[email protected]>
CC Linus Walleij <[email protected]>
---
 arch/arm/Kconfig                       |  4 ++++
 configs/vexpress_aemv8a_dram_defconfig | 19 +++++++++++++++++++
 include/configs/vexpress_aemv8a.h      | 25 +++++++++++++++++++++++--
 3 files changed, 46 insertions(+), 2 deletions(-)
arch/arm/Kconfig +2 -0
index 0b07e08..bc16546 100644
@@ -563,6 +563,10 @@ config TARGET_VEXPRESS64_BASE_FVP
        select ARM64
        select SEMIHOSTING
 
+config TARGET_VEXPRESS64_BASE_FVP_DRAM
+       bool "Support Versatile Express ARMv8a FVP BASE model booting from

DRAM"

arch/arm/Kconfig +2 -0
+       select ARM64
+
 config TARGET_VEXPRESS64_JUNO
        bool "Support Versatile Express Juno Development Platform"
        select ARM64
configs/vexpress_aemv8a_dram_defconfig new file +19 -0
new file mode 100644
index 0000000..e9fc870
@@ -0,0 +1,19 @@
+CONFIG_ARM=y
+CONFIG_TARGET_VEXPRESS64_BASE_FVP_DRAM=y
+CONFIG_SYS_MALLOC_F_LEN=0x2000
+CONFIG_DEFAULT_DEVICE_TREE="vexpress64"
+# CONFIG_CMD_CONSOLE is not set
+# CONFIG_CMD_IMLS is not set
+# CONFIG_CMD_XIMG is not set
+# CONFIG_CMD_EDITENV is not set
+# CONFIG_CMD_ENV_EXISTS is not set
+# CONFIG_CMD_LOADS is not set
+# CONFIG_CMD_FLASH is not set
+# CONFIG_CMD_FPGA is not set
+# CONFIG_CMD_ITEST is not set
+# CONFIG_CMD_SETEXPR is not set
+# CONFIG_CMD_NFS is not set
+# CONFIG_CMD_MISC is not set
+CONFIG_DM=y
+CONFIG_DM_SERIAL=y
+CONFIG_SYS_PROMPT="VExpress64# "
include/configs/vexpress_aemv8a.h +0 -0
index 53b0f74..0228732 100644
@@ -30,7 +30,8 @@
 #define CONFIG_BOOTP_VCI_STRING

"U-boot.armv8.vexpress_aemv8a"

/* Link Definitions */

include/configs/vexpress_aemv8a.h +2 -1
-#ifdef CONFIG_TARGET_VEXPRESS64_BASE_FVP
+#if defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP) || \
+       defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP_DRAM)
 /* ATF loads u-boot here for BASE_FVP model */
 #define CONFIG_SYS_TEXT_BASE           0x88000000
 #define CONFIG_SYS_INIT_SP_ADDR         (CONFIG_SYS_SDRAM_BASE +

0x03f00000)

include/configs/vexpress_aemv8a.h +21 -1
@@ -101,7 +102,8 @@
 #define GICR_BASE                      (0x2f100000)
 #else
 
-#ifdef CONFIG_TARGET_VEXPRESS64_BASE_FVP
+#if defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP) || \
+       defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP_DRAM)
 #define GICD_BASE                      (0x2f000000)
 #define GICC_BASE                      (0x2c000000)
 #elif CONFIG_TARGET_VEXPRESS64_JUNO
@@ -231,6 +233,25 @@
 
 #define CONFIG_BOOTDELAY               1
 
+#elif CONFIG_TARGET_VEXPRESS64_BASE_FVP_DRAM
+#define CONFIG_EXTRA_ENV_SETTINGS      \
+                               "kernel_addr=0x80080000\0"      \
+                               "initrd_addr=0x84000000\0"      \
+                               "fdt_addr=0x83000000\0"         \
+                               "fdt_high=0xffffffffffffffff\0" \
+                               "initrd_high=0xffffffffffffffff\0"
+
+#define CONFIG_BOOTARGS                "console=ttyAMA0
 earlyprintk=pl011,"\
+                               "0x1c090000 debug user_debug=31 "\
+                               "androidboot.hardware=fvpbase "\
+                               "root=/dev/vda2 rw "\
+                               "rootwait "\
+                               "loglevel=9"
+
+#define CONFIG_BOOTCOMMAND     "booti $kernel_addr $initrd_addr $fdt_addr"
+
+#define CONFIG_BOOTDELAY               1
+
 #else
 #error "Unknown board variant"

#endif
--
2.1.0

#6 lore raw

PATCH v3 5/10 vexpress64: juno: add androidboot.hardware=juno

In reply to Ryan Harkin

Linaro's Juno Android builds requires the androidboot.hardware parameter be set to a know board name.

Non-Android kernels ignore this extra parameter because they don't contain code to parse it.

CC David Feng <[email protected]>
CC Bhupesh Sharma <[email protected]>
CC Linus Walleij <[email protected]>
---
 include/configs/vexpress_aemv8a.h | 1 +
 1 file changed, 1 insertion(+)
include/configs/vexpress_aemv8a.h +1 -0
index 0228732..5198b32 100644
@@ -198,6 +198,7 @@
 				"rootwait "\
 				"earlyprintk=pl011,0x7ff80000 debug "\
 				"user_debug=31 "\
+				"androidboot.hardware=juno "\
 				"loglevel=9"
 
 /* Copy the kernel and FDT to DRAM memory and boot */
Signature · 1 line
2.1.0
#7 lore raw

PATCH v3 6/10 common/armflash: add command to check if image exists

In reply to Ryan Harkin

Add a command to the ARM flash support to check if an image exists or not.

If the image is found, it will return CMD_RET_SUCCESS, else CMD_RET_FAILURE. This allows hush scripts to conditionally load images.

A simple example:

if afs exists ${kernel_name}; then echo found; else echo \
not found; fi

CC David Feng <[email protected]>
CC Bhupesh Sharma <[email protected]>
CC Linus Walleij <[email protected]>
---
 common/cmd_armflash.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)
common/cmd_armflash.c +21 -1
index 1db92b0..a37f5c4 100644
@@ -251,10 +251,28 @@ static void print_images(void)
 	}
 }
 
+static int exists(const char * const name)
+{
+	int i;
+
+	parse_flash();
+	for (i = 0; i < num_afs_images; i++) {
+		struct afs_image *afi = &afs_images[i];
+
+		if (strcmp(afi->name, name) == 0)
+			return CMD_RET_SUCCESS;
+	}
+	return CMD_RET_FAILURE;
+}
+
 static int do_afs(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
+	int ret = CMD_RET_SUCCESS;
+
 	if (argc == 1) {
 		print_images();
+	} else if (argc == 3 && !strcmp(argv[1], "exists")) {
+		ret = exists(argv[2]);
 	} else if (argc == 3 && !strcmp(argv[1], "load")) {
 		load_image(argv[2], 0x0);
 	} else if (argc == 4 && !strcmp(argv[1], "load")) {
@@ -266,12 +284,14 @@ static int do_afs(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		return CMD_RET_USAGE;
 	}
 
-	return 0;
+	return ret;
 }
 
 U_BOOT_CMD(afs, 4, 0, do_afs, "show AFS partitions",
 	   "no arguments\n"
 	   "    - list images in flash\n"
+	   "exists <image>\n"
+	   "    - returns 1 if an image exists, else 0\n"
 	   "load <image>\n"
 	   "    - load an image to the location indicated in the header\n"
 	   "load <image> 0x<address>\n"
Signature · 1 line
2.1.0
#8 lore raw

PATCH v3 7/10 common/armflash: load_image returns success or failure

In reply to Ryan Harkin

Change the load_image so that it returns success or failure of the command (using CMD_RET_SUCCESS or CMD_RET_FAILURE).

This way, hush scripts can optionally load different files depending upon the system configuration.

A simple example:

if afs load ${kernel_name} ${kernel_addr}; then echo loaded; else echo \
not loaded; fi

---
 common/cmd_armflash.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
common/cmd_armflash.c +6 -5
index a37f5c4..af453f7 100644
@@ -175,7 +175,7 @@ static void parse_flash(void)
 		parse_bank(bank);
 }
 
-static void load_image(const char * const name, const ulong address)
+static int load_image(const char * const name, const ulong address)
 {
 	struct afs_image *afi = NULL;
 	int i;
@@ -191,7 +191,7 @@ static void load_image(const char * const name, const ulong address)
 	}
 	if (!afi) {
 		printf("image \"%s\" not found in flash\n", name);
-		return;
+		return CMD_RET_FAILURE;
 	}
 
 	for (i = 0; i < afi->region_count; i++) {
@@ -204,7 +204,7 @@ static void load_image(const char * const name, const ulong address)
 			to = afi->regions[i].load_address;
 		} else {
 			printf("no valid load address\n");
-			return;
+			return CMD_RET_FAILURE;
 		}
 
 		memcpy((void *)to, (void *)from, afi->regions[i].size);
@@ -215,6 +215,7 @@ static void load_image(const char * const name, const ulong address)
 		       to,
 		       afi->regions[i].size);
 	}
+	return CMD_RET_SUCCESS;
 }
 
 static void print_images(void)
@@ -274,12 +275,12 @@ static int do_afs(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	} else if (argc == 3 && !strcmp(argv[1], "exists")) {
 		ret = exists(argv[2]);
 	} else if (argc == 3 && !strcmp(argv[1], "load")) {
-		load_image(argv[2], 0x0);
+		ret = load_image(argv[2], 0x0);
 	} else if (argc == 4 && !strcmp(argv[1], "load")) {
 		ulong load_addr;
 
 		load_addr = simple_strtoul(argv[3], NULL, 16);
-		load_image(argv[2], load_addr);
+		ret = load_image(argv[2], load_addr);
 	} else {
 		return CMD_RET_USAGE;
 	}
Signature · 1 line
2.1.0
#9 lore raw

PATCH v3 8/10 vexpress64: juno: add optional initrd

In reply to Ryan Harkin

Some OS images require an initrd on Juno.

If the file ramdisk.img exists in NOR flash, then we load it and pass the address to the kernel. Otherwise, we pass the "-" parameter as before.

CC David Feng <[email protected]>
CC Bhupesh Sharma <[email protected]>
CC Linus Walleij <[email protected]>
---
 include/configs/vexpress_aemv8a.h | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
include/configs/vexpress_aemv8a.h +8 -1
index 5198b32..c62c3ac 100644
@@ -187,6 +187,8 @@
 #define CONFIG_EXTRA_ENV_SETTINGS	\
 				"kernel_name=Image\0"	\
 				"kernel_addr=0x80000000\0" \
+				"initrd_name=ramdisk.img\0"	\
+				"initrd_addr=0x84000000\0"	\
 				"fdt_name=juno\0" \
 				"fdt_addr=0x83000000\0" \
 				"fdt_high=0xffffffffffffffff\0" \
@@ -205,7 +207,12 @@
 #define CONFIG_BOOTCOMMAND	"afs load ${kernel_name} ${kernel_addr} ; " \
 				"afs load  ${fdt_name} ${fdt_addr} ; " \
 				"fdt addr ${fdt_addr}; fdt resize; " \
-				"booti ${kernel_addr} - ${fdt_addr}"
+				"if afs load  ${initrd_name} ${initrd_addr} ; "\
+				"then "\
+				"  setenv initrd_param ${initrd_addr}; "\
+				"  else setenv initrd_param -; "\
+				"fi ; " \
+				"booti ${kernel_addr} ${initrd_param} ${fdt_addr}"
 
 #define CONFIG_BOOTDELAY		1
 
Signature · 1 line
2.1.0
#10 lore raw

PATCH v3 9/10 vexpress64: juno: add alternate kernel and device tree filenames

In reply to Ryan Harkin

The default Juno firmware has renamed the kernel and device tree filenames to norkern and board.dtb.

Rather than change the default configuration to use the new names, breaking those with the old firmware, attempt to load the existing filename first. If that fails, attempt to load the alternate filename.

I've echo'd that we are loading the alternate file to counter the output from "afs load" when the first load attempt fails. For example, I see this output on my Juno board:

image "Image" not found in flash
Loading norkern instead of Image
loaded region 0 from 08500000 to 80000000, 00AB6318 bytes image "juno" not found in flash
Loading board.dtb instead of juno
loaded region 0 from 0A000000 to 83000000, 00003188 bytes

CC David Feng <[email protected]>
CC Bhupesh Sharma <[email protected]>
CC Linus Walleij <[email protected]>
---
 include/configs/vexpress_aemv8a.h | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)
include/configs/vexpress_aemv8a.h +14 -2
index c62c3ac..192568a 100644
@@ -185,11 +185,13 @@
  * be copied into DRAM
  */
 #define CONFIG_EXTRA_ENV_SETTINGS	\
-				"kernel_name=Image\0"	\
+				"kernel_name=norkern\0"	\
+				"kernel_alt_name=Image\0"	\
 				"kernel_addr=0x80000000\0" \
 				"initrd_name=ramdisk.img\0"	\
 				"initrd_addr=0x84000000\0"	\
-				"fdt_name=juno\0" \
+				"fdt_name=board.dtb\0" \
+				"fdt_alt_name=juno\0" \
 				"fdt_addr=0x83000000\0" \
 				"fdt_high=0xffffffffffffffff\0" \
 				"initrd_high=0xffffffffffffffff\0" \
@@ -205,7 +207,17 @@
 
 /* Copy the kernel and FDT to DRAM memory and boot */
 #define CONFIG_BOOTCOMMAND	"afs load ${kernel_name} ${kernel_addr} ; " \
+				"if test $? -eq 1; then "\
+				"  echo Loading ${kernel_alt_name} instead of "\
+				"${kernel_name}; "\
+				"  afs load ${kernel_alt_name} ${kernel_addr};"\
+				"fi ; "\
 				"afs load  ${fdt_name} ${fdt_addr} ; " \
+				"if test $? -eq 1; then "\
+				"  echo Loading ${fdt_alt_name} instead of "\
+				"${fdt_name}; "\
+				"  afs load ${fdt_alt_name} ${fdt_addr}; "\
+				"fi ; "\
 				"fdt addr ${fdt_addr}; fdt resize; " \
 				"if afs load  ${initrd_name} ${initrd_addr} ; "\
 				"then "\
Signature · 1 line
2.1.0
#11 lore raw

PATCH v3 9/10 vexpress64: juno: add alternate kernel and device tree filenames

Hi Ryan,

Quoted 6 lines · Ryan Harkin

The default Juno firmware has renamed the kernel and device tree filenames to norkern and board.dtb.

Rather than change the default configuration to use the new names, breaking those with the old firmware, attempt to load the existing filename first. If that fails, attempt to load the alternate filename.

How about future proofing this and add a board.scr image in Juno firmware where a script can be stored (can the image be used by UEFI as well?).

Now that you are adding support for testing if an image is present we can then source the script at boot.scr. That would allow Juno r1 for example to have a different boot script than r0 (smc911x ethernet port was designed as a backup solution until PCIe was functional, so one might not want to use it for booting).

Thoughts?

Best regards,
Liviu

Quoted 66 lines

I've echo'd that we are loading the alternate file to counter the output from "afs load" when the first load attempt fails. For example, I see this output on my Juno board:

image "Image" not found in flash
Loading norkern instead of Image
loaded region 0 from 08500000 to 80000000, 00AB6318 bytes image "juno" not found in flash
Loading board.dtb instead of juno
loaded region 0 from 0A000000 to 83000000, 00003188 bytes

CC David Feng <[email protected]>
CC Bhupesh Sharma <[email protected]>
CC Linus Walleij <[email protected]>
---
 include/configs/vexpress_aemv8a.h | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)
include/configs/vexpress_aemv8a.h +14 -2
index c62c3ac..192568a 100644
@@ -185,11 +185,13 @@
  * be copied into DRAM
  */
 #define CONFIG_EXTRA_ENV_SETTINGS	\
-				"kernel_name=Image\0"	\
+				"kernel_name=norkern\0"	\
+				"kernel_alt_name=Image\0"	\
 				"kernel_addr=0x80000000\0" \
 				"initrd_name=ramdisk.img\0"	\
 				"initrd_addr=0x84000000\0"	\
-				"fdt_name=juno\0" \
+				"fdt_name=board.dtb\0" \
+				"fdt_alt_name=juno\0" \
 				"fdt_addr=0x83000000\0" \
 				"fdt_high=0xffffffffffffffff\0" \
 				"initrd_high=0xffffffffffffffff\0" \
@@ -205,7 +207,17 @@
 
 /* Copy the kernel and FDT to DRAM memory and boot */
 #define CONFIG_BOOTCOMMAND	"afs load ${kernel_name} ${kernel_addr} ; " \
+				"if test $? -eq 1; then "\
+				"  echo Loading ${kernel_alt_name} instead of "\
+				"${kernel_name}; "\
+				"  afs load ${kernel_alt_name} ${kernel_addr};"\
+				"fi ; "\
 				"afs load  ${fdt_name} ${fdt_addr} ; " \
+				"if test $? -eq 1; then "\
+				"  echo Loading ${fdt_alt_name} instead of "\
+				"${fdt_name}; "\
+				"  afs load ${fdt_alt_name} ${fdt_addr}; "\
+				"fi ; "\
 				"fdt addr ${fdt_addr}; fdt resize; " \
 				"if afs load  ${initrd_name} ${initrd_addr} ; "\
 				"then "\
Signature · 6 lines
2.1.0

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot
Signature · 10 lines
-------------------
   .oooO
   (   )
    \ (  Oooo.
     \_) (   )
          ) /
         (_/

 One small step
   for me ...
#12 lore raw

PATCH v3 9/10 vexpress64: juno: add alternate kernel and device tree filenames

Hi Liviu,

Quoted 13 lines · Liviu Dudau

Hi Ryan,

Quoted 6 lines · Ryan Harkin

The default Juno firmware has renamed the kernel and device tree filenames to norkern and board.dtb.

Rather than change the default configuration to use the new names, breaking those with the old firmware, attempt to load the existing filename first. If that fails, attempt to load the alternate filename.

How about future proofing this and add a board.scr image in Juno firmware where a script can be stored (can the image be used by UEFI as well?).

Quoted 8 lines

Now that you are adding support for testing if an image is present we can then source the script at boot.scr. That would allow Juno r1 for example to have a different boot script than r0 (smc911x ethernet port was designed as a backup solution until PCIe was functional, so one might not want to use it for booting).

Thoughts?

Sounds like a good idea. I'll have a play with it here and see what I can come up with.

Quoted 89 lines

Best regards,
Liviu

Quoted 17 lines

I've echo'd that we are loading the alternate file to counter the output from "afs load" when the first load attempt fails. For example, I see this output on my Juno board:

image "Image" not found in flash
Loading norkern instead of Image
loaded region 0 from 08500000 to 80000000, 00AB6318 bytes image "juno" not found in flash
Loading board.dtb instead of juno
loaded region 0 from 0A000000 to 83000000, 00003188 bytes

CC David Feng <[email protected]>
CC Bhupesh Sharma <[email protected]>
CC Linus Walleij <[email protected]>

Review

Quoted 5 lines
---
 include/configs/vexpress_aemv8a.h | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)
(quoted diff) +0 -0

b/include/configs/vexpress_aemv8a.h

Quoted 20 lines

index c62c3ac..192568a 100644

include/configs/vexpress_aemv8a.h +4 -2
@@ -185,11 +185,13 @@
  * be copied into DRAM
  */
 #define CONFIG_EXTRA_ENV_SETTINGS    \
-                             "kernel_name=Image\0"   \
+                             "kernel_name=norkern\0" \
+                             "kernel_alt_name=Image\0"       \
                              "kernel_addr=0x80000000\0" \
                              "initrd_name=ramdisk.img\0"     \
                              "initrd_addr=0x84000000\0"      \
-                             "fdt_name=juno\0" \
+                             "fdt_name=board.dtb\0" \
+                             "fdt_alt_name=juno\0" \
                              "fdt_addr=0x83000000\0" \
                              "fdt_high=0xffffffffffffffff\0" \
                              "initrd_high=0xffffffffffffffff\0" \

include/configs/vexpress_aemv8a.h line 209

Quoted 3 lines
include/configs/vexpress_aemv8a.h +0 -0
@@ -205,7 +207,17 @@
 
 /* Copy the kernel and FDT to DRAM memory and boot */
 #define CONFIG_BOOTCOMMAND   "afs load ${kernel_name} ${kernel_addr} ;

" \

include/configs/vexpress_aemv8a.h line 211

Quoted 2 lines
include/configs/vexpress_aemv8a.h +2 -0
+                             "if test $? -eq 1; then "\
+                             "  echo Loading ${kernel_alt_name} instead

of "\

include/configs/vexpress_aemv8a.h line 213

Quoted 2 lines
include/configs/vexpress_aemv8a.h +2 -0
+                             "${kernel_name}; "\
+                             "  afs load ${kernel_alt_name}

${kernel_addr};"\

include/configs/vexpress_aemv8a.h

Quoted 4 lines
include/configs/vexpress_aemv8a.h +3 -0
+                             "fi ; "\
                              "afs load  ${fdt_name} ${fdt_addr} ; " \
+                             "if test $? -eq 1; then "\
+                             "  echo Loading ${fdt_alt_name} instead of

"\

include/configs/vexpress_aemv8a.h

Quoted 5 lines
include/configs/vexpress_aemv8a.h +3 -0
+                             "${fdt_name}; "\
+                             "  afs load ${fdt_alt_name} ${fdt_addr}; "\
+                             "fi ; "\
                              "fdt addr ${fdt_addr}; fdt resize; " \
                              "if afs load  ${initrd_name}

${initrd_addr} ; "\

Quoted 8 lines
include/configs/vexpress_aemv8a.h +0 -1
                              "then "\
--

2.1.0

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

--
-------------------
.oooO
( )

    \ (  Oooo.
     \_) (   )
          ) /
         (_/

One small step
for me ...

#13 lore raw

PATCH v3 10/10 vexpress64: juno: use /dev/sda2

In reply to Ryan Harkin

This patch changes the default "root=" parameter to "/dev/sda2".

Many linux based distros use /dev/sda1 for their boot partition; this is often not a rootfs that can be used by the "root=" parameter.

Linaro images use /dev/sda1 as a boot partition, although this of a different nature to a distro image. Linaro uses /dev/sda2 for the rootfs partition.

CC David Feng <[email protected]>
CC Bhupesh Sharma <[email protected]>
CC Linus Walleij <[email protected]>
---
 include/configs/vexpress_aemv8a.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
include/configs/vexpress_aemv8a.h +1 -1
index 192568a..4054f58 100644
@@ -198,7 +198,7 @@
 
 /* Assume we boot with root on the first partition of a USB stick */
 #define CONFIG_BOOTARGS		"console=ttyAMA0,115200n8 " \
-				"root=/dev/sda1 rw " \
+				"root=/dev/sda2 rw " \
 				"rootwait "\
 				"earlyprintk=pl011,0x7ff80000 debug "\
 				"user_debug=31 "\
Signature · 1 line
2.1.0