qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL] RISC-V Patches for 4.2-rc2
@ 2019-07-19  1:58 Palmer Dabbelt
  2019-07-19  1:58 ` [Qemu-devel] [PULL 1/2] roms: Add OpenSBI version 0.4 Palmer Dabbelt
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Palmer Dabbelt @ 2019-07-19  1:58 UTC (permalink / raw)
  To: Peter Maydell; +Cc: qemu-riscv, qemu-devel

The following changes since commit 0b18cfb8f1828c905139b54c8644b0d8f4aad879:

  Update version for v4.1.0-rc1 release (2019-07-16 18:01:28 +0100)

are available in the Git repository at:

  git://github.com/palmer-dabbelt/qemu.git tags/riscv-for-master-4.1-rc2

for you to fetch changes up to fdd1bda4b47cfbec61d0e63a516c614feea0b00b:

  hw/riscv: Load OpenSBI as the default firmware (2019-07-18 14:18:45 -0700)

----------------------------------------------------------------
RISC-V Patches for 4.2-rc2

This contains a pair of patches that add OpenSBI support to QEMU on
RISC-V targets.  The patches have been floating around for a bit, but
everything seems solid now.  These pass my standard test of booting
OpenEmbedded, and also works when I swap around the various command-line
arguments to use the new boot method.

----------------------------------------------------------------
Alistair Francis (2):
      roms: Add OpenSBI version 0.4
      hw/riscv: Load OpenSBI as the default firmware

 .gitmodules                                  |   3 ++
 LICENSE                                      |  21 +++++++----
 Makefile                                     |   5 ++-
 hw/riscv/boot.c                              |  54 +++++++++++++++++++++++++++
 hw/riscv/sifive_u.c                          |   7 ++--
 hw/riscv/virt.c                              |  11 ++++--
 include/hw/riscv/boot.h                      |   3 ++
 pc-bios/README                               |  11 ++++++
 pc-bios/opensbi-riscv32-virt-fw_jump.bin     | Bin 0 -> 36888 bytes
 pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin | Bin 0 -> 40968 bytes
 pc-bios/opensbi-riscv64-virt-fw_jump.bin     | Bin 0 -> 40968 bytes
 qemu-deprecated.texi                         |  20 ++++++++++
 roms/Makefile                                |  48 ++++++++++++++++++------
 roms/opensbi                                 |   1 +
 14 files changed, 157 insertions(+), 27 deletions(-)
 create mode 100755 pc-bios/opensbi-riscv32-virt-fw_jump.bin
 create mode 100755 pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin
 create mode 100755 pc-bios/opensbi-riscv64-virt-fw_jump.bin
 create mode 160000 roms/opensbi
From Palmer Dabbelt <palmer@sifive.com> # This line is ignored.
From: Palmer Dabbelt <palmer@sifive.com>
Reply-To: 
Subject: 
In-Reply-To: 




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

* [Qemu-devel] [PULL 1/2] roms: Add OpenSBI version 0.4
  2019-07-19  1:58 [Qemu-devel] [PULL] RISC-V Patches for 4.2-rc2 Palmer Dabbelt
@ 2019-07-19  1:58 ` Palmer Dabbelt
  2019-07-19  1:58 ` [Qemu-devel] [PULL 2/2] hw/riscv: Load OpenSBI as the default firmware Palmer Dabbelt
  2019-07-19 11:03 ` [Qemu-devel] [PULL] RISC-V Patches for 4.2-rc2 Peter Maydell
  2 siblings, 0 replies; 7+ messages in thread
From: Palmer Dabbelt @ 2019-07-19  1:58 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-riscv, Palmer Dabbelt, qemu-devel, Alistair Francis,
	Bin Meng, Guenter Roeck

From: Alistair Francis <alistair.francis@wdc.com>

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

