xemu/hw
Sunil V L 4263e270a2 hw/riscv: virt: Assume M-mode FW in pflash0 only when "-bios none"
Currently, virt machine supports two pflash instances each with
32MB size. However, the first pflash is always assumed to
contain M-mode firmware and reset vector is set to this if
enabled. Hence, for S-mode payloads like EDK2, only one pflash
instance is available for use. This means both code and NV variables
of EDK2 will need to use the same pflash.

The OS distros keep the EDK2 FW code as readonly. When non-volatile
variables also need to share the same pflash, it is not possible
to keep it as readonly since variables need write access.

To resolve this issue, the code and NV variables need to be separated.
But in that case we need an extra flash. Hence, modify the convention
for non-KVM guests such that, pflash0 will contain the M-mode FW
only when "-bios none" option is used. Otherwise, pflash0 will contain
the S-mode payload FW. This enables both pflash instances available
for EDK2 use.

When KVM is enabled, pflash0 is always assumed to contain the
S-mode payload firmware only.

Example usage:
1) pflash0 containing M-mode FW
qemu-system-riscv64 -bios none -pflash <mmode_fw> -machine virt
or
qemu-system-riscv64 -bios none \
-drive file=<mmode_fw>,if=pflash,format=raw,unit=0 -machine virt

2) pflash0 containing S-mode payload like EDK2
qemu-system-riscv64 -pflash <smode_fw_code> -pflash <smode_vars> -machine  virt
or
qemu-system-riscv64 -bios <opensbi_fw> \
-pflash <smode_fw_code> \
-pflash <smode_vars> \
-machine  virt
or
qemu-system-riscv64 -bios <opensbi_fw> \
-drive file=<smode_fw_code>,if=pflash,format=raw,unit=0,readonly=on \
-drive file=<smode_fw_vars>,if=pflash,format=raw,unit=1 \
-machine virt

