bloblist: kconfig for mandatory incoming standard passage

In previous commit, incoming standard passage is used by default
when initializing the bloblist, so explicitly BLOBLIST_PASSAGE is
no more needed.
Rename it as BLOBLIST_PASSAGE_MANDATORY to determine the behaviors
when an incoming transfer list does not exist or is invalid.
When it is selected, incoming standard passage is mandatory and
U-Boot will report an error when a valid incoming transfer list is
missing.

Signed-off-by: Raymond Mao <raymond.mao@linaro.org>
This commit is contained in:
Raymond Mao 2025-02-12 08:55:20 -08:00
parent 7bb12a9bb9
commit d6e9f13a41
5 changed files with 21 additions and 11 deletions

View file

@ -1066,11 +1066,15 @@ config BLOBLIST_ALLOC
specify a fixed address on systems where this is unknown or can specify a fixed address on systems where this is unknown or can
change at runtime. change at runtime.
config BLOBLIST_PASSAGE config BLOBLIST_PASSAGE_MANDATORY
bool "Use bloblist in-place" bool "Use bloblist in-place mandatorily"
help help
Use a bloblist in the incoming standard passage. The size is detected By default U-Boot will use a bloblist in the incoming standard passage.
automatically so CONFIG_BLOBLIST_SIZE can be 0. 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 endchoice
@ -1086,7 +1090,7 @@ config BLOBLIST_ADDR
config BLOBLIST_SIZE config BLOBLIST_SIZE
hex "Size of bloblist" hex "Size of bloblist"
default 0x0 if BLOBLIST_PASSAGE default 0x0 if BLOBLIST_PASSAGE_MANDATORY
default 0x400 default 0x400
help help
Sets the size of the bloblist in bytes. This must include all Sets the size of the bloblist in bytes. This must include all

View file

@ -526,6 +526,13 @@ int bloblist_init(void)
*/ */
bool from_addr = fixed && !xpl_is_first_phase(); 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; ret = -ENOENT;
if (xpl_prev_phase() == PHASE_TPL && if (xpl_prev_phase() == PHASE_TPL &&

View file

@ -1,5 +1,5 @@
#include <configs/vexpress_fvp_defconfig> #include <configs/vexpress_fvp_defconfig>
CONFIG_BLOBLIST=y CONFIG_BLOBLIST=y
CONFIG_BLOBLIST_PASSAGE=y CONFIG_BLOBLIST_PASSAGE_MANDATORY=y
CONFIG_BLOBLIST_SIZE_RELOC=0x10000 CONFIG_BLOBLIST_SIZE_RELOC=0x10000

View file

@ -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 bloblist, or utilizing a standard passage-provided bloblist with automatic size
detection. detection.
By default, ``vexpress_fvp_bloblist_defconfig`` uses the standard passage method By default, ``vexpress_fvp_bloblist_defconfig`` uses the standard passage method mandatorily
(CONFIG_BLOBLIST_PASSAGE) because TF-A provides a Transfer List in non-secure (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 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 TF-A, contains all necessary data for the handoff process, including DT and ACPI
tables. tables.

View file

@ -467,9 +467,8 @@ int bloblist_reloc(void *to, uint to_size);
* If CONFIG_BLOBLIST_ALLOC is selected, it allocates memory for a bloblist of * If CONFIG_BLOBLIST_ALLOC is selected, it allocates memory for a bloblist of
* size CONFIG_BLOBLIST_SIZE. * size CONFIG_BLOBLIST_SIZE.
* *
* If CONFIG_BLOBLIST_PASSAGE is selected, it uses the bloblist in the incoming * If CONFIG_BLOBLIST_PASSAGE_MANDATORY is selected, bloblist in the incoming
* standard passage. The size is detected automatically so CONFIG_BLOBLIST_SIZE * standard passage is mandatorily required.
* can be 0.
* *
* Sets GD_FLG_BLOBLIST_READY in global_data flags on success * Sets GD_FLG_BLOBLIST_READY in global_data flags on success
* *