* [PATCH 1/4] bloblist: fix typo in code comments
2025-02-04 17:58 [PATCH v3 0/4] Enable bloblist support on Vexpress64 Harrison Mutai
@ 2025-02-04 17:58 ` Harrison Mutai
2025-02-04 17:58 ` [PATCH 2/4] board: vexpress64: default to hardware device tree Harrison Mutai
` (3 subsequent siblings)
4 siblings, 0 replies; 10+ messages in thread
From: Harrison Mutai @ 2025-02-04 17:58 UTC (permalink / raw)
To: Tom Rini; +Cc: nd, andre.przywara, manish.pandey2, Harrison Mutai, u-boot
Fix the two typos in the spelling of same and set in common/Kconfig and
include/bloblist.h.
Signed-off-by: Harrison Mutai <harrison.mutai@arm.com>
---
common/Kconfig | 6 +++---
include/bloblist.h | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/common/Kconfig b/common/Kconfig
index 7685914fa6..f9489872fd 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -1055,8 +1055,8 @@ choice
config BLOBLIST_FIXED
bool "Place bloblist at a fixed address in memory"
help
- Select this to used a fixed memory address for the bloblist. If the
- bloblist exists at this address from a previous phase, it used as is.
+ Select this to use a fixed memory address for the bloblist. If the
+ bloblist exists at this address from a previous phase, it is used as is.
If not it is created at this address in U-Boot.
config BLOBLIST_ALLOC
@@ -1085,7 +1085,7 @@ config BLOBLIST_SIZE
Sets the size of the bloblist in bytes. This must include all
overhead (alignment, bloblist header, record header). The bloblist
is set up in the first part of U-Boot to run (TPL, SPL or U-Boot
- proper), and this sane bloblist is used for subsequent phases.
+ proper), and this same bloblist is used for subsequent phases.
config BLOBLIST_SIZE_RELOC
hex "Size of bloblist after relocation"
diff --git a/include/bloblist.h b/include/bloblist.h
index f999391f74..03d9862c0f 100644
--- a/include/bloblist.h
+++ b/include/bloblist.h
@@ -463,7 +463,7 @@ int bloblist_init(void);
/**
* bloblist_maybe_init() - Init the bloblist system if not already done
*
- * Calls bloblist_init() if the GD_FLG_BLOBLIST_READY flag is not et
+ * Calls bloblist_init() if the GD_FLG_BLOBLIST_READY flag is not set
*
* Return: 0 if OK, -ve on error
*/
--
2.46.2
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 2/4] board: vexpress64: default to hardware device tree
2025-02-04 17:58 [PATCH v3 0/4] Enable bloblist support on Vexpress64 Harrison Mutai
2025-02-04 17:58 ` [PATCH 1/4] bloblist: fix typo in code comments Harrison Mutai
@ 2025-02-04 17:58 ` Harrison Mutai
2025-02-04 17:58 ` [PATCH 3/4] bloblist: add support for CONFIG_BLOBLIST_PASSAGE Harrison Mutai
` (2 subsequent siblings)
4 siblings, 0 replies; 10+ messages in thread
From: Harrison Mutai @ 2025-02-04 17:58 UTC (permalink / raw)
To: Liviu Dudau, Tom Rini
Cc: nd, andre.przywara, manish.pandey2, Harrison Mutai, u-boot
When booting into the Linux kernel with semi-hosting, use the device
tree provided by hardware unless one is provided in the current
directory.
Signed-off-by: Harrison Mutai <harrison.mutai@arm.com>
---
include/configs/vexpress_aemv8.h | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/include/configs/vexpress_aemv8.h b/include/configs/vexpress_aemv8.h
index b5a17f93ef..5eee13b3fc 100644
--- a/include/configs/vexpress_aemv8.h
+++ b/include/configs/vexpress_aemv8.h
@@ -181,12 +181,14 @@
" if load hostfs - ${kernel_addr_r} ${kernel_name}; then" \
" setenv fdt_high 0xffffffffffffffff;" \
" setenv initrd_high 0xffffffffffffffff;" \
- " load hostfs - ${fdt_addr_r} ${fdtfile};" \
+ " if test -n load hostfs - ${fdt_addr_r} ${fdtfile}; then" \
+ " fdt move $fdtcontroladdr $fdt_addr_r;" \
+ " fi;" \
" load hostfs - ${ramdisk_addr_r} ${ramdisk_name};" \
" fdt addr ${fdt_addr_r};" \
" fdt resize;" \
" fdt chosen ${ramdisk_addr_r} ${filesize};" \
- " booti $kernel_addr_r - $fdt_addr_r;" \
+ " booti $kernel_addr_r - ${fdt_addr_r};" \
" fi;" \
"fi\0"
#define BOOTENV_DEV_NAME_SMH(devtypeu, devtypel, instance) "smh "
--
2.46.2
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 3/4] bloblist: add support for CONFIG_BLOBLIST_PASSAGE
2025-02-04 17:58 [PATCH v3 0/4] Enable bloblist support on Vexpress64 Harrison Mutai
2025-02-04 17:58 ` [PATCH 1/4] bloblist: fix typo in code comments Harrison Mutai
2025-02-04 17:58 ` [PATCH 2/4] board: vexpress64: default to hardware device tree Harrison Mutai
@ 2025-02-04 17:58 ` Harrison Mutai
2025-02-04 17:58 ` [PATCH 4/4] board: vexpress64: enable bloblist for SPL handoff Harrison Mutai
2025-02-12 2:08 ` [PATCH v3 0/4] Enable bloblist support on Vexpress64 Tom Rini
4 siblings, 0 replies; 10+ messages in thread
From: Harrison Mutai @ 2025-02-04 17:58 UTC (permalink / raw)
To: Tom Rini; +Cc: nd, andre.przywara, manish.pandey2, Harrison Mutai, u-boot
When the configuration option CONFIG_BLOBLIST_PASSAGE is selected, the
bloblist present in the incoming standard passage is utilised in-place.
There is no need to specify the size of the bloblist as the system
automatically detects it using the header information.
Signed-off-by: Harrison Mutai <harrison.mutai@arm.com>
---
common/Kconfig | 8 +++++++-
common/bloblist.c | 18 ++++++++++--------
2 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/common/Kconfig b/common/Kconfig
index f9489872fd..7b2db46ef0 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -1066,6 +1066,12 @@ config BLOBLIST_ALLOC
specify a fixed address on systems where this is unknown or can
change at runtime.
+config BLOBLIST_PASSAGE
+ bool "Use bloblist in-place"
+ help
+ Use a bloblist in the incoming standard passage. The size is detected
+ automatically so CONFIG_BLOBLIST_SIZE can be 0.
+
endchoice
config BLOBLIST_ADDR
@@ -1080,6 +1086,7 @@ config BLOBLIST_ADDR
config BLOBLIST_SIZE
hex "Size of bloblist"
+ default 0x0 if BLOBLIST_PASSAGE
default 0x400
help
Sets the size of the bloblist in bytes. This must include all
@@ -1090,7 +1097,6 @@ config BLOBLIST_SIZE
config BLOBLIST_SIZE_RELOC
hex "Size of bloblist after relocation"
default BLOBLIST_SIZE if BLOBLIST_FIXED || BLOBLIST_ALLOC
- default 0x0 if BLOBLIST_PASSAGE
default 0x20000 if (ARM && EFI_LOADER && GENERATE_ACPI_TABLE)
help
Sets the size of the bloblist in bytes after relocation. Since U-Boot
diff --git a/common/bloblist.c b/common/bloblist.c
index 110bb9dc44..1fcd387593 100644
--- a/common/bloblist.c
+++ b/common/bloblist.c
@@ -475,6 +475,9 @@ int bloblist_reloc(void *to, uint to_size)
{
struct bloblist_hdr *hdr;
+ if (!to_size)
+ return 0;
+
if (to_size < gd->bloblist->total_size)
return -ENOSPC;
@@ -505,13 +508,6 @@ int bloblist_init(void)
* at a fixed address.
*/
bool from_addr = fixed && !xpl_is_first_phase();
- /*
- * If U-Boot is in the first phase that an arch custom routine should
- * install the bloblist passed from previous loader to this fixed
- * address.
- */
- bool from_boot_arg = fixed && xpl_is_first_phase();
-
if (xpl_prev_phase() == PHASE_TPL && !IS_ENABLED(CONFIG_TPL_BLOBLIST))
from_addr = false;
if (fixed)
@@ -519,7 +515,13 @@ int bloblist_init(void)
CONFIG_BLOBLIST_ADDR);
size = CONFIG_BLOBLIST_SIZE;
- if (from_boot_arg)
+
+ /*
+ * If the current boot stage is the first phase of U-Boot, then an
+ * architecture-specific routine should be used to handle the bloblist
+ * passed from the previous boot loader
+ */
+ if (xpl_is_first_phase() && !IS_ENABLED(CONFIG_BLOBLIST_ALLOC))
ret = xferlist_from_boot_arg(addr, size);
else if (from_addr)
ret = bloblist_check(addr, size);
--
2.46.2
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 4/4] board: vexpress64: enable bloblist for SPL handoff
2025-02-04 17:58 [PATCH v3 0/4] Enable bloblist support on Vexpress64 Harrison Mutai
` (2 preceding siblings ...)
2025-02-04 17:58 ` [PATCH 3/4] bloblist: add support for CONFIG_BLOBLIST_PASSAGE Harrison Mutai
@ 2025-02-04 17:58 ` Harrison Mutai
2025-02-12 2:08 ` [PATCH v3 0/4] Enable bloblist support on Vexpress64 Tom Rini
4 siblings, 0 replies; 10+ messages in thread
From: Harrison Mutai @ 2025-02-04 17:58 UTC (permalink / raw)
To: Liviu Dudau, Tom Rini
Cc: nd, andre.przywara, manish.pandey2, Harrison Mutai, u-boot
Enable bloblist on vexpress64 platforms to facilitate information
passing from TF-A using the firmware handoff framework.
Signed-off-by: Harrison Mutai <harrison.mutai@arm.com>
---
board/armltd/vexpress64/Kconfig | 2 +-
board/armltd/vexpress64/Makefile | 5 ++++-
board/armltd/vexpress64/vexpress64.c | 4 ++++
configs/vexpress_fvp_bloblist_defconfig | 5 +++++
doc/board/armltd/vexpress64.rst | 16 ++++++++++++++++
5 files changed, 30 insertions(+), 2 deletions(-)
create mode 100644 configs/vexpress_fvp_bloblist_defconfig
diff --git a/board/armltd/vexpress64/Kconfig b/board/armltd/vexpress64/Kconfig
index 584b5455e9..7e8709444f 100644
--- a/board/armltd/vexpress64/Kconfig
+++ b/board/armltd/vexpress64/Kconfig
@@ -28,7 +28,7 @@ choice
config TARGET_VEXPRESS64_BASE_FVP
bool "Support Versatile Express ARMv8a FVP BASE model"
select VEXPRESS64_BASE_MODEL
- imply OF_HAS_PRIOR_STAGE
+ imply OF_HAS_PRIOR_STAGE if !BLOBLIST
config TARGET_VEXPRESS64_BASER_FVP
bool "Support Versatile Express ARMv8r64 FVP BASE model"
diff --git a/board/armltd/vexpress64/Makefile b/board/armltd/vexpress64/Makefile
index 1878fbed4e..b0dd1d0af8 100644
--- a/board/armltd/vexpress64/Makefile
+++ b/board/armltd/vexpress64/Makefile
@@ -3,5 +3,8 @@
# (C) Copyright 2000-2004
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-obj-y := vexpress64.o lowlevel_init.o
+obj-y := vexpress64.o
+
+obj-$(CONFIG_OF_HAS_PRIOR_STAGE) += lowlevel_init.o
+
obj-$(CONFIG_TARGET_VEXPRESS64_JUNO) += pcie.o
diff --git a/board/armltd/vexpress64/vexpress64.c b/board/armltd/vexpress64/vexpress64.c
index b5ede58757..0b75c1358f 100644
--- a/board/armltd/vexpress64/vexpress64.c
+++ b/board/armltd/vexpress64/vexpress64.c
@@ -100,7 +100,9 @@ int dram_init_banksize(void)
* Push the variable into the .data section so that it
* does not get cleared later.
*/
+#ifdef CONFIG_OF_HAS_PRIOR_STAGE
unsigned long __section(".data") prior_stage_fdt_address[2];
+#endif
#ifdef CONFIG_OF_BOARD
@@ -151,6 +153,7 @@ static phys_addr_t find_dtb_in_nor_flash(const char *partname)
}
#endif
+#ifdef CONFIG_OF_HAS_PRIOR_STAGE
/*
* Filter for a valid DTB, as TF-A happens to provide a pointer to some
* data structure using the DTB format, which we cannot use.
@@ -201,6 +204,7 @@ int board_fdt_blob_setup(void **fdtp)
return -ENXIO;
}
#endif
+#endif
/* Actual reset is done via PSCI. */
void reset_cpu(void)
diff --git a/configs/vexpress_fvp_bloblist_defconfig b/configs/vexpress_fvp_bloblist_defconfig
new file mode 100644
index 0000000000..dcc87db872
--- /dev/null
+++ b/configs/vexpress_fvp_bloblist_defconfig
@@ -0,0 +1,5 @@
+#include <configs/vexpress_fvp_defconfig>
+
+CONFIG_BLOBLIST=y
+CONFIG_BLOBLIST_PASSAGE=y
+CONFIG_BLOBLIST_SIZE_RELOC=0x10000
diff --git a/doc/board/armltd/vexpress64.rst b/doc/board/armltd/vexpress64.rst
index a7f771d266..4dadadb53d 100644
--- a/doc/board/armltd/vexpress64.rst
+++ b/doc/board/armltd/vexpress64.rst
@@ -43,6 +43,22 @@ Juno is an Arm development board with the following features:
More details can be found in the board documentation [3]_.
+Bloblist Support
+----------------
+
+The ``vexpress_fvp_bloblist_defconfig`` configures U-Boot to be compiled for
+Vexpress64 with Bloblist as the primary method for information handoff between
+boot stages. U-Boot offers three methods to set up a bloblist: using a
+predefined bloblist at a specified address, dynamically allocating memory for a
+bloblist, or utilizing a standard passage-provided bloblist with automatic size
+detection.
+
+By default, ``vexpress_fvp_bloblist_defconfig`` uses the standard passage method
+(CONFIG_BLOBLIST_PASSAGE) because TF-A provides a Transfer List in non-secure
+memory that U-Boot can utilise. This Bloblist, which is referred to as a Transfer List in
+TF-A, contains all necessary data for the handoff process, including DT and ACPI
+tables.
+
References
----------
--
2.46.2
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH v3 0/4] Enable bloblist support on Vexpress64
2025-02-04 17:58 [PATCH v3 0/4] Enable bloblist support on Vexpress64 Harrison Mutai
` (3 preceding siblings ...)
2025-02-04 17:58 ` [PATCH 4/4] board: vexpress64: enable bloblist for SPL handoff Harrison Mutai
@ 2025-02-12 2:08 ` Tom Rini
4 siblings, 0 replies; 10+ messages in thread
From: Tom Rini @ 2025-02-12 2:08 UTC (permalink / raw)
To: Harrison Mutai; +Cc: nd, andre.przywara, manish.pandey2, u-boot
On Tue, 04 Feb 2025 17:58:38 +0000, Harrison Mutai wrote:
> This series of patches enhances the vexpress64 platform by enabling bloblist
> support. It also introduces support for CONFIG_BLOBLIST_PASSAGE. This is
> necessary to boot vexpress64 and other boards without manually specifying a
> fixed address and size for the bloblist.
>
> After this change, all the bloblist init modes are supported (i.e., fixed,
> alloc, passage) and Vexpress64 boots with CONFIG_BLOBLIST_PASSAGE.
>
> [...]
Applied to u-boot/next, thanks!
--
Tom
^ permalink raw reply [flat|nested] 10+ messages in thread