Signed-off-by: Sunil V L <sunilvl@ventanamicro.com>
Reported-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Tested-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-Id: <20230601045910.18646-2-sunilvl@ventanamicro.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
2023-06-13 17:38:56 +10:00
..
9pfs 9pfs: prevent opening special files (CVE-2023-2861) 2023-06-08 17:04:58 +02:00
acpi hw/pci-bridge: Make PCIe and CXL PXB Devices inherit from TYPE_PXB_DEV 2023-04-24 22:56:55 -04:00
adc hw/adc: Make adci[*] R/W in NPCM7XX ADC 2022-07-18 13:20:14 +01:00
alpha hw/alpha: Use MachineClass->default_nic in the alpha machine 2023-05-26 09:10:49 +02:00
arm target-arm queue: 2023-06-06 12:11:34 -07:00
audio hw/audio/via-ac97: Basic implementation of audio playback 2023-03-08 00:37:48 +01:00
avr Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
block block: add blk_io_plug_call() API 2023-06-01 07:34:03 -04:00
char hw/arm/omap: Remove unused omap_uart_attach() 2023-06-05 07:43:23 +01:00
core hw/core/cpu: Simplify realize() using MACHINE_GET_CLASS() macro 2023-06-09 23:38:16 +03:00
cpu hw/cpu: Mark arm11 and realview mpcore as target-independent code 2023-01-16 17:51:20 +01:00
cris Do not include exec/address-spaces.h if it's not really necessary 2021-05-02 17:24:51 +02:00
cxl hw/cxl: Introduce cxl_device_get_timestamp() utility function 2023-05-19 10:30:46 -04:00
display bulk: Remove pointless QOM casts 2023-06-05 20:48:34 +02:00
dma hw/dma/xilinx_axidma: Check DMASR.HALTED to prevent infinite loop. 2023-05-30 15:50:16 +01:00
gpio replace TABs with spaces 2023-03-20 12:43:50 +01:00
hppa hw/hppa: Use MachineClass->default_nic in the hppa machine 2023-05-26 09:10:49 +02:00
hyperv win32: replace closesocket() with close() wrapper 2023-03-13 15:39:31 +04:00
i2c hw/i2c/allwinner-i2c: Fix subclassing of TYPE_AW_I2C_SUN6I 2023-04-11 14:13:29 +01:00
i386 hw/i386/microvm: Simplify using object_dynamic_cast() 2023-06-09 23:38:16 +03:00
ide hw: replace most qemu_bh_new calls with qemu_bh_new_guarded 2023-04-28 11:31:54 +02:00
input virtio-input: add a virtio-mulitouch device 2023-05-28 13:08:25 +04:00
intc pnv/xive2: Quiet down some error messages 2023-06-10 10:19:24 -03:00
ipack include/hw/pci: Split pci_device.h off pci.h 2023-01-08 01:54:22 -05:00
ipmi include/hw/pci: Split pci_device.h off pci.h 2023-01-08 01:54:22 -05:00
isa hw/isa/piix3: Resolve redundant TYPE_PIIX3_XEN_DEVICE 2023-06-07 15:07:10 +01:00
loongarch hw/loongarch64: Use MachineClass->default_nic in the virt machine 2023-05-26 09:10:49 +02:00
m68k bulk: Remove pointless QOM casts 2023-06-05 20:48:34 +02:00
mem hw/cxl: Multi-Region CXL Type-3 Devices (Volatile and Persistent) 2023-05-19 01:36:09 -04:00
microblaze hw/char/xilinx_uartlite: Open-code xilinx_uartlite_create() 2023-02-27 13:27:05 +00:00
mips hw/mips/malta: Fix the malta machine on big endian hosts 2023-06-05 20:48:34 +02:00
misc hw: arm: allwinner-sramc: Add SRAM Controller support for R40 2023-06-06 10:19:33 +01:00
net hw/net/can: Introduce Xilinx Versal CANFD controller 2023-06-06 10:19:30 +01:00
nios2 hw/nios2: set machine->fdt in nios2_load_dtb() 2022-10-17 16:15:10 -03:00
nubus hw/nubus/nubus-device: Fix memory leak in nubus_device_realize 2023-02-27 22:29:01 +01:00
nvme hw: replace most qemu_bh_new calls with qemu_bh_new_guarded 2023-04-28 11:31:54 +02:00
nvram aspeed queue: 2023-03-03 17:11:22 +00:00
openrisc *: Add missing includes of qemu/error-report.h 2023-03-22 15:06:57 +00:00
pci hw/pci/pci: Simplify pci_bar_address() using MACHINE_GET_CLASS() macro 2023-06-09 23:38:16 +03:00
pci-bridge hw/pci-bridge: make building pcie-to-pci bridge configurable 2023-05-19 10:30:46 -04:00
pci-host bulk: Remove pointless QOM casts 2023-06-05 20:48:34 +02:00
pcmcia hw/pcmcia: Do not register PCMCIA type if not required 2021-05-02 17:24:50 +02:00
ppc hw/ppc/Kconfig: MAC_NEWWORLD should always select USB_OHCI_PCI 2023-06-10 10:19:24 -03:00
rdma hw/rdma: VMW_PVRDMA should depend on VMXNET3_PCI 2023-04-28 08:05:37 +02:00
remote hw/remote: Fix vfu_cfg trace offset format 2023-06-09 23:38:16 +03:00
riscv hw/riscv: virt: Assume M-mode FW in pflash0 only when "-bios none" 2023-06-13 17:38:56 +10:00
rtc replace TABs with spaces 2023-03-20 12:43:50 +01:00
rx bulk: Remove pointless QOM casts 2023-06-05 20:48:34 +02:00
s390x hw/s390x: Use MachineClass->default_nic in the s390x machine 2023-05-22 09:44:48 +02:00
scsi bulk: Remove pointless QOM casts 2023-06-05 20:48:34 +02:00
sd hw: sd: allwinner-sdhost: Add sun50i-a64 SoC support 2023-06-06 10:19:33 +01:00
sensor Do not include hw/hw.h if it is not necessary 2023-02-27 09:15:38 +01:00
sh4 hw/sh4: Use MachineClass->default_nic in the sh4 r2d machine 2023-05-22 09:44:48 +02:00
smbios hw/smbios: fix field corruption in type 4 table 2023-03-02 03:10:46 -05:00
sparc bulk: Remove pointless QOM casts 2023-06-05 20:48:34 +02:00
sparc64 hw/sparc64/sun4u: Use MachineClass->default_nic and MachineClass->no_parallel 2023-05-22 09:44:48 +02:00
ssi hw/ssi: Fix Linux driver init issue with xilinx_spi 2023-04-03 16:12:30 +01:00
timer hw/timer/i8254_common: Share "iobase" property via base class 2023-06-05 07:43:23 +01:00
tpm tpm: Add support for TPM device over I2C bus 2023-04-20 08:17:15 -04:00
tricore hw/tricore: fix inclusion of tricore_testboard 2021-07-20 20:10:21 +02:00
usb hw/usb/hcd-ehci-pci: Simplify using DEVICE_GET_CLASS() macro 2023-06-09 23:38:16 +03:00
vfio vfio/pci: Fix a use-after-free issue 2023-05-24 09:21:22 +02:00
virtio hw/virtio/virtio-qmp.c: spelling: suppoted 2023-06-09 23:38:16 +03:00
watchdog hw/watchdog: Allwinner WDT emulation for system reset 2023-04-20 10:21:13 +01:00
xen xen-block: fix segv on unrealize 2023-06-07 15:07:10 +01:00
xenpv hw/xenpv: Initialize Xen backend operations 2023-03-24 14:52:14 +00:00
xtensa hw/xtensa: Use MachineClass->default_nic in the virt machine 2023-05-26 09:10:49 +02:00
Kconfig xen: add CONFIG_XEN_BUS and CONFIG_XEN_EMU options for Xen emulation 2023-03-01 08:22:49 +00:00
meson.build hw/loongarch: Add support loongson3 virt machine type. 2022-06-06 18:09:03 +00:00