[PATCH v3 6/9] qemu-arm: Get bloblist from boot arguments
Simon Glass
sjg at chromium.org
Tue Dec 26 10:47:45 CET 2023
Hi Raymond,
On Fri, Dec 22, 2023 at 9:32 PM Raymond Mao <raymond.mao at linaro.org> wrote:
>
> Add platform custom function to get bloblist from boot arguments.
> Check whether boot arguments aligns with the register conventions
> defined in FW Handoff spec v0.9.
> Add bloblist related options into qemu default config.
>
> Signed-off-by: Raymond Mao <raymond.mao at linaro.org>
> ---
> Changes in v2
> - Remove low level code for copying boot arguments.
> - Refactor board_fdt_blob_setup() and remove direct access of gd->bloblist.
> Changes in v3
> - Optimize board_bloblist_from_boot_arg().
>
> board/emulation/qemu-arm/qemu-arm.c | 30 +++++++++++++++++++++++++++++
> configs/qemu_arm64_defconfig | 3 +++
> 2 files changed, 33 insertions(+)
>
> diff --git a/board/emulation/qemu-arm/qemu-arm.c b/board/emulation/qemu-arm/qemu-arm.c
> index 942f1fff57..e225011bf0 100644
> --- a/board/emulation/qemu-arm/qemu-arm.c
> +++ b/board/emulation/qemu-arm/qemu-arm.c
> @@ -4,6 +4,7 @@
> */
>
> #include <common.h>
> +#include <bloblist.h>
> #include <cpu_func.h>
> #include <dm.h>
> #include <efi.h>
> @@ -102,6 +103,15 @@ static struct mm_region qemu_arm64_mem_map[] = {
> struct mm_region *mem_map = qemu_arm64_mem_map;
> #endif
>
> +/*
> + * Boot parameters saved from start.S
> + * saved_args[0]: FDT base address
> + * saved_args[1]: Bloblist signature
> + * saved_args[2]: must be 0
> + * saved_args[3]: Bloblist base address
> + */
> +extern unsigned long saved_args[];
> +
> int board_init(void)
> {
> return 0;
> @@ -144,6 +154,26 @@ void *board_fdt_blob_setup(int *err)
> return (void *)CFG_SYS_SDRAM_BASE;
> }
>
> +int board_bloblist_from_boot_arg(unsigned long addr, unsigned long size)
> +{
> + int ret = -ENOENT;
> +
> + if (!IS_ENABLED(CONFIG_OF_BOARD) || !IS_ENABLED(CONFIG_BLOBLIST))
> + return -ENOENT;
> +
> + ret = bloblist_check(saved_args[3], size);
> + if (ret)
> + return ret;
What about saved_args[1] ?
> +
> + /* Check the register conventions */
> + ret = bloblist_check_reg_conv(saved_args[0], saved_args[2]);
> + if (!ret)
> + /* Relocate the bloblist to the fixed address */
> + ret = bloblist_reloc((void *)addr, CONFIG_BLOBLIST_SIZE);
> +
> + return ret;
> +}
> +
This should be a generic function, e.g. in arch/arm
> void enable_caches(void)
> {
> icache_enable();
> diff --git a/configs/qemu_arm64_defconfig b/configs/qemu_arm64_defconfig
> index c010c25a92..418f48001c 100644
> --- a/configs/qemu_arm64_defconfig
> +++ b/configs/qemu_arm64_defconfig
> @@ -69,3 +69,6 @@ CONFIG_USB_EHCI_HCD=y
> CONFIG_USB_EHCI_PCI=y
> CONFIG_SEMIHOSTING=y
> CONFIG_TPM=y
> +CONFIG_BLOBLIST=y
> +CONFIG_BLOBLIST_ADDR=0x40004000
> +CONFIG_BLOBLIST_SIZE=0x4000
> --
> 2.25.1
>
Regards,
Simon
More information about the U-Boot
mailing list