summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/Kconfig14
-rw-r--r--common/bloblist.c7
-rw-r--r--configs/vexpress_fvp_bloblist_defconfig2
-rw-r--r--doc/board/armltd/vexpress64.rst4
-rw-r--r--include/bloblist.h5
5 files changed, 21 insertions, 11 deletions
diff --git a/common/Kconfig b/common/Kconfig
index 7b2db46ef06..1d6de8badf7 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -1066,11 +1066,15 @@ 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"
+config BLOBLIST_PASSAGE_MANDATORY
+ bool "Use bloblist in-place mandatorily"
help
- Use a bloblist in the incoming standard passage. The size is detected
- automatically so CONFIG_BLOBLIST_SIZE can be 0.
+ By default U-Boot will use a bloblist in the incoming standard passage.
+ This option controls whether U-Boot tries to load a static bloblist or
+ allocate one if a valid incoming bloblist does not exist.
+ Select this option to mark incoming standard passage as mandatory and
+ U-Boot will report an error when a valid incoming bloblist does not
+ exist.
endchoice
@@ -1086,7 +1090,7 @@ config BLOBLIST_ADDR
config BLOBLIST_SIZE
hex "Size of bloblist"
- default 0x0 if BLOBLIST_PASSAGE
+ default 0x0 if BLOBLIST_PASSAGE_MANDATORY
default 0x400
help
Sets the size of the bloblist in bytes. This must include all
diff --git a/common/bloblist.c b/common/bloblist.c
index be05f8082ff..fb0e5af5f3a 100644
--- a/common/bloblist.c
+++ b/common/bloblist.c
@@ -513,6 +513,13 @@ int bloblist_init(void)
*/
bool from_addr = fixed && !xpl_is_first_phase();
+ /*
+ * If Firmware Handoff is mandatory but no transfer list is
+ * observed, report it as an error.
+ */
+ if (IS_ENABLED(CONFIG_BLOBLIST_PASSAGE_MANDATORY))
+ return -ENOENT;
+
ret = -ENOENT;
if (xpl_prev_phase() == PHASE_TPL &&
diff --git a/configs/vexpress_fvp_bloblist_defconfig b/configs/vexpress_fvp_bloblist_defconfig
index dcc87db8723..4d52b96202b 100644
--- a/configs/vexpress_fvp_bloblist_defconfig
+++ b/configs/vexpress_fvp_bloblist_defconfig
@@ -1,5 +1,5 @@
#include <configs/vexpress_fvp_defconfig>
CONFIG_BLOBLIST=y
-CONFIG_BLOBLIST_PASSAGE=y
+CONFIG_BLOBLIST_PASSAGE_MANDATORY=y
CONFIG_BLOBLIST_SIZE_RELOC=0x10000
diff --git a/doc/board/armltd/vexpress64.rst b/doc/board/armltd/vexpress64.rst
index 4dadadb53dc..a732fac899d 100644
--- a/doc/board/armltd/vexpress64.rst
+++ b/doc/board/armltd/vexpress64.rst
@@ -53,8 +53,8 @@ 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
+By default, ``vexpress_fvp_bloblist_defconfig`` uses the standard passage method mandatorily
+(CONFIG_BLOBLIST_PASSAGE_MANDATORY) 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.
diff --git a/include/bloblist.h b/include/bloblist.h
index ff9d5549052..414fb9b6e40 100644
--- a/include/bloblist.h
+++ b/include/bloblist.h
@@ -449,9 +449,8 @@ int bloblist_reloc(void *to, uint to_size);
* If CONFIG_BLOBLIST_ALLOC is selected, it allocates memory for a bloblist of
* size CONFIG_BLOBLIST_SIZE.
*
- * If CONFIG_BLOBLIST_PASSAGE is selected, it uses the bloblist in the incoming
- * standard passage. The size is detected automatically so CONFIG_BLOBLIST_SIZE
- * can be 0.
+ * If CONFIG_BLOBLIST_PASSAGE_MANDATORY is selected, bloblist in the incoming
+ * standard passage is mandatorily required.
*
* Sets GD_FLG_BLOBLIST_READY in global_data flags on success
*