[PATCH v4 6/9] arm: Get bloblist from boot arguments
Michal Simek
michal.simek at amd.com
Wed Jan 3 11:46:01 CET 2024
On 1/2/24 23:12, Raymond Mao wrote:
> Add arch 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-arm 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().
> Changes in v4
> - Move the function as an Arm-arch library instead of a board-specific one.
>
> arch/arm/lib/xferlist.c | 38 ++++++++++++++++++++++++++++++++++++
> configs/qemu_arm64_defconfig | 3 +++
> 3 files changed, 45 insertions(+)
> create mode 100644 arch/arm/lib/xferlist.c
>
> diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile
> index b1bcd37466..0023c55d0d 100644
> --- a/arch/arm/lib/Makefile
> +++ b/arch/arm/lib/Makefile
> @@ -85,6 +85,10 @@ obj-y += psci-dt.o
>
> obj-$(CONFIG_DEBUG_LL) += debug.o
>
> +ifdef CONFIG_BLOBLIST
> +obj-$(CONFIG_OF_BOARD) += xferlist.o
> +endif
> +
> # For EABI conformant tool chains, provide eabi_compat()
> ifneq (,$(findstring -mabi=aapcs-linux,$(PLATFORM_CPPFLAGS)))
> extra-y += eabi_compat.o
> diff --git a/arch/arm/lib/xferlist.c b/arch/arm/lib/xferlist.c
> new file mode 100644
> index 0000000000..163d20c11c
> --- /dev/null
> +++ b/arch/arm/lib/xferlist.c
> @@ -0,0 +1,38 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (C) 2023 Linaro Limited
> + * Author: Raymond Mao <raymond.mao at linaro.org>
> + */
> +#include <linux/types.h>
> +#include <errno.h>
> +#include <bloblist.h>
> +
> +/*
> + * 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[];
you should put this to bloblist.h. I would say it should be the part of 4/9
where you define saved_args for armv7.
> +
> +int xferlist_from_boot_arg(ulong addr, ulong size)
> +{
> + int ret = -ENOENT;
There is no value to initialize it here.
> +
> + if (!IS_ENABLED(CONFIG_OF_BOARD) || !IS_ENABLED(CONFIG_BLOBLIST))
> + return -ENOENT;
> +
> + ret = bloblist_check(saved_args[3], size);
> + if (ret)
> + return ret;
> +
> + /* Check the register conventions */
> + ret = bloblist_check_reg_conv(saved_args[0], saved_args[2],
> + saved_args[1]);
> + if (!ret)
> + /* Relocate the bloblist to the fixed address */
> + ret = bloblist_reloc((void *)addr, size);
> +
> + return ret;
> +}
> 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
This is likely not the right position in defconfig. make savedefconfig; cp
defconfig configs/qemu_arm64_defconfig.
M
More information about the U-Boot
mailing list