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

2021-10-21 Thread Simon Glass
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

2021-10-19 Thread Heinrich Schuchardt

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

2021-10-19 Thread Simon Glass
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
>