mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-05-04 12:21:03 +02:00
Merge patch series "Enable bloblist support on Vexpress64"
Harrison Mutai <harrison.mutai@arm.com> says: 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. Link: https://lore.kernel.org/r/20250204175844.19890-1-harrison.mutai@arm.com
This commit is contained in:
commit
87dec3078a
@ -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"
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
@ -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,17 +1086,17 @@ 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
|
||||
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"
|
||||
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
|
||||
|
||||
@ -488,6 +488,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;
|
||||
|
||||
@ -518,13 +521,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)
|
||||
@ -532,7 +528,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);
|
||||
|
||||
5
configs/vexpress_fvp_bloblist_defconfig
Normal file
5
configs/vexpress_fvp_bloblist_defconfig
Normal file
@ -0,0 +1,5 @@
|
||||
#include <configs/vexpress_fvp_defconfig>
|
||||
|
||||
CONFIG_BLOBLIST=y
|
||||
CONFIG_BLOBLIST_PASSAGE=y
|
||||
CONFIG_BLOBLIST_SIZE_RELOC=0x10000
|
||||
@ -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
|
||||
----------
|
||||
|
||||
|
||||
@ -481,7 +481,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
|
||||
*/
|
||||
|
||||
@ -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 "
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user