Re: [PATCH 2/2] sandbox: provide /chosen/boot-hartid property
On 10/20/21 00:54, Simon Glass wrote: > Hi Heinrich, > > On Sat, 28 Aug 2021 at 03:42, Heinrich Schuchardt wrote: >> >> On RISC-V the sandbox must provide the /chosen/boot-hartid in the >> devicetree. >> >> Signed-off-by: Heinrich Schuchardt >> --- >> 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 > > >> Applied to u-boot-dm, thanks!
Re: [PATCH 2/2] sandbox: provide /chosen/boot-hartid property
On 10/20/21 00:54, Simon Glass wrote: Hi Heinrich, On Sat, 28 Aug 2021 at 03:42, Heinrich Schuchardt wrote: On RISC-V the sandbox must provide the /chosen/boot-hartid in the devicetree. Signed-off-by: Heinrich Schuchardt --- 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, w...@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 00..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 +#include +#include + +#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
Re: [PATCH 2/2] sandbox: provide /chosen/boot-hartid property
Hi Heinrich, On Sat, 28 Aug 2021 at 03:42, Heinrich Schuchardt wrote: > > On RISC-V the sandbox must provide the /chosen/boot-hartid in the > devicetree. > > Signed-off-by: Heinrich Schuchardt > --- > 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? 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, w...@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 00..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 > +#include > +#include > + > +#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 >