qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default
@ 2019-06-19  0:38 Alistair Francis
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 1/5] hw/riscv: Split out the boot functions Alistair Francis
                   ` (5 more replies)
  0 siblings, 6 replies; 30+ messages in thread
From: Alistair Francis @ 2019-06-19  0:38 UTC (permalink / raw)
  To: qemu-devel, qemu-riscv; +Cc: alistair23, palmer, alistair.francis

This is an RFC as it will break ALL current users! See below for details.

This series consolidates the current RISC-V kernel loading
impelementation while also adding support for the -bios option and more
advanced kernel image types.

After consolidating the kernel loading we can extend the boot loader to
support a -bios option. We can also extend the kernel loading options to
support not just ELF files but other standard formats.

Finally we can include the OpenSBI firmware by default for QEMU users.

At the end of this series we are in the good place of no longer
requiring users to build firmware to boot a kernel. Instead users can
just run QEMu with the -kernel option and everything will work. They can
also override the firmware with their own using the -bios option. Using
"-bios none" will result in no firmware being loaded (as it is today).

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Unfortunately this series (patch 5 specifically) results in all current
Linux boots being broken as users are already loading in their own
firmware, which overlaps with the now included default. They will
see this error:

  rom: requested regions overlap (rom phdr #0: ./images/qemuriscv64/fw_jump.elf. free=0x0000000080008090, addr=0x0000000080000000)
  qemu-system-riscv64: rom check and register reset failed

If a current user specieifies "-bios none" their flow will continue
working. A user can instead no longer load their firmware and
use the default or they can load their firmware with the -bios option.

At the moment the best idea I have to not break all users is to only
include the default firmware if the user specifies "-bios opensbi".
That is change the default to not loading the firmware. Then we can work
on updating documentation and maybe in future change the default to
include a firmware and anyone who doesn't want a default firmware can
specify "-bios none".

Any other ideas on how to not break everything?



Alistair Francis (5):
  hw/riscv: Split out the boot functions
  hw/riscv: Add support for loading a firmware
  hw/riscv: Extend the kernel loading support
  roms: Add OpenSBI version 0.3
  hw/riscv: Load OpenSBI as the default firmware

 .gitmodules                         |   3 +
 Makefile                            |   3 +-
 configure                           |   1 +
 hw/riscv/Makefile.objs              |   1 +
 hw/riscv/boot.c                     | 143 ++++++++++++++++++++++++++++
 hw/riscv/sifive_e.c                 |  17 +---
 hw/riscv/sifive_u.c                 |  19 +---
 hw/riscv/spike.c                    |  21 +---
 hw/riscv/virt.c                     |  54 ++---------
 include/hw/riscv/boot.h             |  30 ++++++
 pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
 pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes
 roms/Makefile                       |  17 ++++
 roms/opensbi                        |   1 +
 14 files changed, 216 insertions(+), 94 deletions(-)
 create mode 100644 hw/riscv/boot.c
 create mode 100644 include/hw/riscv/boot.h
 create mode 100644 pc-bios/opensbi-riscv32-fw_jump.elf
 create mode 100644 pc-bios/opensbi-riscv64-fw_jump.elf
 create mode 160000 roms/opensbi

-- 
2.22.0



^ permalink raw reply	[flat|nested] 30+ messages in thread

* [Qemu-devel] [RFC v1 1/5] hw/riscv: Split out the boot functions
  2019-06-19  0:38 [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default Alistair Francis
@ 2019-06-19  0:38 ` Alistair Francis
  2019-06-19 15:16   ` Bin Meng
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 2/5] hw/riscv: Add support for loading a firmware Alistair Francis
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 30+ messages in thread
From: Alistair Francis @ 2019-06-19  0:38 UTC (permalink / raw)
  To: qemu-devel, qemu-riscv; +Cc: alistair23, palmer, alistair.francis

Split the common RISC-V boot functions into a seperate file. This allows
us to share the common code.

Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
---
 hw/riscv/Makefile.objs  |  1 +
 hw/riscv/boot.c         | 69 +++++++++++++++++++++++++++++++++++++++++
 hw/riscv/sifive_e.c     | 17 ++--------
 hw/riscv/sifive_u.c     | 17 ++--------
 hw/riscv/spike.c        | 21 +++----------
 hw/riscv/virt.c         | 51 +++---------------------------
 include/hw/riscv/boot.h | 27 ++++++++++++++++
 7 files changed, 110 insertions(+), 93 deletions(-)
 create mode 100644 hw/riscv/boot.c
 create mode 100644 include/hw/riscv/boot.h

diff --git a/hw/riscv/Makefile.objs b/hw/riscv/Makefile.objs
index a65027304a..eb9d4f9ffc 100644
--- a/hw/riscv/Makefile.objs
+++ b/hw/riscv/Makefile.objs
@@ -1,3 +1,4 @@
+obj-y += boot.o
 obj-$(CONFIG_SPIKE) += riscv_htif.o
 obj-$(CONFIG_HART) += riscv_hart.o
 obj-$(CONFIG_SIFIVE_E) += sifive_e.o
diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
new file mode 100644
index 0000000000..62f94aaf8a
--- /dev/null
+++ b/hw/riscv/boot.c
@@ -0,0 +1,69 @@
+/*
+ * QEMU RISC-V Boot Helper
+ *
+ * Copyright (c) 2017 SiFive, Inc.
+ * Copyright (c) 2019 Alistair Francis <alistair.francis@wdc.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2 or later, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "qemu/osdep.h"
+#include "qemu/units.h"
+#include "qemu/error-report.h"
+#include "exec/cpu-defs.h"
+#include "hw/loader.h"
+#include "hw/riscv/boot.h"
+#include "elf.h"
+
+target_ulong riscv_load_kernel(const char *kernel_filename)
+{
+    uint64_t kernel_entry, kernel_high;
+
+    if (load_elf(kernel_filename, NULL, NULL, NULL,
+                 &kernel_entry, NULL, &kernel_high,
+                 0, EM_RISCV, 1, 0) < 0) {
+        error_report("could not load kernel '%s'", kernel_filename);
+        exit(1);
+    }
+
+    return kernel_entry;
+}
+
+hwaddr riscv_load_initrd(const char *filename, uint64_t mem_size,
+                         uint64_t kernel_entry, hwaddr *start)
+{
+    int size;
+
+    /* We want to put the initrd far enough into RAM that when the
+     * kernel is uncompressed it will not clobber the initrd. However
+     * on boards without much RAM we must ensure that we still leave
+     * enough room for a decent sized initrd, and on boards with large
+     * amounts of RAM we must avoid the initrd being so far up in RAM
+     * that it is outside lowmem and inaccessible to the kernel.
+     * So for boards with less  than 256MB of RAM we put the initrd
+     * halfway into RAM, and for boards with 256MB of RAM or more we put
+     * the initrd at 128MB.
+     */
+    *start = kernel_entry + MIN(mem_size / 2, 128 * MiB);
+
+    size = load_ramdisk(filename, *start, mem_size - *start);
+    if (size == -1) {
+        size = load_image_targphys(filename, *start, mem_size - *start);
+        if (size == -1) {
+            error_report("could not load ramdisk '%s'", filename);
+            exit(1);
+        }
+    }
+
+    return *start + size;
+}
diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c
index 80ac56fa7d..9d58ae362b 100644
--- a/hw/riscv/sifive_e.c
+++ b/hw/riscv/sifive_e.c
@@ -44,10 +44,10 @@
 #include "hw/riscv/sifive_prci.h"
 #include "hw/riscv/sifive_uart.h"
 #include "hw/riscv/sifive_e.h"
+#include "hw/riscv/boot.h"
 #include "chardev/char.h"
 #include "sysemu/arch_init.h"
 #include "exec/address-spaces.h"
-#include "elf.h"
 
 static const struct MemmapEntry {
     hwaddr base;
@@ -74,19 +74,6 @@ static const struct MemmapEntry {
     [SIFIVE_E_DTIM] =     { 0x80000000,     0x4000 }
 };
 
-static target_ulong load_kernel(const char *kernel_filename)
-{
-    uint64_t kernel_entry, kernel_high;
-
-    if (load_elf(kernel_filename, NULL, NULL, NULL,
-                 &kernel_entry, NULL, &kernel_high,
-                 0, EM_RISCV, 1, 0) < 0) {
-        error_report("could not load kernel '%s'", kernel_filename);
-        exit(1);
-    }
-    return kernel_entry;
-}
-
 static void sifive_mmio_emulate(MemoryRegion *parent, const char *name,
                              uintptr_t offset, uintptr_t length)
 {
@@ -131,7 +118,7 @@ static void riscv_sifive_e_init(MachineState *machine)
                           memmap[SIFIVE_E_MROM].base, &address_space_memory);
 
     if (machine->kernel_filename) {
-        load_kernel(machine->kernel_filename);
+        riscv_load_kernel(machine->kernel_filename);
     }
 }
 
diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c
index 5ecc47cea3..1b9281bd4a 100644
--- a/hw/riscv/sifive_u.c
+++ b/hw/riscv/sifive_u.c
@@ -41,11 +41,11 @@
 #include "hw/riscv/sifive_uart.h"
 #include "hw/riscv/sifive_prci.h"
 #include "hw/riscv/sifive_u.h"
+#include "hw/riscv/boot.h"
 #include "chardev/char.h"
 #include "sysemu/arch_init.h"
 #include "sysemu/device_tree.h"
 #include "exec/address-spaces.h"
-#include "elf.h"
 
 #include <libfdt.h>
 
@@ -65,19 +65,6 @@ static const struct MemmapEntry {
 
 #define GEM_REVISION        0x10070109
 
-static target_ulong load_kernel(const char *kernel_filename)
-{
-    uint64_t kernel_entry, kernel_high;
-
-    if (load_elf(kernel_filename, NULL, NULL, NULL,
-                 &kernel_entry, NULL, &kernel_high,
-                 0, EM_RISCV, 1, 0) < 0) {
-        error_report("could not load kernel '%s'", kernel_filename);
-        exit(1);
-    }
-    return kernel_entry;
-}
-
 static void create_fdt(SiFiveUState *s, const struct MemmapEntry *memmap,
     uint64_t mem_size, const char *cmdline)
 {
@@ -280,7 +267,7 @@ static void riscv_sifive_u_init(MachineState *machine)
     create_fdt(s, memmap, machine->ram_size, machine->kernel_cmdline);
 
     if (machine->kernel_filename) {
-        load_kernel(machine->kernel_filename);
+        riscv_load_kernel(machine->kernel_filename);
     }
 
     /* reset vector */
diff --git a/hw/riscv/spike.c b/hw/riscv/spike.c
index 5b33d4be3b..e68be00a5f 100644
--- a/hw/riscv/spike.c
+++ b/hw/riscv/spike.c
@@ -36,12 +36,12 @@
 #include "hw/riscv/riscv_hart.h"
 #include "hw/riscv/sifive_clint.h"
 #include "hw/riscv/spike.h"
+#include "hw/riscv/boot.h"
 #include "chardev/char.h"
 #include "sysemu/arch_init.h"
 #include "sysemu/device_tree.h"
 #include "sysemu/qtest.h"
 #include "exec/address-spaces.h"
-#include "elf.h"
 
 #include <libfdt.h>
 
@@ -54,19 +54,6 @@ static const struct MemmapEntry {
     [SPIKE_DRAM] =     { 0x80000000,        0x0 },
 };
 
-static target_ulong load_kernel(const char *kernel_filename)
-{
-    uint64_t kernel_entry, kernel_high;
-
-    if (load_elf_ram_sym(kernel_filename, NULL, NULL, NULL,
-            &kernel_entry, NULL, &kernel_high, 0, EM_RISCV, 1, 0,
-            NULL, true, htif_symbol_callback) < 0) {
-        error_report("could not load kernel '%s'", kernel_filename);
-        exit(1);
-    }
-    return kernel_entry;
-}
-
 static void create_fdt(SpikeState *s, const struct MemmapEntry *memmap,
     uint64_t mem_size, const char *cmdline)
 {
@@ -199,7 +186,7 @@ static void spike_board_init(MachineState *machine)
                                 mask_rom);
 
     if (machine->kernel_filename) {
-        load_kernel(machine->kernel_filename);
+        riscv_load_kernel(machine->kernel_filename);
     }
 
     /* reset vector */
@@ -287,7 +274,7 @@ static void spike_v1_10_0_board_init(MachineState *machine)
                                 mask_rom);
 
     if (machine->kernel_filename) {
-        load_kernel(machine->kernel_filename);
+        riscv_load_kernel(machine->kernel_filename);
     }
 
     /* reset vector */
@@ -372,7 +359,7 @@ static void spike_v1_09_1_board_init(MachineState *machine)
                                 mask_rom);
 
     if (machine->kernel_filename) {
-        load_kernel(machine->kernel_filename);
+        riscv_load_kernel(machine->kernel_filename);
     }
 
     /* reset vector */
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c
index 84d94d0c42..5f8c11471b 100644
--- a/hw/riscv/virt.c
+++ b/hw/riscv/virt.c
@@ -34,13 +34,13 @@
 #include "hw/riscv/sifive_clint.h"
 #include "hw/riscv/sifive_test.h"
 #include "hw/riscv/virt.h"
+#include "hw/riscv/boot.h"
 #include "chardev/char.h"
 #include "sysemu/arch_init.h"
 #include "sysemu/device_tree.h"
 #include "exec/address-spaces.h"
 #include "hw/pci/pci.h"
 #include "hw/pci-host/gpex.h"
-#include "elf.h"
 
 #include <libfdt.h>
 
@@ -61,47 +61,6 @@ static const struct MemmapEntry {
     [VIRT_PCIE_ECAM] =   { 0x30000000,    0x10000000 },
 };
 
-static target_ulong load_kernel(const char *kernel_filename)
-{
-    uint64_t kernel_entry, kernel_high;
-
-    if (load_elf(kernel_filename, NULL, NULL, NULL,
-                 &kernel_entry, NULL, &kernel_high,
-                 0, EM_RISCV, 1, 0) < 0) {
-        error_report("could not load kernel '%s'", kernel_filename);
-        exit(1);
-    }
-    return kernel_entry;
-}
-
-static hwaddr load_initrd(const char *filename, uint64_t mem_size,
-                          uint64_t kernel_entry, hwaddr *start)
-{
-    int size;
-
-    /* We want to put the initrd far enough into RAM that when the
-     * kernel is uncompressed it will not clobber the initrd. However
-     * on boards without much RAM we must ensure that we still leave
-     * enough room for a decent sized initrd, and on boards with large
-     * amounts of RAM we must avoid the initrd being so far up in RAM
-     * that it is outside lowmem and inaccessible to the kernel.
-     * So for boards with less  than 256MB of RAM we put the initrd
-     * halfway into RAM, and for boards with 256MB of RAM or more we put
-     * the initrd at 128MB.
-     */
-    *start = kernel_entry + MIN(mem_size / 2, 128 * MiB);
-
-    size = load_ramdisk(filename, *start, mem_size - *start);
-    if (size == -1) {
-        size = load_image_targphys(filename, *start, mem_size - *start);
-        if (size == -1) {
-            error_report("could not load ramdisk '%s'", filename);
-            exit(1);
-        }
-    }
-    return *start + size;
-}
-
 static void create_pcie_irq_map(void *fdt, char *nodename,
                                 uint32_t plic_phandle)
 {
@@ -422,13 +381,13 @@ static void riscv_virt_board_init(MachineState *machine)
                                 mask_rom);
 
     if (machine->kernel_filename) {
-        uint64_t kernel_entry = load_kernel(machine->kernel_filename);
+        uint64_t kernel_entry = riscv_load_kernel(machine->kernel_filename);
 
         if (machine->initrd_filename) {
             hwaddr start;
-            hwaddr end = load_initrd(machine->initrd_filename,
-                                     machine->ram_size, kernel_entry,
-                                     &start);
+            hwaddr end = riscv_load_initrd(machine->initrd_filename,
+                                           machine->ram_size, kernel_entry,
+                                           &start);
             qemu_fdt_setprop_cell(fdt, "/chosen",
                                   "linux,initrd-start", start);
             qemu_fdt_setprop_cell(fdt, "/chosen", "linux,initrd-end",
diff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h
new file mode 100644
index 0000000000..f84fd6c2df
--- /dev/null
+++ b/include/hw/riscv/boot.h
@@ -0,0 +1,27 @@
+/*
+ * QEMU RISC-V Boot Helper
+ *
+ * Copyright (c) 2017 SiFive, Inc.
+ * Copyright (c) 2019 Alistair Francis <alistair.francis@wdc.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2 or later, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef RISCV_BOOT_H
+#define RISCV_BOOT_H
+
+target_ulong riscv_load_kernel(const char *kernel_filename);
+hwaddr riscv_load_initrd(const char *filename, uint64_t mem_size,
+                         uint64_t kernel_entry, hwaddr *start);
+
+#endif /* RISCV_BOOT_H */
-- 
2.22.0



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [Qemu-devel] [RFC v1 2/5] hw/riscv: Add support for loading a firmware
  2019-06-19  0:38 [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default Alistair Francis
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 1/5] hw/riscv: Split out the boot functions Alistair Francis
@ 2019-06-19  0:38 ` Alistair Francis
  2019-06-19 15:16   ` Bin Meng
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 3/5] hw/riscv: Extend the kernel loading support Alistair Francis
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 30+ messages in thread
From: Alistair Francis @ 2019-06-19  0:38 UTC (permalink / raw)
  To: qemu-devel, qemu-riscv; +Cc: alistair23, palmer, alistair.francis

Add support for loading a firmware file for the virt machine and the
SiFive U. This can be run with the following command:

    qemu-system-riscv64 -machine virt -bios fw_jump.elf -kernel vmlinux

Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
---
 hw/riscv/boot.c         | 41 +++++++++++++++++++++++++++++++++++++++--
 hw/riscv/sifive_e.c     |  2 +-
 hw/riscv/sifive_u.c     |  6 +++++-
 hw/riscv/spike.c        |  6 +++---
 hw/riscv/virt.c         |  7 ++++++-
 include/hw/riscv/boot.h |  4 +++-
 6 files changed, 57 insertions(+), 9 deletions(-)

diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
index 62f94aaf8a..392ca0cb2e 100644
--- a/hw/riscv/boot.c
+++ b/hw/riscv/boot.c
@@ -23,13 +23,50 @@
 #include "exec/cpu-defs.h"
 #include "hw/loader.h"
 #include "hw/riscv/boot.h"
+#include "hw/boards.h"
 #include "elf.h"
 
-target_ulong riscv_load_kernel(const char *kernel_filename)
+#if defined(TARGET_RISCV32)
+# define KERNEL_BOOT_ADDRESS 0x80400000
+#else
+# define KERNEL_BOOT_ADDRESS 0x80200000
+#endif
+
+static uint64_t kernel_translate(void *opaque, uint64_t addr)
+{
+    MachineState *machine = opaque;
+
+    /*
+     * If the user specified a firmware move the kernel to the offset
+     * start address.
+     */
+    if (machine->firmware) {
+        return (addr & 0x7fffffff) + KERNEL_BOOT_ADDRESS;
+    } else {
+        return addr;
+    }
+}
+
+target_ulong riscv_load_firmware(const char *firmware_filename)
+{
+    uint64_t firmware_entry, firmware_start, firmware_end;
+
+    if (load_elf(firmware_filename, NULL, NULL, NULL,
+                 &firmware_entry, &firmware_start, &firmware_end,
+                 0, EM_RISCV, 1, 0) < 0) {
+        error_report("could not load firmware '%s'", firmware_filename);
+        exit(1);
+    }
+
+    return firmware_entry;
+}
+
+target_ulong riscv_load_kernel(MachineState *machine,
+                               const char *kernel_filename)
 {
     uint64_t kernel_entry, kernel_high;
 
-    if (load_elf(kernel_filename, NULL, NULL, NULL,
+    if (load_elf(kernel_filename, NULL, kernel_translate, machine,
                  &kernel_entry, NULL, &kernel_high,
                  0, EM_RISCV, 1, 0) < 0) {
         error_report("could not load kernel '%s'", kernel_filename);
diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c
index 9d58ae362b..3695c686be 100644
--- a/hw/riscv/sifive_e.c
+++ b/hw/riscv/sifive_e.c
@@ -118,7 +118,7 @@ static void riscv_sifive_e_init(MachineState *machine)
                           memmap[SIFIVE_E_MROM].base, &address_space_memory);
 
     if (machine->kernel_filename) {
-        riscv_load_kernel(machine->kernel_filename);
+        riscv_load_kernel(machine, machine->kernel_filename);
     }
 }
 
diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c
index 1b9281bd4a..03a6c64d04 100644
--- a/hw/riscv/sifive_u.c
+++ b/hw/riscv/sifive_u.c
@@ -266,8 +266,12 @@ static void riscv_sifive_u_init(MachineState *machine)
     /* create device tree */
     create_fdt(s, memmap, machine->ram_size, machine->kernel_cmdline);
 
+    if (machine->firmware) {
+        riscv_load_firmware(machine->firmware);
+    }
+
     if (machine->kernel_filename) {
-        riscv_load_kernel(machine->kernel_filename);
+        riscv_load_kernel(machine, machine->kernel_filename);
     }
 
     /* reset vector */
diff --git a/hw/riscv/spike.c b/hw/riscv/spike.c
index e68be00a5f..81cef0dcea 100644
--- a/hw/riscv/spike.c
+++ b/hw/riscv/spike.c
@@ -186,7 +186,7 @@ static void spike_board_init(MachineState *machine)
                                 mask_rom);
 
     if (machine->kernel_filename) {
-        riscv_load_kernel(machine->kernel_filename);
+        riscv_load_kernel(machine, machine->kernel_filename);
     }
 
     /* reset vector */
@@ -274,7 +274,7 @@ static void spike_v1_10_0_board_init(MachineState *machine)
                                 mask_rom);
 
     if (machine->kernel_filename) {
-        riscv_load_kernel(machine->kernel_filename);
+        riscv_load_kernel(machine, machine->kernel_filename);
     }
 
     /* reset vector */
@@ -359,7 +359,7 @@ static void spike_v1_09_1_board_init(MachineState *machine)
                                 mask_rom);
 
     if (machine->kernel_filename) {
-        riscv_load_kernel(machine->kernel_filename);
+        riscv_load_kernel(machine, machine->kernel_filename);
     }
 
     /* reset vector */
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c
index 5f8c11471b..d3670b5a7c 100644
--- a/hw/riscv/virt.c
+++ b/hw/riscv/virt.c
@@ -380,8 +380,13 @@ static void riscv_virt_board_init(MachineState *machine)
     memory_region_add_subregion(system_memory, memmap[VIRT_MROM].base,
                                 mask_rom);
 
+    if (machine->firmware) {
+        riscv_load_firmware(machine->firmware);
+    }
+
     if (machine->kernel_filename) {
-        uint64_t kernel_entry = riscv_load_kernel(machine->kernel_filename);
+        uint64_t kernel_entry = riscv_load_kernel(machine,
+                                                  machine->kernel_filename);
 
         if (machine->initrd_filename) {
             hwaddr start;
diff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h
index f84fd6c2df..6f586939c7 100644
--- a/include/hw/riscv/boot.h
+++ b/include/hw/riscv/boot.h
@@ -20,7 +20,9 @@
 #ifndef RISCV_BOOT_H
 #define RISCV_BOOT_H
 
-target_ulong riscv_load_kernel(const char *kernel_filename);
+target_ulong riscv_load_firmware(const char *firmware_filename);
+target_ulong riscv_load_kernel(MachineState *machine,
+                               const char *kernel_filename);
 hwaddr riscv_load_initrd(const char *filename, uint64_t mem_size,
                          uint64_t kernel_entry, hwaddr *start);
 
-- 
2.22.0



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [Qemu-devel] [RFC v1 3/5] hw/riscv: Extend the kernel loading support
  2019-06-19  0:38 [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default Alistair Francis
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 1/5] hw/riscv: Split out the boot functions Alistair Francis
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 2/5] hw/riscv: Add support for loading a firmware Alistair Francis
@ 2019-06-19  0:38 ` Alistair Francis
  2019-06-19 15:16   ` Bin Meng
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 4/5] roms: Add OpenSBI version 0.3 Alistair Francis
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 30+ messages in thread
From: Alistair Francis @ 2019-06-19  0:38 UTC (permalink / raw)
  To: qemu-devel, qemu-riscv; +Cc: alistair23, palmer, alistair.francis

Extend the RISC-V kernel loader to support uImage and Image files.
A Linux kernel can now be booted with:

    qemu-system-riscv64 -machine virt -bios fw_jump.elf -kernel Image

Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
---
 hw/riscv/boot.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
index 392ca0cb2e..7f68035a3f 100644
--- a/hw/riscv/boot.c
+++ b/hw/riscv/boot.c
@@ -67,13 +67,22 @@ target_ulong riscv_load_kernel(MachineState *machine,
     uint64_t kernel_entry, kernel_high;
 
     if (load_elf(kernel_filename, NULL, kernel_translate, machine,
-                 &kernel_entry, NULL, &kernel_high,
-                 0, EM_RISCV, 1, 0) < 0) {
-        error_report("could not load kernel '%s'", kernel_filename);
-        exit(1);
+                 &kernel_entry, NULL, &kernel_high, 0, EM_RISCV, 1, 0) > 0) {
+        return kernel_entry;
+    }
+
+    if (load_uimage_as(kernel_filename, &kernel_entry, NULL, NULL,
+                       kernel_translate, machine, NULL) > 0) {
+        return kernel_entry;
+    }
+
+    if (load_image_targphys_as(kernel_filename, KERNEL_BOOT_ADDRESS,
+                               ram_size, NULL) > 0) {
+        return kernel_entry;
     }
 
-    return kernel_entry;
+    error_report("could not load kernel '%s'", kernel_filename);
+    exit(1);
 }
 
 hwaddr riscv_load_initrd(const char *filename, uint64_t mem_size,
-- 
2.22.0



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [Qemu-devel] [RFC v1 4/5] roms: Add OpenSBI version 0.3
  2019-06-19  0:38 [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default Alistair Francis
                   ` (2 preceding siblings ...)
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 3/5] hw/riscv: Extend the kernel loading support Alistair Francis
@ 2019-06-19  0:38 ` Alistair Francis
  2019-06-19  5:14   ` [Qemu-devel] [Qemu-riscv] " Anup Patel
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 5/5] hw/riscv: Load OpenSBI as the default firmware Alistair Francis
  2019-06-19 14:26 ` [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default Bin Meng
  5 siblings, 1 reply; 30+ messages in thread
From: Alistair Francis @ 2019-06-19  0:38 UTC (permalink / raw)
  To: qemu-devel, qemu-riscv; +Cc: alistair23, palmer, alistair.francis

Add OpenSBI version 0.3 as a git submodule and as a prebult binary.

Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
---
 .gitmodules                         |   3 +++
 Makefile                            |   3 ++-
 configure                           |   1 +
 pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
 pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes
 roms/Makefile                       |  17 +++++++++++++++++
 roms/opensbi                        |   1 +
 7 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100644 pc-bios/opensbi-riscv32-fw_jump.elf
 create mode 100644 pc-bios/opensbi-riscv64-fw_jump.elf
 create mode 160000 roms/opensbi

diff --git a/.gitmodules b/.gitmodules
index 2857eec763..7a10e72e09 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -55,3 +55,6 @@
 [submodule "slirp"]
 	path = slirp
 	url = https://git.qemu.org/git/libslirp.git
+[submodule "roms/opensbi"]
+	path = roms/opensbi
+	url = https://github.com/riscv/opensbi.git
diff --git a/Makefile b/Makefile
index cfb18f1525..fb6638f9ec 100644
--- a/Makefile
+++ b/Makefile
@@ -761,7 +761,8 @@ palcode-clipper \
 u-boot.e500 u-boot-sam460-20100605.bin \
 qemu_vga.ndrv \
 edk2-licenses.txt \
-hppa-firmware.img
+hppa-firmware.img \
+opensbi-riscv32-fw_jump.elf opensbi-riscv64-fw_jump.elf
 
 DESCS=50-edk2-i386-secure.json 50-edk2-x86_64-secure.json \
 60-edk2-aarch64.json 60-edk2-arm.json 60-edk2-i386.json 60-edk2-x86_64.json
diff --git a/configure b/configure
index b091b82cb3..75372a7b4f 100755
--- a/configure
+++ b/configure
@@ -7936,6 +7936,7 @@ for bios_file in \
     $source_path/pc-bios/*.rom \
     $source_path/pc-bios/*.dtb \
     $source_path/pc-bios/*.img \
+    $source_path/pc-bios/*.elf \
     $source_path/pc-bios/openbios-* \
     $source_path/pc-bios/u-boot.* \
     $source_path/pc-bios/edk2-*.fd.bz2 \
diff --git a/pc-bios/opensbi-riscv32-fw_jump.elf b/pc-bios/opensbi-riscv32-fw_jump.elf
new file mode 100644
index 0000000000000000000000000000000000000000..e526b03eaad419953831f2114ea3aa0fdcc1924b
GIT binary patch
literal 197988
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

literal 0
HcmV?d00001

diff --git a/pc-bios/opensbi-riscv64-fw_jump.elf b/pc-bios/opensbi-riscv64-fw_jump.elf
new file mode 100644
index 0000000000000000000000000000000000000000..f5926c1d80d8b82be68ac0e194b475e410d8b5ac
GIT binary patch
literal 200192
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

literal 0
HcmV?d00001

diff --git a/roms/Makefile b/roms/Makefile
index 078d3fb705..f79220791c 100644
--- a/roms/Makefile
+++ b/roms/Makefile
@@ -37,6 +37,8 @@ find-cross-prefix = $(subst gcc,,$(notdir $(call find-cross-gcc,$(1))))
 powerpc64_cross_prefix := $(call find-cross-prefix,powerpc64)
 powerpc_cross_prefix := $(call find-cross-prefix,powerpc)
 x86_64_cross_prefix := $(call find-cross-prefix,x86_64)
+riscv32_cross_prefix := $(call find-cross-prefix,riscv32)
+riscv64_cross_prefix := $(call find-cross-prefix,riscv64)
 
 # tag our seabios builds
 SEABIOS_EXTRAVERSION="-prebuilt.qemu.org"
@@ -62,6 +64,8 @@ default:
 	@echo "  u-boot.e500    -- update u-boot.e500"
 	@echo "  u-boot.sam460  -- update u-boot.sam460"
 	@echo "  efi            -- update UEFI (edk2) platform firmware"
+	@echo "  opensbi32      -- update OpenSBI for 32-bit"
+	@echo "  opensbi64      -- update OpenSBI for 64-bit"
 	@echo "  clean          -- delete the files generated by the previous" \
 	                          "build targets"
 
@@ -162,6 +166,18 @@ skiboot:
 efi: edk2-basetools
 	$(MAKE) -f Makefile.edk2
 
+opensbi32:
+	$(MAKE) -C opensbi \
+		CROSS_COMPILE=$(riscv32_cross_prefix) \
+		PLATFORM="qemu/virt"
+	cp opensbi/build/platform/qemu/virt/firmware/fw_jump.elf ../pc-bios/opensbi-riscv32-fw_jump.elf
+
+opensbi64:
+	$(MAKE) -C opensbi \
+		CROSS_COMPILE=$(riscv64_cross_prefix) \
+		PLATFORM="qemu/virt"
+	cp opensbi/build/platform/qemu/virt/firmware/fw_jump.elf ../pc-bios/opensbi-riscv64-fw_jump.elf
+
 clean:
 	rm -rf seabios/.config seabios/out seabios/builds
 	$(MAKE) -C sgabios clean
@@ -173,3 +189,4 @@ clean:
 	$(MAKE) -C u-boot-sam460ex distclean
 	$(MAKE) -C skiboot clean
 	$(MAKE) -f Makefile.edk2 clean
+	$(MAKE) -C opensbi clean
diff --git a/roms/opensbi b/roms/opensbi
new file mode 160000
index 0000000000..ca20ac0cd4
--- /dev/null
+++ b/roms/opensbi
@@ -0,0 +1 @@
+Subproject commit ca20ac0cd4c099006d4eea4d9ac7bd7b58e2ae0f
-- 
2.22.0



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [Qemu-devel] [RFC v1 5/5] hw/riscv: Load OpenSBI as the default firmware
  2019-06-19  0:38 [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default Alistair Francis
                   ` (3 preceding siblings ...)
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 4/5] roms: Add OpenSBI version 0.3 Alistair Francis
@ 2019-06-19  0:38 ` Alistair Francis
  2019-06-19  5:16   ` [Qemu-devel] [Qemu-riscv] " Anup Patel
  2019-06-19 14:26 ` [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default Bin Meng
  5 siblings, 1 reply; 30+ messages in thread
From: Alistair Francis @ 2019-06-19  0:38 UTC (permalink / raw)
  To: qemu-devel, qemu-riscv; +Cc: alistair23, palmer, alistair.francis

If the user hasn't specified a firmware to load (with -bios) or
specified no bios (with -bios none) then load OpenSBI by default. This
allows users to boot a RISC-V kernel with just -kernel.

Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
---
 hw/riscv/boot.c         | 28 ++++++++++++++++++++++++++++
 hw/riscv/sifive_u.c     |  4 +---
 hw/riscv/virt.c         |  4 +---
 include/hw/riscv/boot.h |  1 +
 4 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
index 7f68035a3f..5f021591ed 100644
--- a/hw/riscv/boot.c
+++ b/hw/riscv/boot.c
@@ -18,6 +18,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "qemu-common.h"
 #include "qemu/units.h"
 #include "qemu/error-report.h"
 #include "exec/cpu-defs.h"
@@ -32,6 +33,12 @@
 # define KERNEL_BOOT_ADDRESS 0x80200000
 #endif
 
+#if defined(TARGET_RISCV32)
+# define BIOS_FILENAME "opensbi-riscv32-fw_jump.elf"
+#else
+# define BIOS_FILENAME "opensbi-riscv64-fw_jump.elf"
+#endif
+
 static uint64_t kernel_translate(void *opaque, uint64_t addr)
 {
     MachineState *machine = opaque;
@@ -47,6 +54,27 @@ static uint64_t kernel_translate(void *opaque, uint64_t addr)
     }
 }
 
+void riscv_find_and_load_firmware(MachineState *machine)
+{
+    char *firmware_filename;
+
+    if (!machine->firmware) {
+        /* The user didn't specify a firmware, default to OpenSBI */
+        firmware_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, BIOS_FILENAME);
+    } else {
+        firmware_filename = machine->firmware;
+    }
+
+    if (strcmp(firmware_filename, "none")) {
+        /* If not "none" load the firmware */
+        riscv_load_firmware(firmware_filename);
+    }
+
+    if (!machine->firmware) {
+        g_free(firmware_filename);
+    }
+}
+
 target_ulong riscv_load_firmware(const char *firmware_filename)
 {
     uint64_t firmware_entry, firmware_start, firmware_end;
diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c
index 03a6c64d04..77666d0f4d 100644
--- a/hw/riscv/sifive_u.c
+++ b/hw/riscv/sifive_u.c
@@ -266,9 +266,7 @@ static void riscv_sifive_u_init(MachineState *machine)
     /* create device tree */
     create_fdt(s, memmap, machine->ram_size, machine->kernel_cmdline);
 
-    if (machine->firmware) {
-        riscv_load_firmware(machine->firmware);
-    }
+    riscv_find_and_load_firmware(machine);
 
     if (machine->kernel_filename) {
         riscv_load_kernel(machine, machine->kernel_filename);
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c
index d3670b5a7c..2a7e850666 100644
--- a/hw/riscv/virt.c
+++ b/hw/riscv/virt.c
@@ -380,9 +380,7 @@ static void riscv_virt_board_init(MachineState *machine)
     memory_region_add_subregion(system_memory, memmap[VIRT_MROM].base,
                                 mask_rom);
 
-    if (machine->firmware) {
-        riscv_load_firmware(machine->firmware);
-    }
+    riscv_find_and_load_firmware(machine);
 
     if (machine->kernel_filename) {
         uint64_t kernel_entry = riscv_load_kernel(machine,
diff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h
index 6f586939c7..df2e2480e6 100644
--- a/include/hw/riscv/boot.h
+++ b/include/hw/riscv/boot.h
@@ -20,6 +20,7 @@
 #ifndef RISCV_BOOT_H
 #define RISCV_BOOT_H
 
+void riscv_find_and_load_firmware(MachineState *machine);
 target_ulong riscv_load_firmware(const char *firmware_filename);
 target_ulong riscv_load_kernel(MachineState *machine,
                                const char *kernel_filename);
-- 
2.22.0



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 4/5] roms: Add OpenSBI version 0.3
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 4/5] roms: Add OpenSBI version 0.3 Alistair Francis
@ 2019-06-19  5:14   ` Anup Patel
  2019-06-19 15:18     ` Bin Meng
  0 siblings, 1 reply; 30+ messages in thread
From: Anup Patel @ 2019-06-19  5:14 UTC (permalink / raw)
  To: Alistair Francis; +Cc: alistair23, Palmer Dabbelt, qemu-riscv, QEMU Developers

On Wed, Jun 19, 2019 at 6:24 AM Alistair Francis
<alistair.francis@wdc.com> wrote:
>
> Add OpenSBI version 0.3 as a git submodule and as a prebult binary.
>
> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> ---
>  .gitmodules                         |   3 +++
>  Makefile                            |   3 ++-
>  configure                           |   1 +
>  pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
>  pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes
>  roms/Makefile                       |  17 +++++++++++++++++
>  roms/opensbi                        |   1 +
>  7 files changed, 24 insertions(+), 1 deletion(-)
>  create mode 100644 pc-bios/opensbi-riscv32-fw_jump.elf
>  create mode 100644 pc-bios/opensbi-riscv64-fw_jump.elf
>  create mode 160000 roms/opensbi
>

The OpenSBI firmwares are platform specific so we should have
machine directory under pc-bios/ directory

So for virt machine we will have:
pc-bios/riscv32/virt/fw_jump.elf
pc-bios/riscv64/virt/fw_jump.elf

Regards,
Anup


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 5/5] hw/riscv: Load OpenSBI as the default firmware
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 5/5] hw/riscv: Load OpenSBI as the default firmware Alistair Francis
@ 2019-06-19  5:16   ` Anup Patel
  0 siblings, 0 replies; 30+ messages in thread