OpenSBI (https://github.com/riscv/opensbi) aims to provide an open-source
reference implementation of the RISC-V Supervisor Binary Interface (SBI)
specifications for platform-specific firmwares executing in M-mode. For all
supported platforms, OpenSBI provides several runtime firmware examples.
These example firmwares can be used to replace the legacy riscv-pk bootloader
and enable the use of well-known bootloaders such as U-Boot.

OpenSBI is distributed under the terms of the BSD 2-clause license
("Simplified BSD License" or "FreeBSD License", SPDX: BSD-2-Clause). OpenSBI
source code also contains code reused from other projects desribed here:
https://github.com/riscv/opensbi/blob/master/ThirdPartyNotices.md.

In this case all of the code we are using from OpenSBI is BSD 2-clause
as we aren't using the Kendryte code (Apache-2.0) with QEMU and libfdt
is dual licensed as BSD 2-clause (and GPL-2.0+). OpenSBI isn't being
linked with QEMU either it is just being included with QEMU.

Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
---
 .gitmodules                                  |   3 ++
 LICENSE                                      |  21 ++++----
 Makefile                                     |   5 +-
 pc-bios/README                               |  11 +++++
 pc-bios/opensbi-riscv32-virt-fw_jump.bin     | Bin 0 -> 36888 bytes
 pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin | Bin 0 -> 40968 bytes
 pc-bios/opensbi-riscv64-virt-fw_jump.bin     | Bin 0 -> 40968 bytes
 roms/Makefile                                |  48 ++++++++++++++-----
 roms/opensbi                                 |   1 +
 9 files changed, 68 insertions(+), 21 deletions(-)
 create mode 100755 pc-bios/opensbi-riscv32-virt-fw_jump.bin
 create mode 100755 pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin
 create mode 100755 pc-bios/opensbi-riscv64-virt-fw_jump.bin
 create mode 160000 roms/opensbi

diff --git a/.gitmodules b/.gitmodules
index 2857eec76377..c5c474169dc7 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://git.qemu.org/git/opensbi.git
diff --git a/LICENSE b/LICENSE
index 0e0b4b9553a5..9389ba614f80 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,13 +1,18 @@
-The following points clarify the QEMU license:
+The QEMU distribution includes both the QEMU emulator and
+various firmware files.  These are separate programs that are
+distributed together for our users' convenience, and they have
+separate licenses.
 
-1) QEMU as a whole is released under the GNU General Public License,
-version 2.
+The following points clarify the license of the QEMU emulator:
 
-2) Parts of QEMU have specific licenses which are compatible with the
-GNU General Public License, version 2. Hence each source file contains
-its own licensing information.  Source files with no licensing information
-are released under the GNU General Public License, version 2 or (at your
-option) any later version.
+1) The QEMU emulator as a whole is released under the GNU General
+Public License, version 2.
+
+2) Parts of the QEMU emulator have specific licenses which are compatible
+with the GNU General Public License, version 2. Hence each source file
+contains its own licensing information.  Source files with no licensing
+information are released under the GNU General Public License, version
+2 or (at your option) any later version.
 
 As of July 2013, contributions under version 2 of the GNU General Public
 License (and no later version) are only accepted for the following files
diff --git a/Makefile b/Makefile
index f9791dcb8278..386e13a6ea01 100644
--- a/Makefile
+++ b/Makefile
@@ -770,7 +770,10 @@ palcode-clipper \
 u-boot.e500 u-boot-sam460-20100605.bin \
 qemu_vga.ndrv \
 edk2-licenses.txt \
-hppa-firmware.img
+hppa-firmware.img \
+opensbi-riscv32-virt-fw_jump.bin \
+opensbi-riscv64-sifive_u-fw_jump.bin opensbi-riscv64-virt-fw_jump.bin
+
 
 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/pc-bios/README b/pc-bios/README
index 0a17f3ec6df1..68b4a81103cb 100644
--- a/pc-bios/README
+++ b/pc-bios/README
@@ -63,3 +63,14 @@
   ARM. Licensing information is given in "edk2-licenses.txt". The image files
   are described by the JSON documents in the "pc-bios/descriptors" directory,
   which conform to the "docs/interop/firmware.json" schema.
