[PATCH v3 6/9] qemu-arm: Get bloblist from boot arguments

Simon Glass sjg at chromium.org
Thu Dec 28 14:37:16 CET 2023


Hi Raymond,

On Wed, Dec 27, 2023 at 4:21 PM Raymond Mao <raymond.mao at linaro.org> wrote:
>
> Hi Simon,
>
> On Tue, 26 Dec 2023 at 04:48, Simon Glass <sjg at chromium.org> wrote:
>>
>> 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] ?
>>
> The magic and version of register conventions cannot be checked now since there is
> a bug in the spec. PSB:
> ```
> X1[23:0]: set to the TL signature (4a0f_b10b)
> X1[31:24]: version of the register convention used. Set to 1 for the AArch64 convention specified in this document.
> ```
> Signature (4a0f_b10b) takes all [31:0] and no space for version of the register convention.
> This needs to be updated on TF-A and OP-TEE as well after the spec is updated.
> For now I will just skip the checking.
>
>>
>> > +
>> > +       /* 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
>>
> I didn't find a place under arch/arm that is good for connect with the saved boot
> args. Do you have any suggestions?

How about arch/arm/lib/bloblist.c ?

>
> [...]

Regards,
Simon


More information about the U-Boot mailing list