From: Anup Patel @ 2019-06-19  5:16 UTC (permalink / raw)
  To: Alistair Francis; +Cc: alistair23, Palmer Dabbelt, qemu-riscv, QEMU Developers

On Wed, Jun 19, 2019 at 6:21 AM Alistair Francis
<alistair.francis@wdc.com> wrote:
>
> If the user hasn't specified a firmware to load (with -bios) or
> specified no bios (with -bios none) then load OpenSBI by default. This
> allows users to boot a RISC-V kernel with just -kernel.
>
> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> ---
>  hw/riscv/boot.c         | 28 ++++++++++++++++++++++++++++
>  hw/riscv/sifive_u.c     |  4 +---
>  hw/riscv/virt.c         |  4 +---
>  include/hw/riscv/boot.h |  1 +
>  4 files changed, 31 insertions(+), 6 deletions(-)
>
> diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
> index 7f68035a3f..5f021591ed 100644
> --- a/hw/riscv/boot.c
> +++ b/hw/riscv/boot.c
> @@ -18,6 +18,7 @@
>   */
>
>  #include "qemu/osdep.h"
> +#include "qemu-common.h"
>  #include "qemu/units.h"
>  #include "qemu/error-report.h"
>  #include "exec/cpu-defs.h"
> @@ -32,6 +33,12 @@
>  # define KERNEL_BOOT_ADDRESS 0x80200000
>  #endif
>
> +#if defined(TARGET_RISCV32)
> +# define BIOS_FILENAME "opensbi-riscv32-fw_jump.elf"
> +#else
> +# define BIOS_FILENAME "opensbi-riscv64-fw_jump.elf"
> +#endif