+
+- OpenSBI (https://github.com/riscv/opensbi) aims to provide an open-source
+  reference implementation of the RISC-V Supervisor Binary Interface (SBI)
+  specifications for platform-specific firmwares executing in M-mode. For all
+  supported platforms, OpenSBI provides several runtime firmware examples.
+  These example firmwares can be used to replace the legacy riscv-pk bootloader
+  and enable the use of well-known bootloaders such as U-Boot.
+  OpenSBI is distributed under the terms of the BSD 2-clause license
+  ("Simplified BSD License" or "FreeBSD License", SPDX: BSD-2-Clause). OpenSBI
+  source code also contains code reused from other projects desribed here:
+  https://github.com/riscv/opensbi/blob/master/ThirdPartyNotices.md.
diff --git a/pc-bios/opensbi-riscv32-virt-fw_jump.bin b/pc-bios/opensbi-riscv32-virt-fw_jump.bin
new file mode 100755
index 0000000000000000000000000000000000000000..f5bcaa56954c860d09acc0cb337c1666d88b6efb
GIT binary patch
literal 36888
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
aYBNxqf!YlGFEfy=y3vU{B4jIw_JW`98-y+Z

literal 0
HcmV?d00001

diff --git a/pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin b/pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin
new file mode 100755
index 0000000000000000000000000000000000000000..5d7a1ef6818994bac4a36818ad36043b592ce309
GIT binary patch
literal 40968
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
P4$ODpzp?{uKaqa`WWcWt

literal 0
HcmV?d00001

diff --git a/pc-bios/opensbi-riscv64-virt-fw_jump.bin b/pc-bios/opensbi-riscv64-virt-fw_jump.bin
new file mode 100755
index 0000000000000000000000000000000000000000..4cec6f0210f31969ac232123ce101ce71bbf9f2b
GIT binary patch
literal 40968
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
Z%^;huogUK&q!CCXkVfFY5`n7e$RB^+7N!6I

literal 0
HcmV?d00001

diff --git a/roms/Makefile b/roms/Makefile
index 078d3fb70563..dc70fb5aea3f 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"
@@ -52,18 +54,21 @@ EDK2_EFIROM = edk2/BaseTools/Source/C/bin/EfiRom
 default:
 	@echo "nothing is build by default"
 	@echo "available build targets:"
-	@echo "  bios           -- update bios.bin (seabios)"
-	@echo "  vgabios        -- update vgabios binaries (seabios)"
-	@echo "  sgabios        -- update sgabios binaries"
-	@echo "  pxerom         -- update nic roms (bios only)"
-	@echo "  efirom         -- update nic roms (bios+efi)"
-	@echo "  slof           -- update slof.bin"
-	@echo "  skiboot        -- update skiboot.lid"
-	@echo "  u-boot.e500    -- update u-boot.e500"
-	@echo "  u-boot.sam460  -- update u-boot.sam460"
-	@echo "  efi            -- update UEFI (edk2) platform firmware"
-	@echo "  clean          -- delete the files generated by the previous" \
-	                          "build targets"
+	@echo "  bios               -- update bios.bin (seabios)"
+	@echo "  vgabios            -- update vgabios binaries (seabios)"
+	@echo "  sgabios            -- update sgabios binaries"
+	@echo "  pxerom             -- update nic roms (bios only)"
+	@echo "  efirom             -- update nic roms (bios+efi)"
+	@echo "  slof               -- update slof.bin"
+	@echo "  skiboot            -- update skiboot.lid"
+	@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-virt     -- update OpenSBI for 32-bit virt machine"
+	@echo "  opensbi64-virt     -- update OpenSBI for 64-bit virt machine"
+	@echo "  opensbi64-sifive_u -- update OpenSBI for 64-bit sifive_u machine"
+	@echo "  clean              -- delete the files generated by the previous" \
+	                              "build targets"
 
 bios: build-seabios-config-seabios-128k build-seabios-config-seabios-256k
 	cp seabios/builds/seabios-128k/bios.bin ../pc-bios/bios.bin
@@ -162,6 +167,24 @@ skiboot:
 efi: edk2-basetools
 	$(MAKE) -f Makefile.edk2
 
+opensbi32-virt:
+	$(MAKE) -C opensbi \
+		CROSS_COMPILE=$(riscv32_cross_prefix) \
+		PLATFORM="qemu/virt"
+	cp opensbi/build/platform/qemu/virt/firmware/fw_jump.bin ../pc-bios/opensbi-riscv32-virt-fw_jump.bin
+
+opensbi64-virt:
+	$(MAKE) -C opensbi \
+		CROSS_COMPILE=$(riscv64_cross_prefix) \
+		PLATFORM="qemu/virt"
+	cp opensbi/build/platform/qemu/virt/firmware/fw_jump.bin ../pc-bios/opensbi-riscv64-virt-fw_jump.bin
+
+opensbi64-sifive_u:
+	$(MAKE) -C opensbi \
+		CROSS_COMPILE=$(riscv64_cross_prefix) \
+		PLATFORM="qemu/sifive_u"
+	cp opensbi/build/platform/qemu/virt/firmware/fw_jump.bin ../pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin
+
 clean:
 	rm -rf seabios/.config seabios/out seabios/builds
 	$(MAKE) -C sgabios clean
@@ -173,3 +196,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 000000000000..ce228ee0919d
--- /dev/null
+++ b/roms/opensbi
@@ -0,0 +1 @@
+Subproject commit ce228ee0919deb9957192d723eecc8aaae2697c6
-- 
2.21.0



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

* [Qemu-devel] [PULL 2/2] hw/riscv: Load OpenSBI as the default firmware
  2019-07-19  1:58 [Qemu-devel] [PULL] RISC-V Patches for 4.2-rc2 Palmer Dabbelt
  2019-07-19  1:58 ` [Qemu-devel] [PULL 1/2] roms: Add OpenSBI version 0.4 Palmer Dabbelt
@ 2019-07-19  1:58 ` Palmer Dabbelt
  2019-07-19 11:03 ` [Qemu-devel] [PULL] RISC-V Patches for 4.2-rc2 Peter Maydell
  2 siblings, 0 replies; 7+ messages in thread
From: Palmer Dabbelt @ 2019-07-19  1:58 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-riscv, Palmer Dabbelt, qemu-devel, Alistair Francis,
	Bin Meng, Guenter Roeck

From: Alistair Francis <alistair.francis@wdc.com>

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>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
---
 hw/riscv/boot.c         | 54 +++++++++++++++++++++++++++++++++++++++++
 hw/riscv/sifive_u.c     |  7 +++---
 hw/riscv/virt.c         | 11 ++++++---
 include/hw/riscv/boot.h |  3 +++
 qemu-deprecated.texi    | 20 +++++++++++++++
 5 files changed, 89 insertions(+), 6 deletions(-)

diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
index ff023f42d01d..5dee63011b43 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,59 @@
 # define KERNEL_BOOT_ADDRESS 0x80200000
 #endif
 
+void riscv_find_and_load_firmware(MachineState *machine,
+                                  const char *default_machine_firmware,
+                                  hwaddr firmware_load_addr)
+{
+    char *firmware_filename;
+
+    if (!machine->firmware) {
+        /*
+         * The user didn't specify -bios.
+         * At the moment we default to loading nothing when this hapens.
+         * In the future this defaul will change to loading the prebuilt
+         * OpenSBI firmware. Let's warn the user and then continue.
+        */
+        warn_report("No -bios option specified. Not loading a firmware.");
+        warn_report("This default will change in QEMU 4.3. Please use the " \
+                    "-bios option to aviod breakages when this happens.");
+        warn_report("See QEMU's deprecation documentation for details");
+        return;
+    }
+
+    if (!strcmp(machine->firmware, "default")) {
+        /*
+         * The user has specified "-bios default". That means we are going to
+         * load the OpenSBI binary included in the QEMU source.
+         *
+         * We can't load the binary by default as it will break existing users
+         * as users are already loading their own firmware.
+         *
+         * Let's try to get everyone to specify the -bios option at all times,
+         * so then in the future we can make "-bios default" the default option
+         * if no -bios option is set without breaking anything.
+         */
+        firmware_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS,
+                                           default_machine_firmware);
+        if (firmware_filename == NULL) {
+            error_report("Unable to load the default RISC-V firmware \"%s\"",
+                         default_machine_firmware);
+            exit(1);
+        }
+    } else {
+        firmware_filename = machine->firmware;
+    }
+
+    if (strcmp(firmware_filename, "none")) {
+        /* If not "none" load the firmware */
+        riscv_load_firmware(firmware_filename, firmware_load_addr);
+    }
+
+    if (!strcmp(machine->firmware, "default")) {
+        g_free(firmware_filename);
+    }
+}
+
 target_ulong riscv_load_firmware(const char *firmware_filename,
                                  hwaddr firmware_load_addr)
 {
diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c
index ca53a9290db9..71b8083c05ed 100644
--- a/hw/riscv/sifive_u.c
+++ b/hw/riscv/sifive_u.c
@@ -49,6 +49,8 @@
 
 #include <libfdt.h>
 
+#define BIOS_FILENAME "opensbi-riscv64-sifive_u-fw_jump.bin"
+
 static const struct MemmapEntry {
     hwaddr base;
     hwaddr size;
@@ -269,9 +271,8 @@ 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, memmap[SIFIVE_U_DRAM].base);
-    }
+    riscv_find_and_load_firmware(machine, BIOS_FILENAME,
+                                 memmap[SIFIVE_U_DRAM].base);
 
     if (machine->kernel_filename) {
         riscv_load_kernel(machine->kernel_filename);
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c
index ecdc77d7281f..25faf3b4178c 100644
--- a/hw/riscv/virt.c
+++ b/hw/riscv/virt.c
@@ -44,6 +44,12 @@
 
 #include <libfdt.h>
 
+#if defined(TARGET_RISCV32)
+# define BIOS_FILENAME "opensbi-riscv32-virt-fw_jump.bin"
+#else
+# define BIOS_FILENAME "opensbi-riscv64-virt-fw_jump.bin"
+#endif
+
 static const struct MemmapEntry {
     hwaddr base;
     hwaddr size;
@@ -399,9 +405,8 @@ 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, memmap[VIRT_DRAM].base);
-    }
+    riscv_find_and_load_firmware(machine, BIOS_FILENAME,
+                                 memmap[VIRT_DRAM].base);
 
     if (machine->kernel_filename) {
         uint64_t kernel_entry = riscv_load_kernel(machine->kernel_filename);
diff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h
index daa179b600f4..d56f2ae3eb5d 100644
--- a/include/hw/riscv/boot.h
+++ b/include/hw/riscv/boot.h
@@ -20,6 +20,9 @@
 #ifndef RISCV_BOOT_H
 #define RISCV_BOOT_H
 
+void riscv_find_and_load_firmware(MachineState *machine,
+                                  const char *default_machine_firmware,
+                                  hwaddr firmware_load_addr);
 target_ulong riscv_load_firmware(const char *firmware_filename,
                                  hwaddr firmware_load_addr);
 target_ulong riscv_load_kernel(const char *kernel_filename);
diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi
index c90b08d553a6..fff07bb2a319 100644
--- a/qemu-deprecated.texi
+++ b/qemu-deprecated.texi
@@ -121,6 +121,26 @@ the backing storage specified with @option{-mem-path} can actually provide
 the guest RAM configured with @option{-m} and QEMU will fail to start up if
 RAM allocation is unsuccessful.
 
+@subsection RISC-V -bios (since 4.1)
+
+QEMU 4.1 introduced support for the -bios option in QEMU for RISC-V for the
+RISC-V virt machine and sifive_u machine.
+
+QEMU 4.1 has no changes to the default behaviour to avoid breakages. This
+default will change in a future QEMU release, so please prepare now. All users
+of the virt or sifive_u machine must change their command line usage.
+
+QEMU 4.1 has three options, please migrate to one of these three:
+ 1. ``-bios none`` - This is the current default behavior if no -bios option
+      is included. QEMU will not automatically load any firmware. It is up
+      to the user to load all the images they need.
+ 2. ``-bios default`` - In a future QEMU release this will become the default
+      behaviour if no -bios option is specified. This option will load the
+      default OpenSBI firmware automatically. The firmware is included with
+      the QEMU release and no user interaction is required. All a user needs
+      to do is specify the kernel they want to boot with the -kernel option
+ 3. ``-bios <file>`` - Tells QEMU to load the specified file as the firmwrae.
+
 @section QEMU Machine Protocol (QMP) commands
 
 @subsection block-dirty-bitmap-add "autoload" parameter (since 2.12.0)
-- 
2.21.0



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

* Re: [Qemu-devel] [PULL] RISC-V Patches for 4.2-rc2
  2019-07-19  1:58 [Qemu-devel] [PULL] RISC-V Patches for 4.2-rc2 Palmer Dabbelt
  2019-07-19  1:58 ` [Qemu-devel] [PULL 1/2] roms: Add OpenSBI version 0.4 Palmer Dabbelt
  2019-07-19  1:58 ` [Qemu-devel] [PULL 2/2] hw/riscv: Load OpenSBI as the default firmware Palmer Dabbelt
@ 2019-07-19 11:03 ` Peter Maydell
  2019-07-19 11:11   ` Peter Maydell
  2 siblings, 1 reply; 7+ messages in thread
From: Peter Maydell @ 2019-07-19 11:03 UTC (permalink / raw)
  To: Palmer Dabbelt; +Cc: open list:RISC-V, QEMU Developers

On Fri, 19 Jul 2019 at 02:58, Palmer Dabbelt <palmer@sifive.com> wrote:
>
> The following changes since commit 0b18cfb8f1828c905139b54c8644b0d8f4aad879:
>
>   Update version for v4.1.0-rc1 release (2019-07-16 18:01:28 +0100)
>
> are available in the Git repository at:
>
>   git://github.com/palmer-dabbelt/qemu.git tags/riscv-for-master-4.1-rc2
>
> for you to fetch changes up to fdd1bda4b47cfbec61d0e63a516c614feea0b00b:
>
>   hw/riscv: Load OpenSBI as the default firmware (2019-07-18 14:18:45 -0700)
>
> ----------------------------------------------------------------
> RISC-V Patches for 4.2-rc2
>
> This contains a pair of patches that add OpenSBI support to QEMU on
> RISC-V targets.  The patches have been floating around for a bit, but
> everything seems solid now.  These pass my standard test of booting
> OpenEmbedded, and also works when I swap around the various command-line
> arguments to use the new boot method.
>
> ----------------------------------------------------------------
> Alistair Francis (2):
>       roms: Add OpenSBI version 0.4
>       hw/riscv: Load OpenSBI as the default firmware

This passes the 'make check' tests but it prints out a lot
of warnings as it does so:

qemu-system-riscv64: warning: No -bios option specified. Not loading a firmware.
qemu-system-riscv64: warning: This default will change in QEMU 4.3.
Please use the -bios option to aviod breakages when this happens.
qemu-system-riscv64: warning: See QEMU's deprecation documentation for details

(repeated 7 or 8 times during the course of a test run)

Can we make the tests not trigger warnings, please?
(I have a filter where I search through for strings like
"warning" because warnings that shouldn't happen often don't
actually cause the tests to fail.)

Also, I notice that you have a typo: "aviod" should be "avoid".

PS: something in your pull-request creation process seems to
add this junk at the bottom of the pullreq emails, though
since it doesn't appear in the merge commit it's harmless:

> From Palmer Dabbelt <palmer@sifive.com> # This line is ignored.
> From: Palmer Dabbelt <palmer@sifive.com>
> Reply-To:
> Subject:
> In-Reply-To:

thanks
-- PMM


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

* Re: [Qemu-devel] [PULL] RISC-V Patches for 4.2-rc2
  2019-07-19 11:03 ` [Qemu-devel] [PULL] RISC-V Patches for 4.2-rc2 Peter Maydell
@ 2019-07-19 11:11   ` Peter Maydell
  2019-07-19 11:52     ` Peter Maydell
  2019-07-19 16:16     ` Alistair Francis
  0 siblings, 2 replies; 7+ messages in thread
From: Peter Maydell @ 2019-07-19 11:11 UTC (permalink / raw)
  To: Palmer Dabbelt, Alistair Francis; +Cc: open list:RISC-V, QEMU Developers

On Fri, 19 Jul 2019 at 12:03, Peter Maydell <peter.maydell@linaro.org> wrote:
> This passes the 'make check' tests but it prints out a lot
> of warnings as it does so:
>
> qemu-system-riscv64: warning: No -bios option specified. Not loading a firmware.
> qemu-system-riscv64: warning: This default will change in QEMU 4.3.
> Please use the -bios option to aviod breakages when this happens.
> qemu-system-riscv64: warning: See QEMU's deprecation documentation for details
>
> (repeated 7 or 8 times during the course of a test run)
>
> Can we make the tests not trigger warnings, please?
> (I have a filter where I search through for strings like
> "warning" because warnings that shouldn't happen often don't
> actually cause the tests to fail.)

Forgot to mention, but a common way to do this is to say
"don't print the warnings about bios image loading if
qtest_enabled(), because with qtest we never execute any
guest code anyway". That will probably fix the warnings here.

> Also, I notice that you have a typo: "aviod" should be "avoid".

Also also, the warning message mentions "QEMU 4.3", but our
versioning system bumps the major version every year, so
the pending release is 4.1, the next one will be 4.2, and
then the release after that will be 5.0 because it will be the
first release in 2020.

(Plus, your merge commit message says this pullreq is
for 4.2-rc2, which is a typo for 4.1-rc2 I assume.)

Since this pullreq does pass the tests, and rc2 is not far off
now (Tuesday), I think my suggestion is that I'll apply this
as-is, and we should fix up the issues with the warning messages
as a followup patch. I think that's better than holding this
out of master and making it risk missing rc2.

thanks
-- PMM


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

* Re: [Qemu-devel] [PULL] RISC-V Patches for 4.2-rc2
  2019-07-19 11:11   ` Peter Maydell
@ 2019-07-19 11:52     ` Peter Maydell
  2019-07-19 16:16     ` Alistair Francis
  1 sibling, 0 replies; 7+ messages in thread
From: Peter Maydell @ 2019-07-19 11:52 UTC (permalink / raw)
  To: Palmer Dabbelt, Alistair Francis; +Cc: open list:RISC-V, QEMU Developers

On Fri, 19 Jul 2019 at 12:11, Peter Maydell <peter.maydell@linaro.org> wrote>
> Since this pullreq does pass the tests, and rc2 is not far off
> now (Tuesday), I think my suggestion is that I'll apply this
> as-is, and we should fix up the issues with the warning messages
> as a followup patch. I think that's better than holding this
> out of master and making it risk missing rc2.

...and so I have applied it to master.
Please update the changelog at https://wiki.qemu.org/ChangeLog/4.1
for any user-visible changes, and please also submit a patch to
fix up the warning issues.

thanks
-- PMM


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

* Re: [Qemu-devel] [PULL] RISC-V Patches for 4.2-rc2
  2019-07-19 11:11   ` Peter Maydell
  2019-07-19 11:52     ` Peter Maydell
@ 2019-07-19 16:16     ` Alistair Francis
  1 sibling, 0 replies; 7+ messages in thread
From: Alistair Francis @ 2019-07-19 16:16 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Palmer Dabbelt, open list:RISC-V, QEMU Developers

On Fri, Jul 19, 2019 at 4:11 AM Peter Maydell <peter.maydell@linaro.org> wrote:
>
> On Fri, 19 Jul 2019 at 12:03, Peter Maydell <peter.maydell@linaro.org> wrote:
> > This passes the 'make check' tests but it prints out a lot
> > of warnings as it does so:
> >
> > qemu-system-riscv64: warning: No -bios option specified. Not loading a firmware.
> > qemu-system-riscv64: warning: This default will change in QEMU 4.3.
> > Please use the -bios option to aviod breakages when this happens.
> > qemu-system-riscv64: warning: See QEMU's deprecation documentation for details
> >
> > (repeated 7 or 8 times during the course of a test run)
> >
> > Can we make the tests not trigger warnings, please?
> > (I have a filter where I search through for strings like
> > "warning" because warnings that shouldn't happen often don't
> > actually cause the tests to fail.)
>
> Forgot to mention, but a common way to do this is to say
> "don't print the warnings about bios image loading if
> qtest_enabled(), because with qtest we never execute any
> guest code anyway". That will probably fix the warnings here.

Testing my patch now, I'll send it out today.

>
> > Also, I notice that you have a typo: "aviod" should be "avoid".

Fixed.

>
> Also also, the warning message mentions "QEMU 4.3", but our
> versioning system bumps the major version every year, so
> the pending release is 4.1, the next one will be 4.2, and
> then the release after that will be 5.0 because it will be the
> first release in 2020.

I just dropped the version number in the warning message.

Alistair

>
> (Plus, your merge commit message says this pullreq is
> for 4.2-rc2, which is a typo for 4.1-rc2 I assume.)
>
> Since this pullreq does pass the tests, and rc2 is not far off
> now (Tuesday), I think my suggestion is that I'll apply this
> as-is, and we should fix up the issues with the warning messages
> as a followup patch. I think that's better than holding this
> out of master and making it risk missing rc2.
>
> thanks
> -- PMM


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

end of thread, other threads:[~2019-07-19 16:21 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-19  1:58 [Qemu-devel] [PULL] RISC-V Patches for 4.2-rc2 Palmer Dabbelt
2019-07-19  1:58 ` [Qemu-devel] [PULL 1/2] roms: Add OpenSBI version 0.4 Palmer Dabbelt
2019-07-19  1:58 ` [Qemu-devel] [PULL 2/2] hw/riscv: Load OpenSBI as the default firmware Palmer Dabbelt
2019-07-19 11:03 ` [Qemu-devel] [PULL] RISC-V Patches for 4.2-rc2 Peter Maydell
2019-07-19 11:11   ` Peter Maydell
2019-07-19 11:52     ` Peter Maydell
2019-07-19 16:16     ` Alistair Francis

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).