[PATCH 2/2] sandbox: provide /chosen/boot-hartid property

Heinrich Schuchardt xypron.glpk at gmx.de
Wed Oct 20 07:06:41 CEST 2021


On 10/20/21 00:54, Simon Glass wrote:
> Hi Heinrich,
>
> On Sat, 28 Aug 2021 at 03:42, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>>
>> On RISC-V the sandbox must provide the /chosen/boot-hartid in the
>> devicetree.
>>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
>> ---
>>   arch/sandbox/lib/Makefile    |  2 +-
>>   arch/sandbox/lib/fdt_fixup.c | 25 +++++++++++++++++++++++++
>>   2 files changed, 26 insertions(+), 1 deletion(-)
>>   create mode 100644 arch/sandbox/lib/fdt_fixup.c
>
> Can you add a bit more detail here? This is for the sandbox build, so
> we don't actually get to boot the kernel. So who is actually using
> this data?

The U-Boot sandbox can be built on RISC-V. It is very convenient to
debug the Linux EFI stub and its interaction with other UEFI software
like GRUB.

The Linux EFI stub reads the /chosen/boot-hartid property in function
get_boot_hartid_from_fdt(), drivers/firmware/efi/libstub/riscv-stub.c.
It will stop booting if /chosen/boot-hartid is not found.

Of course the kernel will fail when trying to set up virtual memory. But
that is after most of the interesting stuff in the EFI stub have
occurred. Linux can run in nommu mode. So maybe you could even run Linux
on the sandbox.

Best regards

Heinrich

>
> Regards,
> Simon
>
>
>>
>> diff --git a/arch/sandbox/lib/Makefile b/arch/sandbox/lib/Makefile
>> index b4ff717e78..a2bc5a7ee6 100644
>> --- a/arch/sandbox/lib/Makefile
>> +++ b/arch/sandbox/lib/Makefile
>> @@ -5,7 +5,7 @@
>>   # (C) Copyright 2002-2006
>>   # Wolfgang Denk, DENX Software Engineering, wd at denx.de.
>>
>> -obj-y  += interrupts.o sections.o
>> +obj-y  += fdt_fixup.o interrupts.o sections.o
>>   obj-$(CONFIG_PCI)      += pci_io.o
>>   obj-$(CONFIG_CMD_BOOTM) += bootm.o
>>   obj-$(CONFIG_CMD_BOOTZ) += bootm.o
>> diff --git a/arch/sandbox/lib/fdt_fixup.c b/arch/sandbox/lib/fdt_fixup.c
>> new file mode 100644
>> index 0000000000..a646f2059c
>> --- /dev/null
>> +++ b/arch/sandbox/lib/fdt_fixup.c
>> @@ -0,0 +1,25 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +
>> +#define LOG_CATEGORY LOGC_ARCH
>> +
>> +#include <common.h>
>> +#include <fdt_support.h>
>> +#include <log.h>
>> +
>> +#if defined(__riscv)
>> +int arch_fixup_fdt(void *blob)
>> +{
>> +       int ret;
>> +
>> +       ret = fdt_find_or_add_subnode(blob, 0, "chosen");;
>> +       if (ret < 0)
>> +               goto err;
>> +       ret = fdt_setprop_u32(blob, ret, "boot-hartid", 1);
>> +       if (ret < 0)
>> +               goto err;
>> +       return 0;
>> +err:
>> +       log_err("Setting /chosen/boot-hartid failed: %s\n", fdt_strerror(ret));
>> +       return ret;
>> +}
>> +#endif
>> --
>> 2.30.2
>>


More information about the U-Boot mailing list