Based on my comment on PATCH4, BIOS_FILENAME should
be derived from QEMU machine name and TARGET_RISCVx

Agree ??

Regards,
Anup

> +
>  static uint64_t kernel_translate(void *opaque, uint64_t addr)
>  {
>      MachineState *machine = opaque;
> @@ -47,6 +54,27 @@ static uint64_t kernel_translate(void *opaque, uint64_t addr)
>      }
>  }
>
> +void riscv_find_and_load_firmware(MachineState *machine)
> +{
> +    char *firmware_filename;
> +
> +    if (!machine->firmware) {
> +        /* The user didn't specify a firmware, default to OpenSBI */
> +        firmware_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, BIOS_FILENAME);
> +    } else {
> +        firmware_filename = machine->firmware;
> +    }
> +
> +    if (strcmp(firmware_filename, "none")) {
> +        /* If not "none" load the firmware */
> +        riscv_load_firmware(firmware_filename);
> +    }
> +
> +    if (!machine->firmware) {
> +        g_free(firmware_filename);
> +    }
> +}
> +
>  target_ulong riscv_load_firmware(const char *firmware_filename)
>  {
>      uint64_t firmware_entry, firmware_start, firmware_end;
> diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c
> index 03a6c64d04..77666d0f4d 100644
> --- a/hw/riscv/sifive_u.c
> +++ b/hw/riscv/sifive_u.c
> @@ -266,9 +266,7 @@ static void riscv_sifive_u_init(MachineState *machine)
>      /* create device tree */
>      create_fdt(s, memmap, machine->ram_size, machine->kernel_cmdline);
>
> -    if (machine->firmware) {
> -        riscv_load_firmware(machine->firmware);
> -    }
> +    riscv_find_and_load_firmware(machine);
>
>      if (machine->kernel_filename) {
>          riscv_load_kernel(machine, machine->kernel_filename);
> diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c
> index d3670b5a7c..2a7e850666 100644
> --- a/hw/riscv/virt.c
> +++ b/hw/riscv/virt.c
> @@ -380,9 +380,7 @@ static void riscv_virt_board_init(MachineState *machine)
>      memory_region_add_subregion(system_memory, memmap[VIRT_MROM].base,
>                                  mask_rom);
>
> -    if (machine->firmware) {
> -        riscv_load_firmware(machine->firmware);
> -    }
> +    riscv_find_and_load_firmware(machine);
>
>      if (machine->kernel_filename) {
>          uint64_t kernel_entry = riscv_load_kernel(machine,
> diff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h
> index 6f586939c7..df2e2480e6 100644
> --- a/include/hw/riscv/boot.h
> +++ b/include/hw/riscv/boot.h
> @@ -20,6 +20,7 @@
>  #ifndef RISCV_BOOT_H
>  #define RISCV_BOOT_H
>
> +void riscv_find_and_load_firmware(MachineState *machine);
>  target_ulong riscv_load_firmware(const char *firmware_filename);
>  target_ulong riscv_load_kernel(MachineState *machine,
>                                 const char *kernel_filename);
> --
> 2.22.0
>
>


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default
  2019-06-19  0:38 [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default Alistair Francis
                   ` (4 preceding siblings ...)
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 5/5] hw/riscv: Load OpenSBI as the default firmware Alistair Francis
@ 2019-06-19 14:26 ` Bin Meng
  2019-06-19 14:29   ` Alistair Francis
  5 siblings, 1 reply; 30+ messages in thread
From: Bin Meng @ 2019-06-19 14:26 UTC (permalink / raw)
  To: Alistair Francis
  Cc: Alistair Francis, Palmer Dabbelt, open list:RISC-V,
	qemu-devel@nongnu.org Developers

On Wed, Jun 19, 2019 at 8:56 AM Alistair Francis
<alistair.francis@wdc.com> wrote:
>
> This is an RFC as it will break ALL current users! See below for details.
>
> This series consolidates the current RISC-V kernel loading
> impelementation while also adding support for the -bios option and more
> advanced kernel image types.
>
> After consolidating the kernel loading we can extend the boot loader to
> support a -bios option. We can also extend the kernel loading options to
> support not just ELF files but other standard formats.
>
> Finally we can include the OpenSBI firmware by default for QEMU users.
>
> At the end of this series we are in the good place of no longer
> requiring users to build firmware to boot a kernel. Instead users can
> just run QEMu with the -kernel option and everything will work. They can

This is great. I like booting kernel directly for testing without
bothering the firmware stuff.

> also override the firmware with their own using the -bios option. Using
> "-bios none" will result in no firmware being loaded (as it is today).
>
> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
>
> Unfortunately this series (patch 5 specifically) results in all current
> Linux boots being broken as users are already loading in their own
> firmware, which overlaps with the now included default. They will
> see this error:
>
>   rom: requested regions overlap (rom phdr #0: ./images/qemuriscv64/fw_jump.elf. free=0x0000000080008090, addr=0x0000000080000000)
>   qemu-system-riscv64: rom check and register reset failed
>
> If a current user specieifies "-bios none" their flow will continue
> working. A user can instead no longer load their firmware and
> use the default or they can load their firmware with the -bios option.
>
> At the moment the best idea I have to not break all users is to only
> include the default firmware if the user specifies "-bios opensbi".
> That is change the default to not loading the firmware. Then we can work
> on updating documentation and maybe in future change the default to
> include a firmware and anyone who doesn't want a default firmware can
> specify "-bios none".
>
> Any other ideas on how to not break everything?
>
>
>
> Alistair Francis (5):
>   hw/riscv: Split out the boot functions
>   hw/riscv: Add support for loading a firmware
>   hw/riscv: Extend the kernel loading support
>   roms: Add OpenSBI version 0.3
>   hw/riscv: Load OpenSBI as the default firmware
>
>  .gitmodules                         |   3 +
>  Makefile                            |   3 +-
>  configure                           |   1 +
>  hw/riscv/Makefile.objs              |   1 +
>  hw/riscv/boot.c                     | 143 ++++++++++++++++++++++++++++
>  hw/riscv/sifive_e.c                 |  17 +---
>  hw/riscv/sifive_u.c                 |  19 +---
>  hw/riscv/spike.c                    |  21 +---
>  hw/riscv/virt.c                     |  54 ++---------
>  include/hw/riscv/boot.h             |  30 ++++++
>  pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
>  pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes

Since we are considering adding "bios" images, I prefer to add the
pure binary images instead of ELF images here.

>  roms/Makefile                       |  17 ++++
>  roms/opensbi                        |   1 +
>  14 files changed, 216 insertions(+), 94 deletions(-)
>  create mode 100644 hw/riscv/boot.c
>  create mode 100644 include/hw/riscv/boot.h
>  create mode 100644 pc-bios/opensbi-riscv32-fw_jump.elf
>  create mode 100644 pc-bios/opensbi-riscv64-fw_jump.elf
>  create mode 160000 roms/opensbi

Regards,
Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default
  2019-06-19 14:26 ` [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default Bin Meng
@ 2019-06-19 14:29   ` Alistair Francis
  2019-06-19 14:42     ` Bin Meng
  0 siblings, 1 reply; 30+ messages in thread
From: Alistair Francis @ 2019-06-19 14:29 UTC (permalink / raw)
  To: Bin Meng
  Cc: open list:RISC-V, Palmer Dabbelt, Alistair Francis,
	qemu-devel@nongnu.org Developers

On Wed, Jun 19, 2019 at 7:26 AM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> On Wed, Jun 19, 2019 at 8:56 AM Alistair Francis
> <alistair.francis@wdc.com> wrote:
> >
> > This is an RFC as it will break ALL current users! See below for details.
> >
> > This series consolidates the current RISC-V kernel loading
> > impelementation while also adding support for the -bios option and more
> > advanced kernel image types.
> >
> > After consolidating the kernel loading we can extend the boot loader to
> > support a -bios option. We can also extend the kernel loading options to
> > support not just ELF files but other standard formats.
> >
> > Finally we can include the OpenSBI firmware by default for QEMU users.
> >
> > At the end of this series we are in the good place of no longer
> > requiring users to build firmware to boot a kernel. Instead users can
> > just run QEMu with the -kernel option and everything will work. They can
>
> This is great. I like booting kernel directly for testing without
> bothering the firmware stuff.

That's the goal! Now we just need to not break everything.

>
> > also override the firmware with their own using the -bios option. Using
> > "-bios none" will result in no firmware being loaded (as it is today).
> >
> > !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> >
> > Unfortunately this series (patch 5 specifically) results in all current
> > Linux boots being broken as users are already loading in their own
> > firmware, which overlaps with the now included default. They will
> > see this error:
> >
> >   rom: requested regions overlap (rom phdr #0: ./images/qemuriscv64/fw_jump.elf. free=0x0000000080008090, addr=0x0000000080000000)
> >   qemu-system-riscv64: rom check and register reset failed
> >
> > If a current user specieifies "-bios none" their flow will continue
> > working. A user can instead no longer load their firmware and
> > use the default or they can load their firmware with the -bios option.
> >
> > At the moment the best idea I have to not break all users is to only
> > include the default firmware if the user specifies "-bios opensbi".
> > That is change the default to not loading the firmware. Then we can work
> > on updating documentation and maybe in future change the default to
> > include a firmware and anyone who doesn't want a default firmware can
> > specify "-bios none".
> >
> > Any other ideas on how to not break everything?
> >
> >
> >
> > Alistair Francis (5):
> >   hw/riscv: Split out the boot functions
> >   hw/riscv: Add support for loading a firmware
> >   hw/riscv: Extend the kernel loading support
> >   roms: Add OpenSBI version 0.3
> >   hw/riscv: Load OpenSBI as the default firmware
> >
> >  .gitmodules                         |   3 +
> >  Makefile                            |   3 +-
> >  configure                           |   1 +
> >  hw/riscv/Makefile.objs              |   1 +
> >  hw/riscv/boot.c                     | 143 ++++++++++++++++++++++++++++
> >  hw/riscv/sifive_e.c                 |  17 +---
> >  hw/riscv/sifive_u.c                 |  19 +---
> >  hw/riscv/spike.c                    |  21 +---
> >  hw/riscv/virt.c                     |  54 ++---------
> >  include/hw/riscv/boot.h             |  30 ++++++
> >  pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
> >  pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes
>
> Since we are considering adding "bios" images, I prefer to add the
> pure binary images instead of ELF images here.

I didn't think about that. Can we just boot them in QEMU like we do
with the ELFs?

Alistair

>
> >  roms/Makefile                       |  17 ++++
> >  roms/opensbi                        |   1 +
> >  14 files changed, 216 insertions(+), 94 deletions(-)
> >  create mode 100644 hw/riscv/boot.c
> >  create mode 100644 include/hw/riscv/boot.h
> >  create mode 100644 pc-bios/opensbi-riscv32-fw_jump.elf
> >  create mode 100644 pc-bios/opensbi-riscv64-fw_jump.elf
> >  create mode 160000 roms/opensbi
>
> Regards,
> Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default
  2019-06-19 14:29   ` Alistair Francis
@ 2019-06-19 14:42     ` Bin Meng
  2019-06-19 18:23       ` Alistair Francis
  0 siblings, 1 reply; 30+ messages in thread
From: Bin Meng @ 2019-06-19 14:42 UTC (permalink / raw)
  To: Alistair Francis
  Cc: open list:RISC-V, Palmer Dabbelt, Alistair Francis,
	qemu-devel@nongnu.org Developers

On Wed, Jun 19, 2019 at 10:30 PM Alistair Francis <alistair23@gmail.com> wrote:
>
> On Wed, Jun 19, 2019 at 7:26 AM Bin Meng <bmeng.cn@gmail.com> wrote:
> >
> > On Wed, Jun 19, 2019 at 8:56 AM Alistair Francis
> > <alistair.francis@wdc.com> wrote:
> > >
> > > This is an RFC as it will break ALL current users! See below for details.
> > >
> > > This series consolidates the current RISC-V kernel loading
> > > impelementation while also adding support for the -bios option and more
> > > advanced kernel image types.
> > >
> > > After consolidating the kernel loading we can extend the boot loader to
> > > support a -bios option. We can also extend the kernel loading options to
> > > support not just ELF files but other standard formats.
> > >
> > > Finally we can include the OpenSBI firmware by default for QEMU users.
> > >
> > > At the end of this series we are in the good place of no longer
> > > requiring users to build firmware to boot a kernel. Instead users can
> > > just run QEMu with the -kernel option and everything will work. They can
> >
> > This is great. I like booting kernel directly for testing without
> > bothering the firmware stuff.
>
> That's the goal! Now we just need to not break everything.
>
> >
> > > also override the firmware with their own using the -bios option. Using
> > > "-bios none" will result in no firmware being loaded (as it is today).
> > >
> > > !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> > >
> > > Unfortunately this series (patch 5 specifically) results in all current
> > > Linux boots being broken as users are already loading in their own
> > > firmware, which overlaps with the now included default. They will
> > > see this error:
> > >
> > >   rom: requested regions overlap (rom phdr #0: ./images/qemuriscv64/fw_jump.elf. free=0x0000000080008090, addr=0x0000000080000000)
> > >   qemu-system-riscv64: rom check and register reset failed
> > >
> > > If a current user specieifies "-bios none" their flow will continue
> > > working. A user can instead no longer load their firmware and
> > > use the default or they can load their firmware with the -bios option.
> > >
> > > At the moment the best idea I have to not break all users is to only
> > > include the default firmware if the user specifies "-bios opensbi".
> > > That is change the default to not loading the firmware. Then we can work
> > > on updating documentation and maybe in future change the default to
> > > include a firmware and anyone who doesn't want a default firmware can
> > > specify "-bios none".
> > >
> > > Any other ideas on how to not break everything?
> > >
> > >
> > >
> > > Alistair Francis (5):
> > >   hw/riscv: Split out the boot functions
> > >   hw/riscv: Add support for loading a firmware
> > >   hw/riscv: Extend the kernel loading support
> > >   roms: Add OpenSBI version 0.3
> > >   hw/riscv: Load OpenSBI as the default firmware
> > >
> > >  .gitmodules                         |   3 +
> > >  Makefile                            |   3 +-
> > >  configure                           |   1 +
> > >  hw/riscv/Makefile.objs              |   1 +
> > >  hw/riscv/boot.c                     | 143 ++++++++++++++++++++++++++++
> > >  hw/riscv/sifive_e.c                 |  17 +---
> > >  hw/riscv/sifive_u.c                 |  19 +---
> > >  hw/riscv/spike.c                    |  21 +---
> > >  hw/riscv/virt.c                     |  54 ++---------
> > >  include/hw/riscv/boot.h             |  30 ++++++
> > >  pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
> > >  pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes
> >
> > Since we are considering adding "bios" images, I prefer to add the
> > pure binary images instead of ELF images here.
>
> I didn't think about that. Can we just boot them in QEMU like we do
> with the ELFs?

Yes, use load_image_targphys() instead of load_elf().

Regards,
Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [RFC v1 1/5] hw/riscv: Split out the boot functions
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 1/5] hw/riscv: Split out the boot functions Alistair Francis
@ 2019-06-19 15:16   ` Bin Meng
  2019-06-19 18:24     ` Alistair Francis
  0 siblings, 1 reply; 30+ messages in thread
From: Bin Meng @ 2019-06-19 15:16 UTC (permalink / raw)
  To: Alistair Francis
  Cc: Alistair Francis, Palmer Dabbelt, open list:RISC-V,
	qemu-devel@nongnu.org Developers

On Wed, Jun 19, 2019 at 8:51 AM Alistair Francis
<alistair.francis@wdc.com> wrote:
>
> Split the common RISC-V boot functions into a seperate file. This allows
> us to share the common code.
>
> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> ---
>  hw/riscv/Makefile.objs  |  1 +
>  hw/riscv/boot.c         | 69 +++++++++++++++++++++++++++++++++++++++++
>  hw/riscv/sifive_e.c     | 17 ++--------
>  hw/riscv/sifive_u.c     | 17 ++--------
>  hw/riscv/spike.c        | 21 +++----------
>  hw/riscv/virt.c         | 51 +++---------------------------
>  include/hw/riscv/boot.h | 27 ++++++++++++++++
>  7 files changed, 110 insertions(+), 93 deletions(-)
>  create mode 100644 hw/riscv/boot.c
>  create mode 100644 include/hw/riscv/boot.h
>
> diff --git a/hw/riscv/Makefile.objs b/hw/riscv/Makefile.objs
> index a65027304a..eb9d4f9ffc 100644
> --- a/hw/riscv/Makefile.objs
> +++ b/hw/riscv/Makefile.objs
> @@ -1,3 +1,4 @@
> +obj-y += boot.o
>  obj-$(CONFIG_SPIKE) += riscv_htif.o
>  obj-$(CONFIG_HART) += riscv_hart.o
>  obj-$(CONFIG_SIFIVE_E) += sifive_e.o
> diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
> new file mode 100644
> index 0000000000..62f94aaf8a
> --- /dev/null
> +++ b/hw/riscv/boot.c
> @@ -0,0 +1,69 @@
> +/*
> + * QEMU RISC-V Boot Helper
> + *
> + * Copyright (c) 2017 SiFive, Inc.
> + * Copyright (c) 2019 Alistair Francis <alistair.francis@wdc.com>
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms and conditions of the GNU General Public License,
> + * version 2 or later, as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope it will be useful, but WITHOUT
> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
> + * more details.
> + *
> + * You should have received a copy of the GNU General Public License along with
> + * this program.  If not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#include "qemu/osdep.h"
> +#include "qemu/units.h"
> +#include "qemu/error-report.h"
> +#include "exec/cpu-defs.h"
> +#include "hw/loader.h"
> +#include "hw/riscv/boot.h"
> +#include "elf.h"
> +
> +target_ulong riscv_load_kernel(const char *kernel_filename)
> +{
> +    uint64_t kernel_entry, kernel_high;
> +
> +    if (load_elf(kernel_filename, NULL, NULL, NULL,
> +                 &kernel_entry, NULL, &kernel_high,
> +                 0, EM_RISCV, 1, 0) < 0) {
> +        error_report("could not load kernel '%s'", kernel_filename);
> +        exit(1);
> +    }
> +
> +    return kernel_entry;
> +}
> +
> +hwaddr riscv_load_initrd(const char *filename, uint64_t mem_size,
> +                         uint64_t kernel_entry, hwaddr *start)
> +{
> +    int size;
> +
> +    /* We want to put the initrd far enough into RAM that when the

nits: /* should be on a separate line

> +     * kernel is uncompressed it will not clobber the initrd. However
> +     * on boards without much RAM we must ensure that we still leave
> +     * enough room for a decent sized initrd, and on boards with large
> +     * amounts of RAM we must avoid the initrd being so far up in RAM
> +     * that it is outside lowmem and inaccessible to the kernel.
> +     * So for boards with less  than 256MB of RAM we put the initrd
> +     * halfway into RAM, and for boards with 256MB of RAM or more we put
> +     * the initrd at 128MB.
> +     */

[snip]

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [RFC v1 2/5] hw/riscv: Add support for loading a firmware
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 2/5] hw/riscv: Add support for loading a firmware Alistair Francis
@ 2019-06-19 15:16   ` Bin Meng
  2019-06-19 15:25     ` [Qemu-devel] [Qemu-riscv] " Jonathan Behrens
  0 siblings, 1 reply; 30+ messages in thread
From: Bin Meng @ 2019-06-19 15:16 UTC (permalink / raw)
  To: Alistair Francis
  Cc: Alistair Francis, Palmer Dabbelt, open list:RISC-V,
	qemu-devel@nongnu.org Developers

On Wed, Jun 19, 2019 at 8:53 AM Alistair Francis
<alistair.francis@wdc.com> wrote:
>
> Add support for loading a firmware file for the virt machine and the
> SiFive U. This can be run with the following command:
>
>     qemu-system-riscv64 -machine virt -bios fw_jump.elf -kernel vmlinux
>
> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> ---
>  hw/riscv/boot.c         | 41 +++++++++++++++++++++++++++++++++++++++--
>  hw/riscv/sifive_e.c     |  2 +-
>  hw/riscv/sifive_u.c     |  6 +++++-
>  hw/riscv/spike.c        |  6 +++---
>  hw/riscv/virt.c         |  7 ++++++-
>  include/hw/riscv/boot.h |  4 +++-
>  6 files changed, 57 insertions(+), 9 deletions(-)
>
> diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
> index 62f94aaf8a..392ca0cb2e 100644
> --- a/hw/riscv/boot.c
> +++ b/hw/riscv/boot.c
> @@ -23,13 +23,50 @@
>  #include "exec/cpu-defs.h"
>  #include "hw/loader.h"
>  #include "hw/riscv/boot.h"
> +#include "hw/boards.h"
>  #include "elf.h"
>
> -target_ulong riscv_load_kernel(const char *kernel_filename)
> +#if defined(TARGET_RISCV32)
> +# define KERNEL_BOOT_ADDRESS 0x80400000
> +#else
> +# define KERNEL_BOOT_ADDRESS 0x80200000
> +#endif
> +
> +static uint64_t kernel_translate(void *opaque, uint64_t addr)
> +{
> +    MachineState *machine = opaque;
> +
> +    /*
> +     * If the user specified a firmware move the kernel to the offset
> +     * start address.
> +     */

Why?

> +    if (machine->firmware) {
> +        return (addr & 0x7fffffff) + KERNEL_BOOT_ADDRESS;

So with both "-bios" and "-kernel", the kernel address will be moved
to another address other than 0x80200000 (for 64-bit). This does not
look good to me.

> +    } else {
> +        return addr;
> +    }
> +}
> +

[snip]

Regards,
Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [RFC v1 3/5] hw/riscv: Extend the kernel loading support
  2019-06-19  0:38 ` [Qemu-devel] [RFC v1 3/5] hw/riscv: Extend the kernel loading support Alistair Francis
@ 2019-06-19 15:16   ` Bin Meng
  2019-06-19 21:01     ` Alistair Francis
  0 siblings, 1 reply; 30+ messages in thread
From: Bin Meng @ 2019-06-19 15:16 UTC (permalink / raw)
  To: Alistair Francis
  Cc: Alistair Francis, Palmer Dabbelt, open list:RISC-V,
	qemu-devel@nongnu.org Developers

On Wed, Jun 19, 2019 at 8:56 AM Alistair Francis
<alistair.francis@wdc.com> wrote:
>
> Extend the RISC-V kernel loader to support uImage and Image files.
> A Linux kernel can now be booted with:
>
>     qemu-system-riscv64 -machine virt -bios fw_jump.elf -kernel Image
>
> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> ---
>  hw/riscv/boot.c | 19 ++++++++++++++-----
>  1 file changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
> index 392ca0cb2e..7f68035a3f 100644
> --- a/hw/riscv/boot.c
> +++ b/hw/riscv/boot.c
> @@ -67,13 +67,22 @@ target_ulong riscv_load_kernel(MachineState *machine,
>      uint64_t kernel_entry, kernel_high;
>
>      if (load_elf(kernel_filename, NULL, kernel_translate, machine,
> -                 &kernel_entry, NULL, &kernel_high,
> -                 0, EM_RISCV, 1, 0) < 0) {
> -        error_report("could not load kernel '%s'", kernel_filename);
> -        exit(1);
> +                 &kernel_entry, NULL, &kernel_high, 0, EM_RISCV, 1, 0) > 0) {
> +        return kernel_entry;
> +    }
> +
> +    if (load_uimage_as(kernel_filename, &kernel_entry, NULL, NULL,
> +                       kernel_translate, machine, NULL) > 0) {

We should not set the 'kernel_translate' here for uImage.

In fact, the whole kernel_translate() is not necessary.

> +        return kernel_entry;
> +    }
> +

Regards,
Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 4/5] roms: Add OpenSBI version 0.3
  2019-06-19  5:14   ` [Qemu-devel] [Qemu-riscv] " Anup Patel
@ 2019-06-19 15:18     ` Bin Meng
  2019-06-19 18:27       ` Alistair Francis
  0 siblings, 1 reply; 30+ messages in thread
From: Bin Meng @ 2019-06-19 15:18 UTC (permalink / raw)
  To: Anup Patel
  Cc: Alistair Francis, Palmer Dabbelt, Alistair Francis,
	open list:RISC-V, QEMU Developers

On Wed, Jun 19, 2019 at 1:14 PM Anup Patel <anup@brainfault.org> wrote:
>
> On Wed, Jun 19, 2019 at 6:24 AM Alistair Francis
> <alistair.francis@wdc.com> wrote:
> >
> > Add OpenSBI version 0.3 as a git submodule and as a prebult binary.
> >
> > Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> > ---
> >  .gitmodules                         |   3 +++
> >  Makefile                            |   3 ++-
> >  configure                           |   1 +
> >  pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
> >  pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes
> >  roms/Makefile                       |  17 +++++++++++++++++
> >  roms/opensbi                        |   1 +
> >  7 files changed, 24 insertions(+), 1 deletion(-)
> >  create mode 100644 pc-bios/opensbi-riscv32-fw_jump.elf
> >  create mode 100644 pc-bios/opensbi-riscv64-fw_jump.elf
> >  create mode 160000 roms/opensbi
> >
>
> The OpenSBI firmwares are platform specific so we should have
> machine directory under pc-bios/ directory
>
> So for virt machine we will have:
> pc-bios/riscv32/virt/fw_jump.elf
> pc-bios/riscv64/virt/fw_jump.elf

And we should only integrate plain binary image for "bios" images here.

pc-bios/riscv32/virt/fw_jump.bin
pc-bios/riscv64/virt/fw_jump.bin

Regards,
Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 2/5] hw/riscv: Add support for loading a firmware
  2019-06-19 15:16   ` Bin Meng
@ 2019-06-19 15:25     ` Jonathan Behrens
  2019-06-19 15:30       ` Bin Meng
  0 siblings, 1 reply; 30+ messages in thread
From: Jonathan Behrens @ 2019-06-19 15:25 UTC (permalink / raw)
  To: Bin Meng
  Cc: Alistair Francis, Palmer Dabbelt, Alistair Francis,
	open list:RISC-V, qemu-devel@nongnu.org Developers

I was actually just writing up the same thing.  Shifting all the addresses
in the ELF file by 2 or 4MB is somewhat surprising behavior, especially
because this will apply to segments that are mapped even at much higher
addresses. If you want a segment aligned to a 1GB superpage boundary you
now need to place it slightly below so that it will be bumped up to the
right place. Further, ANDing all addresses with 0x7fffffff makes it
impossible to map anything beyond the first 2GB of RAM.

Jonathan

On Wed, Jun 19, 2019 at 11:16 AM Bin Meng <bmeng.cn@gmail.com> wrote:

> On Wed, Jun 19, 2019 at 8:53 AM Alistair Francis
> <alistair.francis@wdc.com> wrote:
> >
> > Add support for loading a firmware file for the virt machine and the
> > SiFive U. This can be run with the following command:
> >
> >     qemu-system-riscv64 -machine virt -bios fw_jump.elf -kernel vmlinux
> >
> > Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> > ---
> >  hw/riscv/boot.c         | 41 +++++++++++++++++++++++++++++++++++++++--
> >  hw/riscv/sifive_e.c     |  2 +-
> >  hw/riscv/sifive_u.c     |  6 +++++-
> >  hw/riscv/spike.c        |  6 +++---
> >  hw/riscv/virt.c         |  7 ++++++-
> >  include/hw/riscv/boot.h |  4 +++-
> >  6 files changed, 57 insertions(+), 9 deletions(-)
> >
> > diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
> > index 62f94aaf8a..392ca0cb2e 100644
> > --- a/hw/riscv/boot.c
> > +++ b/hw/riscv/boot.c
> > @@ -23,13 +23,50 @@
> >  #include "exec/cpu-defs.h"
> >  #include "hw/loader.h"
> >  #include "hw/riscv/boot.h"
> > +#include "hw/boards.h"
> >  #include "elf.h"
> >
> > -target_ulong riscv_load_kernel(const char *kernel_filename)
> > +#if defined(TARGET_RISCV32)
> > +# define KERNEL_BOOT_ADDRESS 0x80400000
> > +#else
> > +# define KERNEL_BOOT_ADDRESS 0x80200000
> > +#endif
> > +
> > +static uint64_t kernel_translate(void *opaque, uint64_t addr)
> > +{
> > +    MachineState *machine = opaque;
> > +
> > +    /*
> > +     * If the user specified a firmware move the kernel to the offset
> > +     * start address.
> > +     */
>
> Why?
>
> > +    if (machine->firmware) {
> > +        return (addr & 0x7fffffff) + KERNEL_BOOT_ADDRESS;
>
> So with both "-bios" and "-kernel", the kernel address will be moved
> to another address other than 0x80200000 (for 64-bit). This does not
> look good to me.
>
> > +    } else {
> > +        return addr;
> > +    }
> > +}
> > +
>
> [snip]
>
> Regards,
> Bin
>
>

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 2/5] hw/riscv: Add support for loading a firmware
  2019-06-19 15:25     ` [Qemu-devel] [Qemu-riscv] " Jonathan Behrens
@ 2019-06-19 15:30       ` Bin Meng
  2019-06-19 21:00         ` Alistair Francis
  0 siblings, 1 reply; 30+ messages in thread
From: Bin Meng @ 2019-06-19 15:30 UTC (permalink / raw)
  To: Jonathan Behrens
  Cc: Alistair Francis, Palmer Dabbelt, Alistair Francis,
	open list:RISC-V, qemu-devel@nongnu.org Developers

Hi,

On Wed, Jun 19, 2019 at 11:26 PM Jonathan Behrens <fintelia@gmail.com> wrote:
>
> I was actually just writing up the same thing.  Shifting all the addresses in the ELF file by 2 or 4MB is somewhat surprising behavior, especially because this will apply to segments that are mapped even at much higher addresses. If you want a segment aligned to a 1GB superpage boundary you now need to place it slightly below so that it will be bumped up to the right place. Further, ANDing all addresses with 0x7fffffff makes it impossible to map anything beyond the first 2GB of RAM.
>

Yes, current kernel_translate() logic is tightly coupled to the kernel
entry VA, and if we link kernel at some other address it will just
fail.

> Jonathan
>
> On Wed, Jun 19, 2019 at 11:16 AM Bin Meng <bmeng.cn@gmail.com> wrote:
>>
>> On Wed, Jun 19, 2019 at 8:53 AM Alistair Francis
>> <alistair.francis@wdc.com> wrote:
>> >
>> > Add support for loading a firmware file for the virt machine and the
>> > SiFive U. This can be run with the following command:
>> >
>> >     qemu-system-riscv64 -machine virt -bios fw_jump.elf -kernel vmlinux
>> >
>> > Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
>> > ---
>> >  hw/riscv/boot.c         | 41 +++++++++++++++++++++++++++++++++++++++--
>> >  hw/riscv/sifive_e.c     |  2 +-
>> >  hw/riscv/sifive_u.c     |  6 +++++-
>> >  hw/riscv/spike.c        |  6 +++---
>> >  hw/riscv/virt.c         |  7 ++++++-
>> >  include/hw/riscv/boot.h |  4 +++-
>> >  6 files changed, 57 insertions(+), 9 deletions(-)
>> >
>> > diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
>> > index 62f94aaf8a..392ca0cb2e 100644
>> > --- a/hw/riscv/boot.c
>> > +++ b/hw/riscv/boot.c
>> > @@ -23,13 +23,50 @@
>> >  #include "exec/cpu-defs.h"
>> >  #include "hw/loader.h"
>> >  #include "hw/riscv/boot.h"
>> > +#include "hw/boards.h"
>> >  #include "elf.h"
>> >
>> > -target_ulong riscv_load_kernel(const char *kernel_filename)
>> > +#if defined(TARGET_RISCV32)
>> > +# define KERNEL_BOOT_ADDRESS 0x80400000
>> > +#else
>> > +# define KERNEL_BOOT_ADDRESS 0x80200000
>> > +#endif
>> > +
>> > +static uint64_t kernel_translate(void *opaque, uint64_t addr)
>> > +{
>> > +    MachineState *machine = opaque;
>> > +
>> > +    /*
>> > +     * If the user specified a firmware move the kernel to the offset
>> > +     * start address.
>> > +     */
>>
>> Why?
>>
>> > +    if (machine->firmware) {
>> > +        return (addr & 0x7fffffff) + KERNEL_BOOT_ADDRESS;
>>
>> So with both "-bios" and "-kernel", the kernel address will be moved
>> to another address other than 0x80200000 (for 64-bit). This does not
>> look good to me.
>>

So why not simply return KERNEL_BOOT_ADDRESS in kernel_translate()?

Regards,
Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default
  2019-06-19 14:42     ` Bin Meng
@ 2019-06-19 18:23       ` Alistair Francis
  2019-06-20  8:16         ` [Qemu-devel] [Qemu-riscv] " Andrea Bolognani
  0 siblings, 1 reply; 30+ messages in thread
From: Alistair Francis @ 2019-06-19 18:23 UTC (permalink / raw)
  To: Bin Meng
  Cc: open list:RISC-V, Palmer Dabbelt, Alistair Francis,
	qemu-devel@nongnu.org Developers

On Wed, Jun 19, 2019 at 7:42 AM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> On Wed, Jun 19, 2019 at 10:30 PM Alistair Francis <alistair23@gmail.com> wrote:
> >
> > On Wed, Jun 19, 2019 at 7:26 AM Bin Meng <bmeng.cn@gmail.com> wrote:
> > >
> > > On Wed, Jun 19, 2019 at 8:56 AM Alistair Francis
> > > <alistair.francis@wdc.com> wrote:
> > > >
> > > > This is an RFC as it will break ALL current users! See below for details.
> > > >
> > > > This series consolidates the current RISC-V kernel loading
> > > > impelementation while also adding support for the -bios option and more
> > > > advanced kernel image types.
> > > >
> > > > After consolidating the kernel loading we can extend the boot loader to
> > > > support a -bios option. We can also extend the kernel loading options to
> > > > support not just ELF files but other standard formats.
> > > >
> > > > Finally we can include the OpenSBI firmware by default for QEMU users.
> > > >
> > > > At the end of this series we are in the good place of no longer
> > > > requiring users to build firmware to boot a kernel. Instead users can
> > > > just run QEMu with the -kernel option and everything will work. They can
> > >
> > > This is great. I like booting kernel directly for testing without
> > > bothering the firmware stuff.
> >
> > That's the goal! Now we just need to not break everything.
> >
> > >
> > > > also override the firmware with their own using the -bios option. Using
> > > > "-bios none" will result in no firmware being loaded (as it is today).
> > > >
> > > > !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> > > >
> > > > Unfortunately this series (patch 5 specifically) results in all current
> > > > Linux boots being broken as users are already loading in their own
> > > > firmware, which overlaps with the now included default. They will
> > > > see this error:
> > > >
> > > >   rom: requested regions overlap (rom phdr #0: ./images/qemuriscv64/fw_jump.elf. free=0x0000000080008090, addr=0x0000000080000000)
> > > >   qemu-system-riscv64: rom check and register reset failed
> > > >
> > > > If a current user specieifies "-bios none" their flow will continue
> > > > working. A user can instead no longer load their firmware and
> > > > use the default or they can load their firmware with the -bios option.
> > > >
> > > > At the moment the best idea I have to not break all users is to only
> > > > include the default firmware if the user specifies "-bios opensbi".
> > > > That is change the default to not loading the firmware. Then we can work
> > > > on updating documentation and maybe in future change the default to
> > > > include a firmware and anyone who doesn't want a default firmware can
> > > > specify "-bios none".
> > > >
> > > > Any other ideas on how to not break everything?
> > > >
> > > >
> > > >
> > > > Alistair Francis (5):
> > > >   hw/riscv: Split out the boot functions
> > > >   hw/riscv: Add support for loading a firmware
> > > >   hw/riscv: Extend the kernel loading support
> > > >   roms: Add OpenSBI version 0.3
> > > >   hw/riscv: Load OpenSBI as the default firmware
> > > >
> > > >  .gitmodules                         |   3 +
> > > >  Makefile                            |   3 +-
> > > >  configure                           |   1 +
> > > >  hw/riscv/Makefile.objs              |   1 +
> > > >  hw/riscv/boot.c                     | 143 ++++++++++++++++++++++++++++
> > > >  hw/riscv/sifive_e.c                 |  17 +---
> > > >  hw/riscv/sifive_u.c                 |  19 +---
> > > >  hw/riscv/spike.c                    |  21 +---
> > > >  hw/riscv/virt.c                     |  54 ++---------
> > > >  include/hw/riscv/boot.h             |  30 ++++++
> > > >  pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
> > > >  pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes
> > >
> > > Since we are considering adding "bios" images, I prefer to add the
> > > pure binary images instead of ELF images here.
> >
> > I didn't think about that. Can we just boot them in QEMU like we do
> > with the ELFs?
>
> Yes, use load_image_targphys() instead of load_elf().

Ah, that is obvious. I'll update it to use the bin files then.

Alistair

>
> Regards,
> Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [RFC v1 1/5] hw/riscv: Split out the boot functions
  2019-06-19 15:16   ` Bin Meng
@ 2019-06-19 18:24     ` Alistair Francis
  0 siblings, 0 replies; 30+ messages in thread
From: Alistair Francis @ 2019-06-19 18:24 UTC (permalink / raw)
  To: Bin Meng
  Cc: open list:RISC-V, Palmer Dabbelt, Alistair Francis,
	qemu-devel@nongnu.org Developers

On Wed, Jun 19, 2019 at 8:16 AM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> On Wed, Jun 19, 2019 at 8:51 AM Alistair Francis
> <alistair.francis@wdc.com> wrote:
> >
> > Split the common RISC-V boot functions into a seperate file. This allows
> > us to share the common code.
> >
> > Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> > ---
> >  hw/riscv/Makefile.objs  |  1 +
> >  hw/riscv/boot.c         | 69 +++++++++++++++++++++++++++++++++++++++++
> >  hw/riscv/sifive_e.c     | 17 ++--------
> >  hw/riscv/sifive_u.c     | 17 ++--------
> >  hw/riscv/spike.c        | 21 +++----------
> >  hw/riscv/virt.c         | 51 +++---------------------------
> >  include/hw/riscv/boot.h | 27 ++++++++++++++++
> >  7 files changed, 110 insertions(+), 93 deletions(-)
> >  create mode 100644 hw/riscv/boot.c
> >  create mode 100644 include/hw/riscv/boot.h
> >
> > diff --git a/hw/riscv/Makefile.objs b/hw/riscv/Makefile.objs
> > index a65027304a..eb9d4f9ffc 100644
> > --- a/hw/riscv/Makefile.objs
> > +++ b/hw/riscv/Makefile.objs
> > @@ -1,3 +1,4 @@
> > +obj-y += boot.o
> >  obj-$(CONFIG_SPIKE) += riscv_htif.o
> >  obj-$(CONFIG_HART) += riscv_hart.o
> >  obj-$(CONFIG_SIFIVE_E) += sifive_e.o
> > diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
> > new file mode 100644
> > index 0000000000..62f94aaf8a
> > --- /dev/null
> > +++ b/hw/riscv/boot.c
> > @@ -0,0 +1,69 @@
> > +/*
> > + * QEMU RISC-V Boot Helper
> > + *
> > + * Copyright (c) 2017 SiFive, Inc.
> > + * Copyright (c) 2019 Alistair Francis <alistair.francis@wdc.com>
> > + *
> > + * This program is free software; you can redistribute it and/or modify it
> > + * under the terms and conditions of the GNU General Public License,
> > + * version 2 or later, as published by the Free Software Foundation.
> > + *
> > + * This program is distributed in the hope it will be useful, but WITHOUT
> > + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> > + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
> > + * more details.
> > + *
> > + * You should have received a copy of the GNU General Public License along with
> > + * this program.  If not, see <http://www.gnu.org/licenses/>.
> > + */
> > +
> > +#include "qemu/osdep.h"
> > +#include "qemu/units.h"
> > +#include "qemu/error-report.h"
> > +#include "exec/cpu-defs.h"
> > +#include "hw/loader.h"
> > +#include "hw/riscv/boot.h"
> > +#include "elf.h"
> > +
> > +target_ulong riscv_load_kernel(const char *kernel_filename)
> > +{
> > +    uint64_t kernel_entry, kernel_high;
> > +
> > +    if (load_elf(kernel_filename, NULL, NULL, NULL,
> > +                 &kernel_entry, NULL, &kernel_high,
> > +                 0, EM_RISCV, 1, 0) < 0) {
> > +        error_report("could not load kernel '%s'", kernel_filename);
> > +        exit(1);
> > +    }
> > +
> > +    return kernel_entry;
> > +}
> > +
> > +hwaddr riscv_load_initrd(const char *filename, uint64_t mem_size,
> > +                         uint64_t kernel_entry, hwaddr *start)
> > +{
> > +    int size;
> > +
> > +    /* We want to put the initrd far enough into RAM that when the
>
> nits: /* should be on a separate line

Fixed

>
> > +     * kernel is uncompressed it will not clobber the initrd. However
> > +     * on boards without much RAM we must ensure that we still leave
> > +     * enough room for a decent sized initrd, and on boards with large
> > +     * amounts of RAM we must avoid the initrd being so far up in RAM
> > +     * that it is outside lowmem and inaccessible to the kernel.
> > +     * So for boards with less  than 256MB of RAM we put the initrd
> > +     * halfway into RAM, and for boards with 256MB of RAM or more we put
> > +     * the initrd at 128MB.
> > +     */
>
> [snip]
>
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> Tested-by: Bin Meng <bmeng.cn@gmail.com>

Thanks!

Alistair


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 4/5] roms: Add OpenSBI version 0.3
  2019-06-19 15:18     ` Bin Meng
@ 2019-06-19 18:27       ` Alistair Francis
  2019-06-21  5:41         ` Bin Meng
  0 siblings, 1 reply; 30+ messages in thread
From: Alistair Francis @ 2019-06-19 18:27 UTC (permalink / raw)
  To: Bin Meng
  Cc: Anup Patel, Palmer Dabbelt, Alistair Francis, open list:RISC-V,
	QEMU Developers

On Wed, Jun 19, 2019 at 8:18 AM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> On Wed, Jun 19, 2019 at 1:14 PM Anup Patel <anup@brainfault.org> wrote:
> >
> > On Wed, Jun 19, 2019 at 6:24 AM Alistair Francis
> > <alistair.francis@wdc.com> wrote:
> > >
> > > Add OpenSBI version 0.3 as a git submodule and as a prebult binary.
> > >
> > > Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> > > ---
> > >  .gitmodules                         |   3 +++
> > >  Makefile                            |   3 ++-
> > >  configure                           |   1 +
> > >  pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
> > >  pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes
> > >  roms/Makefile                       |  17 +++++++++++++++++
> > >  roms/opensbi                        |   1 +
> > >  7 files changed, 24 insertions(+), 1 deletion(-)
> > >  create mode 100644 pc-bios/opensbi-riscv32-fw_jump.elf
> > >  create mode 100644 pc-bios/opensbi-riscv64-fw_jump.elf
> > >  create mode 160000 roms/opensbi
> > >
> >
> > The OpenSBI firmwares are platform specific so we should have
> > machine directory under pc-bios/ directory
> >
> > So for virt machine we will have:
> > pc-bios/riscv32/virt/fw_jump.elf
> > pc-bios/riscv64/virt/fw_jump.elf

I have updated the names to indicate the machine. The pc-bios directly
appears to be flat (at least for binaries) so I don't want to add
subdirectories.

>
> And we should only integrate plain binary image for "bios" images here.
>
> pc-bios/riscv32/virt/fw_jump.bin
> pc-bios/riscv64/virt/fw_jump.bin

Yep, fixed.

Alistair

>
> Regards,
> Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 2/5] hw/riscv: Add support for loading a firmware
  2019-06-19 15:30       ` Bin Meng
@ 2019-06-19 21:00         ` Alistair Francis
  0 siblings, 0 replies; 30+ messages in thread
From: Alistair Francis @ 2019-06-19 21:00 UTC (permalink / raw)
  To: Bin Meng
  Cc: open list:RISC-V, Palmer Dabbelt, Alistair Francis,
	Jonathan Behrens, qemu-devel@nongnu.org Developers

On Wed, Jun 19, 2019 at 8:30 AM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> Hi,
>
> On Wed, Jun 19, 2019 at 11:26 PM Jonathan Behrens <fintelia@gmail.com> wrote:
> >
> > I was actually just writing up the same thing.  Shifting all the addresses in the ELF file by 2 or 4MB is somewhat surprising behavior, especially because this will apply to segments that are mapped even at much higher addresses. If you want a segment aligned to a 1GB superpage boundary you now need to place it slightly below so that it will be bumped up to the right place. Further, ANDing all addresses with 0x7fffffff makes it impossible to map anything beyond the first 2GB of RAM.
> >
>
> Yes, current kernel_translate() logic is tightly coupled to the kernel
> entry VA, and if we link kernel at some other address it will just
> fail.

I thought this was required but it looks like it isn't. I have remove
the kernel_translate() function.

>
> > Jonathan
> >
> > On Wed, Jun 19, 2019 at 11:16 AM Bin Meng <bmeng.cn@gmail.com> wrote:
> >>
> >> On Wed, Jun 19, 2019 at 8:53 AM Alistair Francis
> >> <alistair.francis@wdc.com> wrote:
> >> >
> >> > Add support for loading a firmware file for the virt machine and the
> >> > SiFive U. This can be run with the following command:
> >> >
> >> >     qemu-system-riscv64 -machine virt -bios fw_jump.elf -kernel vmlinux
> >> >
> >> > Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> >> > ---
> >> >  hw/riscv/boot.c         | 41 +++++++++++++++++++++++++++++++++++++++--
> >> >  hw/riscv/sifive_e.c     |  2 +-
> >> >  hw/riscv/sifive_u.c     |  6 +++++-
> >> >  hw/riscv/spike.c        |  6 +++---
> >> >  hw/riscv/virt.c         |  7 ++++++-
> >> >  include/hw/riscv/boot.h |  4 +++-
> >> >  6 files changed, 57 insertions(+), 9 deletions(-)
> >> >
> >> > diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
> >> > index 62f94aaf8a..392ca0cb2e 100644
> >> > --- a/hw/riscv/boot.c
> >> > +++ b/hw/riscv/boot.c
> >> > @@ -23,13 +23,50 @@
> >> >  #include "exec/cpu-defs.h"
> >> >  #include "hw/loader.h"
> >> >  #include "hw/riscv/boot.h"
> >> > +#include "hw/boards.h"
> >> >  #include "elf.h"
> >> >
> >> > -target_ulong riscv_load_kernel(const char *kernel_filename)
> >> > +#if defined(TARGET_RISCV32)
> >> > +# define KERNEL_BOOT_ADDRESS 0x80400000
> >> > +#else
> >> > +# define KERNEL_BOOT_ADDRESS 0x80200000
> >> > +#endif
> >> > +
> >> > +static uint64_t kernel_translate(void *opaque, uint64_t addr)
> >> > +{
> >> > +    MachineState *machine = opaque;
> >> > +
> >> > +    /*
> >> > +     * If the user specified a firmware move the kernel to the offset
> >> > +     * start address.
> >> > +     */
> >>
> >> Why?

Removed.

> >>
> >> > +    if (machine->firmware) {
> >> > +        return (addr & 0x7fffffff) + KERNEL_BOOT_ADDRESS;
> >>
> >> So with both "-bios" and "-kernel", the kernel address will be moved
> >> to another address other than 0x80200000 (for 64-bit). This does not
> >> look good to me.
> >>
>
> So why not simply return KERNEL_BOOT_ADDRESS in kernel_translate()?

That's what I am doing now.

Alistair

>
> Regards,
> Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [RFC v1 3/5] hw/riscv: Extend the kernel loading support
  2019-06-19 15:16   ` Bin Meng
@ 2019-06-19 21:01     ` Alistair Francis
  2019-06-19 22:06       ` Alistair Francis
  0 siblings, 1 reply; 30+ messages in thread
From: Alistair Francis @ 2019-06-19 21:01 UTC (permalink / raw)
  To: Bin Meng
  Cc: open list:RISC-V, Palmer Dabbelt, Alistair Francis,
	qemu-devel@nongnu.org Developers

On Wed, Jun 19, 2019 at 8:16 AM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> On Wed, Jun 19, 2019 at 8:56 AM Alistair Francis
> <alistair.francis@wdc.com> wrote:
> >
> > Extend the RISC-V kernel loader to support uImage and Image files.
> > A Linux kernel can now be booted with:
> >
> >     qemu-system-riscv64 -machine virt -bios fw_jump.elf -kernel Image
> >
> > Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> > ---
> >  hw/riscv/boot.c | 19 ++++++++++++++-----
> >  1 file changed, 14 insertions(+), 5 deletions(-)
> >
> > diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
> > index 392ca0cb2e..7f68035a3f 100644
> > --- a/hw/riscv/boot.c
> > +++ b/hw/riscv/boot.c
> > @@ -67,13 +67,22 @@ target_ulong riscv_load_kernel(MachineState *machine,
> >      uint64_t kernel_entry, kernel_high;
> >
> >      if (load_elf(kernel_filename, NULL, kernel_translate, machine,
> > -                 &kernel_entry, NULL, &kernel_high,
> > -                 0, EM_RISCV, 1, 0) < 0) {
> > -        error_report("could not load kernel '%s'", kernel_filename);
> > -        exit(1);
> > +                 &kernel_entry, NULL, &kernel_high, 0, EM_RISCV, 1, 0) > 0) {
> > +        return kernel_entry;
> > +    }
> > +
> > +    if (load_uimage_as(kernel_filename, &kernel_entry, NULL, NULL,
> > +                       kernel_translate, machine, NULL) > 0) {
>
> We should not set the 'kernel_translate' here for uImage.
>
> In fact, the whole kernel_translate() is not necessary.

I have removed the kernel_translate() function. I tested loading
uImage files though and they don't seem to work as the image is loaded
at the wrong address.

I have removed uImage loading support from this series. We can look at
it in the future if we decide we want it.

Alistair

>
> > +        return kernel_entry;
> > +    }
> > +
>
> Regards,
> Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [RFC v1 3/5] hw/riscv: Extend the kernel loading support
  2019-06-19 21:01     ` Alistair Francis
@ 2019-06-19 22:06       ` Alistair Francis
  0 siblings, 0 replies; 30+ messages in thread
From: Alistair Francis @ 2019-06-19 22:06 UTC (permalink / raw)
  To: Bin Meng
  Cc: open list:RISC-V, Palmer Dabbelt, Alistair Francis,
	qemu-devel@nongnu.org Developers

On Wed, Jun 19, 2019 at 2:01 PM Alistair Francis <alistair23@gmail.com> wrote:
>
> On Wed, Jun 19, 2019 at 8:16 AM Bin Meng <bmeng.cn@gmail.com> wrote:
> >
> > On Wed, Jun 19, 2019 at 8:56 AM Alistair Francis
> > <alistair.francis@wdc.com> wrote:
> > >
> > > Extend the RISC-V kernel loader to support uImage and Image files.
> > > A Linux kernel can now be booted with:
> > >
> > >     qemu-system-riscv64 -machine virt -bios fw_jump.elf -kernel Image
> > >
> > > Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> > > ---
> > >  hw/riscv/boot.c | 19 ++++++++++++++-----
> > >  1 file changed, 14 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
> > > index 392ca0cb2e..7f68035a3f 100644
> > > --- a/hw/riscv/boot.c
> > > +++ b/hw/riscv/boot.c
> > > @@ -67,13 +67,22 @@ target_ulong riscv_load_kernel(MachineState *machine,
> > >      uint64_t kernel_entry, kernel_high;
> > >
> > >      if (load_elf(kernel_filename, NULL, kernel_translate, machine,
> > > -                 &kernel_entry, NULL, &kernel_high,
> > > -                 0, EM_RISCV, 1, 0) < 0) {
> > > -        error_report("could not load kernel '%s'", kernel_filename);
> > > -        exit(1);
> > > +                 &kernel_entry, NULL, &kernel_high, 0, EM_RISCV, 1, 0) > 0) {
> > > +        return kernel_entry;
> > > +    }
> > > +
> > > +    if (load_uimage_as(kernel_filename, &kernel_entry, NULL, NULL,
> > > +                       kernel_translate, machine, NULL) > 0) {
> >
> > We should not set the 'kernel_translate' here for uImage.
> >
> > In fact, the whole kernel_translate() is not necessary.
>
> I have removed the kernel_translate() function. I tested loading
> uImage files though and they don't seem to work as the image is loaded
> at the wrong address.
>
> I have removed uImage loading support from this series. We can look at
> it in the future if we decide we want it.

Ah, my mistake, it looks like my uImage wasn't built correctly. I'll
keep this in.

Alistair

>
> Alistair
>
> >
> > > +        return kernel_entry;
> > > +    }
> > > +
> >
> > Regards,
> > Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 0/5] RISC-V: Add firmware loading support and default
  2019-06-19 18:23       ` Alistair Francis
@ 2019-06-20  8:16         ` Andrea Bolognani
  2019-06-20 17:59           ` Alistair Francis
  0 siblings, 1 reply; 30+ messages in thread
From: Andrea Bolognani @ 2019-06-20  8:16 UTC (permalink / raw)
  To: Alistair Francis, Bin Meng
  Cc: Alistair Francis, Palmer Dabbelt, open list:RISC-V,
	qemu-devel@nongnu.org Developers

On Wed, 2019-06-19 at 11:23 -0700, Alistair Francis wrote:
> On Wed, Jun 19, 2019 at 7:42 AM Bin Meng <bmeng.cn@gmail.com> wrote:
> > On Wed, Jun 19, 2019 at 10:30 PM Alistair Francis <alistair23@gmail.com> wrote:
> > > On Wed, Jun 19, 2019 at 7:26 AM Bin Meng <bmeng.cn@gmail.com> wrote:
> > > > >  pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
> > > > >  pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes
> > > > 
> > > > Since we are considering adding "bios" images, I prefer to add the
> > > > pure binary images instead of ELF images here.
> > > 
> > > I didn't think about that. Can we just boot them in QEMU like we do
> > > with the ELFs?
> > 
> > Yes, use load_image_targphys() instead of load_elf().
> 
> Ah, that is obvious. I'll update it to use the bin files then.

I'm unclear on the advantages of using one format over the other,
but one question comes to mind: once this is in, we will probably
want to have OpenSBI packaged separately in distributions, the same
way it already happens for SeaBIOS, SLOF and edk2-based firmwares.

Will using either of the formats prevent that from happening?

-- 
Andrea Bolognani / Red Hat / Virtualization



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 0/5] RISC-V: Add firmware loading support and default
  2019-06-20  8:16         ` [Qemu-devel] [Qemu-riscv] " Andrea Bolognani
@ 2019-06-20 17:59           ` Alistair Francis
  2019-06-20 18:43             ` David Abdurachmanov
  0 siblings, 1 reply; 30+ messages in thread
From: Alistair Francis @ 2019-06-20 17:59 UTC (permalink / raw)
  To: Andrea Bolognani
  Cc: Alistair Francis, Bin Meng, open list:RISC-V,
	qemu-devel@nongnu.org Developers, Palmer Dabbelt

On Thu, Jun 20, 2019 at 1:16 AM Andrea Bolognani <abologna@redhat.com> wrote:
>
> On Wed, 2019-06-19 at 11:23 -0700, Alistair Francis wrote:
> > On Wed, Jun 19, 2019 at 7:42 AM Bin Meng <bmeng.cn@gmail.com> wrote:
> > > On Wed, Jun 19, 2019 at 10:30 PM Alistair Francis <alistair23@gmail.com> wrote:
> > > > On Wed, Jun 19, 2019 at 7:26 AM Bin Meng <bmeng.cn@gmail.com> wrote:
> > > > > >  pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
> > > > > >  pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes
> > > > >
> > > > > Since we are considering adding "bios" images, I prefer to add the
> > > > > pure binary images instead of ELF images here.
> > > >
> > > > I didn't think about that. Can we just boot them in QEMU like we do
> > > > with the ELFs?
> > >
> > > Yes, use load_image_targphys() instead of load_elf().
> >
> > Ah, that is obvious. I'll update it to use the bin files then.
>
> I'm unclear on the advantages of using one format over the other,

The main one that I see is that everyone else is already using .bin
and no one else is using .elf.

> but one question comes to mind: once this is in, we will probably
> want to have OpenSBI packaged separately in distributions, the same
> way it already happens for SeaBIOS, SLOF and edk2-based firmwares.
>
> Will using either of the formats prevent that from happening?

Both options allow this.

OE-Core already packages OpenSBI by default, Fedora and Debian are
moving to OpenSBI for RISC-V targets as well.

Any distro that supports the RISC-V toolchain (which is all
upstreamed) can build OpenSBI.

Alistair

>
> --
> Andrea Bolognani / Red Hat / Virtualization
>


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 0/5] RISC-V: Add firmware loading support and default
  2019-06-20 17:59           ` Alistair Francis
@ 2019-06-20 18:43             ` David Abdurachmanov
  2019-06-21 12:35               ` Andrea Bolognani
  0 siblings, 1 reply; 30+ messages in thread
From: David Abdurachmanov @ 2019-06-20 18:43 UTC (permalink / raw)
  To: Alistair Francis
  Cc: open list:RISC-V, Palmer Dabbelt, Andrea Bolognani,
	qemu-devel@nongnu.org Developers, Alistair Francis, Bin Meng

On Thu, Jun 20, 2019 at 9:18 PM Alistair Francis <alistair23@gmail.com> wrote:
>
> On Thu, Jun 20, 2019 at 1:16 AM Andrea Bolognani <abologna@redhat.com> wrote:
> >
> > On Wed, 2019-06-19 at 11:23 -0700, Alistair Francis wrote:
> > > On Wed, Jun 19, 2019 at 7:42 AM Bin Meng <bmeng.cn@gmail.com> wrote:
> > > > On Wed, Jun 19, 2019 at 10:30 PM Alistair Francis <alistair23@gmail.com> wrote:
> > > > > On Wed, Jun 19, 2019 at 7:26 AM Bin Meng <bmeng.cn@gmail.com> wrote:
> > > > > > >  pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
> > > > > > >  pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes
> > > > > >
> > > > > > Since we are considering adding "bios" images, I prefer to add the
> > > > > > pure binary images instead of ELF images here.
> > > > >
> > > > > I didn't think about that. Can we just boot them in QEMU like we do
> > > > > with the ELFs?
> > > >
> > > > Yes, use load_image_targphys() instead of load_elf().
> > >
> > > Ah, that is obvious. I'll update it to use the bin files then.
> >
> > I'm unclear on the advantages of using one format over the other,
>
> The main one that I see is that everyone else is already using .bin
> and no one else is using .elf.
>
> > but one question comes to mind: once this is in, we will probably
> > want to have OpenSBI packaged separately in distributions, the same
> > way it already happens for SeaBIOS, SLOF and edk2-based firmwares.
> >
> > Will using either of the formats prevent that from happening?
>
> Both options allow this.
>
> OE-Core already packages OpenSBI by default, Fedora and Debian are
> moving to OpenSBI for RISC-V targets as well.

Fedora uses OpenSBI for the last 2 or 3 months now. I don't plan to update
BBL builds. OpenSBI packages in Fedora/RISCV isn't finalized, but it does
ship *.elf and *.bin files.
>
> Any distro that supports the RISC-V toolchain (which is all
> upstreamed) can build OpenSBI.
>
> Alistair
>
> >
> > --
> > Andrea Bolognani / Red Hat / Virtualization
> >
>


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 4/5] roms: Add OpenSBI version 0.3
  2019-06-19 18:27       ` Alistair Francis
@ 2019-06-21  5:41         ` Bin Meng
  2019-06-21 22:41           ` Alistair Francis
  0 siblings, 1 reply; 30+ messages in thread
From: Bin Meng @ 2019-06-21  5:41 UTC (permalink / raw)
  To: Alistair Francis
  Cc: Anup Patel, Palmer Dabbelt, Alistair Francis, open list:RISC-V,
	QEMU Developers

On Thu, Jun 20, 2019 at 2:30 AM Alistair Francis <alistair23@gmail.com> wrote:
>
> On Wed, Jun 19, 2019 at 8:18 AM Bin Meng <bmeng.cn@gmail.com> wrote:
> >
> > On Wed, Jun 19, 2019 at 1:14 PM Anup Patel <anup@brainfault.org> wrote:
> > >
> > > On Wed, Jun 19, 2019 at 6:24 AM Alistair Francis
> > > <alistair.francis@wdc.com> wrote:
> > > >
> > > > Add OpenSBI version 0.3 as a git submodule and as a prebult binary.
> > > >
> > > > Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> > > > ---
> > > >  .gitmodules                         |   3 +++
> > > >  Makefile                            |   3 ++-
> > > >  configure                           |   1 +
> > > >  pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
> > > >  pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes
> > > >  roms/Makefile                       |  17 +++++++++++++++++
> > > >  roms/opensbi                        |   1 +
> > > >  7 files changed, 24 insertions(+), 1 deletion(-)
> > > >  create mode 100644 pc-bios/opensbi-riscv32-fw_jump.elf
> > > >  create mode 100644 pc-bios/opensbi-riscv64-fw_jump.elf
> > > >  create mode 160000 roms/opensbi
> > > >
> > >
> > > The OpenSBI firmwares are platform specific so we should have
> > > machine directory under pc-bios/ directory
> > >
> > > So for virt machine we will have:
> > > pc-bios/riscv32/virt/fw_jump.elf
> > > pc-bios/riscv64/virt/fw_jump.elf
>
> I have updated the names to indicate the machine. The pc-bios directly
> appears to be flat (at least for binaries) so I don't want to add
> subdirectories.
>

Should we include pre-built OpenSBI "bios" for "sifive_u" machine too?

> >
> > And we should only integrate plain binary image for "bios" images here.
> >
> > pc-bios/riscv32/virt/fw_jump.bin
> > pc-bios/riscv64/virt/fw_jump.bin
>
> Yep, fixed.
>

Regards,
Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 0/5] RISC-V: Add firmware loading support and default
  2019-06-20 18:43             ` David Abdurachmanov
@ 2019-06-21 12:35               ` Andrea Bolognani
  2019-06-27 13:49                 ` Andrea Bolognani
  0 siblings, 1 reply; 30+ messages in thread
From: Andrea Bolognani @ 2019-06-21 12:35 UTC (permalink / raw)
  To: David Abdurachmanov, Alistair Francis
  Cc: open list:RISC-V, Bin Meng, Alistair Francis,
	qemu-devel@nongnu.org Developers, Palmer Dabbelt

On Thu, 2019-06-20 at 21:43 +0300, David Abdurachmanov wrote:
> On Thu, Jun 20, 2019 at 9:18 PM Alistair Francis <alistair23@gmail.com> wrote:
> > On Thu, Jun 20, 2019 at 1:16 AM Andrea Bolognani <abologna@redhat.com> wrote:
> > > but one question comes to mind: once this is in, we will probably
> > > want to have OpenSBI packaged separately in distributions, the same
> > > way it already happens for SeaBIOS, SLOF and edk2-based firmwares.
> > > 
> > > Will using either of the formats prevent that from happening?
> > 
> > Both options allow this.
> > 
> > OE-Core already packages OpenSBI by default, Fedora and Debian are
> > moving to OpenSBI for RISC-V targets as well.
> >
> > Any distro that supports the RISC-V toolchain (which is all
> > upstreamed) can build OpenSBI.
> 
> Fedora uses OpenSBI for the last 2 or 3 months now. I don't plan to update
> BBL builds. OpenSBI packages in Fedora/RISCV isn't finalized, but it does
> ship *.elf and *.bin files.

Sounds good to me, thanks for confirming!

-- 
Andrea Bolognani / Red Hat / Virtualization



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 4/5] roms: Add OpenSBI version 0.3
  2019-06-21  5:41         ` Bin Meng
@ 2019-06-21 22:41           ` Alistair Francis
  0 siblings, 0 replies; 30+ messages in thread
From: Alistair Francis @ 2019-06-21 22:41 UTC (permalink / raw)
  To: Bin Meng
  Cc: Anup Patel, Palmer Dabbelt, Alistair Francis, open list:RISC-V,
	QEMU Developers

On Thu, Jun 20, 2019 at 10:42 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> On Thu, Jun 20, 2019 at 2:30 AM Alistair Francis <alistair23@gmail.com> wrote:
> >
> > On Wed, Jun 19, 2019 at 8:18 AM Bin Meng <bmeng.cn@gmail.com> wrote:
> > >
> > > On Wed, Jun 19, 2019 at 1:14 PM Anup Patel <anup@brainfault.org> wrote:
> > > >
> > > > On Wed, Jun 19, 2019 at 6:24 AM Alistair Francis
> > > > <alistair.francis@wdc.com> wrote:
> > > > >
> > > > > Add OpenSBI version 0.3 as a git submodule and as a prebult binary.
> > > > >
> > > > > Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> > > > > ---
> > > > >  .gitmodules                         |   3 +++
> > > > >  Makefile                            |   3 ++-
> > > > >  configure                           |   1 +
> > > > >  pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes
> > > > >  pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes
> > > > >  roms/Makefile                       |  17 +++++++++++++++++
> > > > >  roms/opensbi                        |   1 +
> > > > >  7 files changed, 24 insertions(+), 1 deletion(-)
> > > > >  create mode 100644 pc-bios/opensbi-riscv32-fw_jump.elf
> > > > >  create mode 100644 pc-bios/opensbi-riscv64-fw_jump.elf
> > > > >  create mode 160000 roms/opensbi
> > > > >
> > > >
> > > > The OpenSBI firmwares are platform specific so we should have
> > > > machine directory under pc-bios/ directory
> > > >
> > > > So for virt machine we will have:
> > > > pc-bios/riscv32/virt/fw_jump.elf
> > > > pc-bios/riscv64/virt/fw_jump.elf
> >
> > I have updated the names to indicate the machine. The pc-bios directly
> > appears to be flat (at least for binaries) so I don't want to add
> > subdirectories.
> >
>
> Should we include pre-built OpenSBI "bios" for "sifive_u" machine too?

Yep, I am doing that now.

Alistair

>
> > >
> > > And we should only integrate plain binary image for "bios" images here.
> > >
> > > pc-bios/riscv32/virt/fw_jump.bin
> > > pc-bios/riscv64/virt/fw_jump.bin
> >
> > Yep, fixed.
> >
>
> Regards,
> Bin


^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [Qemu-devel] [Qemu-riscv] [RFC v1 0/5] RISC-V: Add firmware loading support and default
  2019-06-21 12:35               ` Andrea Bolognani
@ 2019-06-27 13:49                 ` Andrea Bolognani
  0 siblings, 0 replies; 30+ messages in thread
From: Andrea Bolognani @ 2019-06-27 13:49 UTC (permalink / raw)
  To: David Abdurachmanov, Alistair Francis
  Cc: Alistair Francis, Bin Meng, open list:RISC-V,
	qemu-devel@nongnu.org Developers, Palmer Dabbelt

On Fri, 2019-06-21 at 14:35 +0200, Andrea Bolognani wrote:
> On Thu, 2019-06-20 at 21:43 +0300, David Abdurachmanov wrote:
> > On Thu, Jun 20, 2019 at 9:18 PM Alistair Francis <alistair23@gmail.com> wrote:
> > > OE-Core already packages OpenSBI by default, Fedora and Debian are
> > > moving to OpenSBI for RISC-V targets as well.
> > > 
> > > Any distro that supports the RISC-V toolchain (which is all
> > > upstreamed) can build OpenSBI.
> > 
> > Fedora uses OpenSBI for the last 2 or 3 months now. I don't plan to update
> > BBL builds. OpenSBI packages in Fedora/RISCV isn't finalized, but it does
> > ship *.elf and *.bin files.
> 
> Sounds good to me, thanks for confirming!

From further off-list discussion with David, I have learned that
recent Fedora images include an OpenSBI build with embedded U-Boot
payload, such that you only need to have that single file on the host
and pass it to QEMU via -kernel[1] for RISC-V guest boot to work. I
played with it over the past few days, and it works very nicely.

I think this is the result that we want to ultimately reach: a single
RISC-V "firmware" binary installed on the host through an appropriate
distro package, shared among guests, with everything else that is
guest-specific being contained in the corresponding disk image.

This is what other architectures are already doing, with SeaBIOS and
OVMF on x86_64, AAVMF on aarch64 and SLOF on ppc64 all being handled
this way: RISC-V should, where it makes sense, follow suit.

QEMU also recently introduced a JSON-based specification that can be
used to advertise guest firmwares and libvirt already supports it,
which makes firmware configuration either extremely convenient or
entirely automatic for the user: the OpenSBI support should also be
advertised this way.


[1] I guess that'd be -bios after these patches?
-- 
Andrea Bolognani / Red Hat / Virtualization



^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2019-06-27 13:50 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-19  0:38 [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default Alistair Francis
2019-06-19  0:38 ` [Qemu-devel] [RFC v1 1/5] hw/riscv: Split out the boot functions Alistair Francis
2019-06-19 15:16   ` Bin Meng
2019-06-19 18:24     ` Alistair Francis
2019-06-19  0:38 ` [Qemu-devel] [RFC v1 2/5] hw/riscv: Add support for loading a firmware Alistair Francis
2019-06-19 15:16   ` Bin Meng
2019-06-19 15:25     ` [Qemu-devel] [Qemu-riscv] " Jonathan Behrens
2019-06-19 15:30       ` Bin Meng
2019-06-19 21:00         ` Alistair Francis
2019-06-19  0:38 ` [Qemu-devel] [RFC v1 3/5] hw/riscv: Extend the kernel loading support Alistair Francis
2019-06-19 15:16   ` Bin Meng
2019-06-19 21:01     ` Alistair Francis
2019-06-19 22:06       ` Alistair Francis
2019-06-19  0:38 ` [Qemu-devel] [RFC v1 4/5] roms: Add OpenSBI version 0.3 Alistair Francis
2019-06-19  5:14   ` [Qemu-devel] [Qemu-riscv] " Anup Patel
2019-06-19 15:18     ` Bin Meng
2019-06-19 18:27       ` Alistair Francis
2019-06-21  5:41         ` Bin Meng
2019-06-21 22:41           ` Alistair Francis
2019-06-19  0:38 ` [Qemu-devel] [RFC v1 5/5] hw/riscv: Load OpenSBI as the default firmware Alistair Francis
2019-06-19  5:16   ` [Qemu-devel] [Qemu-riscv] " Anup Patel
2019-06-19 14:26 ` [Qemu-devel] [RFC v1 0/5] RISC-V: Add firmware loading support and default Bin Meng
2019-06-19 14:29   ` Alistair Francis
2019-06-19 14:42     ` Bin Meng
2019-06-19 18:23       ` Alistair Francis
2019-06-20  8:16         ` [Qemu-devel] [Qemu-riscv] " Andrea Bolognani
2019-06-20 17:59           ` Alistair Francis
2019-06-20 18:43             ` David Abdurachmanov
2019-06-21 12:35               ` Andrea Bolognani
2019-06-27 13:49                 ` Andrea Bolognani

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).