From: Utkarsh Verma <uverma@linux.ibm.com>
To: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, aik@ozlabs.ru, aik@amd.com
Cc: pbonzini@redhat.com, th.huth@posteo.eu, nnmlinux@linux.ibm.com,
sbhat@linux.ibm.com, harshpb@linux.ibm.com,
amachhiw@linux.ibm.com, rathc@linux.ibm.com, balaton@eik.bme.hu,
philmd@oss.qualcomm.com, npiggin@gmail.com,
marcandre.lureau@redhat.com, fam@euphon.net
Subject: Re: [RFC PATCH 0/8] ppc/spapr: VOF disk image (qcow2) boot support
Date: Wed, 19 Aug 2026 12:25:40 +0530 [thread overview]
Message-ID: <e23ae0e2-935d-49fb-99e8-dbcaca5fb997@linux.ibm.com> (raw)
In-Reply-To: <20260817102733.605346-1-uverma@linux.ibm.com>
+ Alexey (AMD)
Hi Alexey,
Will you continue to maintain VOF in QEMU?
Could you please share your feedback on this patch series?
Regards,
Utkarsh
On 8/17/26 3:57 PM, uverma@linux.ibm.com wrote:
> From: Utkarsh Verma <uverma@linux.ibm.com>
>
> This series adds support for booting from a disk image under the Virtual Open
> Firmware (VOF) path for sPAPR/pseries machines in QEMU.
>
> The most common use case for pseries VMs is booting from a distro qcow2 disk
> image. These images carry a PReP boot partition containing GRUB2, which in turn
> loads the kernel and initrd via IEEE 1275 client interface calls.
> VOF currently only supports direct -kernel/-initrd boot; there is no
> firmware-mediated path to hand off to a bootloader on disk. This series
> implements that missing path, making VOF capable of handling the standard
> distro qcow2 boot flow without requiring SLOF.
>
> This series takes reference from an earlier implementation by Alexey
> Kardashevskiy [1] which explored the same concept but was not carried forward at
> the time.
>
> The existing load_elf function works on a file, whereas in the VOF the PReP
> partition (GRUB) is read from the disk image and loaded in the memory, also
> on loading the PReP partition in the guest memory the /memory@0/available FDT
> needs to be properly updated for each PT_LOAD segment of the core.elf file
> of the GRUB (PReP partition).
>
> Implemented a new public elf loader API load_elf_ram_sym_buf() to resolve both
> these issues. load_elf_ram_sym_buf() accepts a caller-supplied memory buffer
> instead of a filename. Internally it writes the buffer to an anonymous memfd
> and delegates to the existing load_elf32/load_elf64 paths, so all existing
> behaviour is preserved. Also, added optional segment_fn_t callback in
> load_elf_ram_sym_buf() through the internal elf_ops.h.inc template; it is
> invoked once per PT_LOAD segment after the load address is resolved, allowing
> callers to perform per-segment work such as VOF memory claims.
>
> When no -kernel is given, spapr_vof_reset() calls a newly implemented function
> spapr_vof_try_prep_boot() which iterates attached block backends, scans
> partitions for a PReP boot partition, reads the partition contents into a
> host buffer, calls load_elf_ram_sym_buf() to load the GRUB in the guest memory,
> and on success stores the ELF entry point in spapr->kernel_addr.
> spapr_vof_client_dt_finalize() then writes the entry point into
> /chosen/qemu,boot-kernel so VOF then transfers control to GRUB.
>
> - Partition scanner (spapr_vof_partition.c): scans MBR and GPT partition tables
> on a BlockBackend to locate the PReP boot partition.
>
> - Core loader extension (hw/core/loader.c): new load_elf_ram_sym_buf() API loads
> a 32/64-bit ELF binary from a caller-supplied memory buffer, reusing the
> existing load_elf32/load_elf64 paths via a memfd. A new segment_fn_t callback
> in elf_ops.h.inc lets callers act on each PT_LOAD segment as it is resolved.
>
> - read, seek OF services: two previously unimplemented IEEE 1275 client
> services, covering block device I/O needed by GRUB.
>
> - vscsi-report-luns method: walks the SCSIBus and builds the LUN report table
> in guest memory in the format expected by GRUB's ofdisk driver, matching
> SLOF's dev-generate-srplun encoding.
>
> - VTY write/read routing: routes console I/O through the VTY chardev backend;
> promotes vty_getchars to external linkage.
>
> - FDT disk@<lun> child nodes (spapr_vscsi.c): emits a child FDT node per
> attached SCSI disk in VOF mode, giving GRUB a fully-qualified OF path to open.
> Gated on spapr->vof so SLOF boots are unaffected.
>
> We used AI to build prototype with manual changes incorporated as identified
> during debugging multiple issues faced while making it work, hence using below
> tag as suggested in [2].
> AI-used-for: Code
>
> Testing:
>
> The series has been tested end-to-end by booting a RHEL9.7 qcow2 image on a
> pseries machine with VOF enabled (no SLOF).
>
> build$ ./qemu-system-ppc64 -M pseries,x-vof=on -cpu power9 -m 2G \
> -hda ../../rhel-guest-image-9.7-20251021.0.ppc64le.qcow2 -nographic
> qemu-system-ppc64: warning: TCG doesn't support requested feature, cap-cfpc=workaround
> qemu-system-ppc64: warning: TCG doesn't support requested feature, cap-ibs=workaround
> qemu-system-ppc64: warning: TCG doesn't support requested feature, cap-ccf-assist=on
> Welcome to GRUB!
> <snip>
> GRUB version 2.06
>
> +----------------------------------------------------------------------------+
> |*Red Hat Enterprise Linux (5.14.0-611.5.1.el9_7.ppc64le) 9.7 (Plow) |
> | |
> | |
> | |
> | |
> | |
> | |
> | |
> | |
> | |
> | |
> | |
> +----------------------------------------------------------------------------+
>
> Use the ^ and v keys to select which entry is highlighted.
> Press enter to boot the selected OS, `e' to edit the commands
> before booting or `c' for a command-line.
>
> <snip>
>
> Red Hat Enterprise Linux 9.7 (Plow)
> Kernel 5.14.0-611.5.1.el9_7.ppc64le on an ppc64le
>
> Activate the web console with: systemctl enable --now cockpit.socket
>
> localhost login: root
> Password:
> Last login: Fri Jul 10 01:45:44 on hvc0
> [root@localhost ~]#
> [root@localhost ~]# ls /
> afs boot etc lib media opt root sbin sys usr
> bin dev home lib64 mnt proc run srv tmp var
> [root@localhost ~]#
> [root@localhost ~]# echo "Hello, World!" > hello.txt
> [root@localhost ~]# cat hello.txt
> Hello, World!
> [root@localhost ~]#
>
> [1] https://lore.kernel.org/qemu-devel/20200203032943.121178-1-aik@ozlabs.ru/#t
> [2] https://lore.kernel.org/qemu-devel/20260529094619.1034458-1-pbonzini@redhat.com/
>
> Utkarsh Verma (8):
> ppc/spapr: add PReP boot partition detection
> hw/loader: add load_elf_ram_sym_buf() for in-memory ELF loading
> ppc/spapr: add baseline VOF disk boot support
> ppc/spapr: add VTY backend support to OF read/write/open services
> ppc/spapr: add block device backend to VOF open/read/write/seek
> services
> spapr_vscsi: add VOF disk nodes to the device tree
> ppc/spapr: strip OF path argument suffix in path_offset
> ppc/spapr: implement vscsi-report-luns call-method for PAPR vSCSI
>
> hw/char/spapr_vty.c | 2 +-
> hw/core/loader.c | 77 ++++++-
> hw/ppc/meson.build | 5 +-
> hw/ppc/spapr_vof.c | 144 +++++++++++-
> hw/ppc/spapr_vof_partition.c | 176 ++++++++++++++
> hw/ppc/trace-events | 4 +
> hw/ppc/vof.c | 429 +++++++++++++++++++++++++++++++++++
> hw/scsi/spapr_vscsi.c | 40 ++++
> include/hw/core/loader.h | 30 +++
> include/hw/elf_ops.h.inc | 12 +-
> include/hw/ppc/spapr_vio.h | 1 +
> include/hw/ppc/spapr_vof.h | 14 ++
> include/hw/ppc/vof.h | 2 +
> 13 files changed, 923 insertions(+), 13 deletions(-)
> create mode 100644 hw/ppc/spapr_vof_partition.c
> create mode 100644 include/hw/ppc/spapr_vof.h
>
prev parent reply other threads:[~2026-08-19 6:57 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-17 10:27 [RFC PATCH 0/8] ppc/spapr: VOF disk image (qcow2) boot support uverma
2026-08-17 10:27 ` [RFC PATCH 1/8] ppc/spapr: add PReP boot partition detection uverma
2026-08-17 10:27 ` [RFC PATCH 2/8] hw/loader: add load_elf_ram_sym_buf() for in-memory ELF loading uverma
2026-08-17 10:27 ` [RFC PATCH 3/8] ppc/spapr: add baseline VOF disk boot support uverma
2026-08-17 10:27 ` [RFC PATCH 4/8] ppc/spapr: add VTY backend support to OF read/write/open services uverma
2026-08-17 10:27 ` [RFC PATCH 5/8] ppc/spapr: add block device backend to VOF open/read/write/seek services uverma
2026-08-17 10:27 ` [RFC PATCH 6/8] spapr_vscsi: add VOF disk nodes to the device tree uverma
2026-08-17 10:27 ` [RFC PATCH 7/8] ppc/spapr: strip OF path argument suffix in path_offset uverma
2026-08-17 10:27 ` [RFC PATCH 8/8] ppc/spapr: implement vscsi-report-luns call-method for PAPR vSCSI uverma
2026-08-19 6:55 ` Utkarsh Verma [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e23ae0e2-935d-49fb-99e8-dbcaca5fb997@linux.ibm.com \
--to=uverma@linux.ibm.com \
--cc=aik@amd.com \
--cc=aik@ozlabs.ru \
--cc=amachhiw@linux.ibm.com \
--cc=balaton@eik.bme.hu \
--cc=fam@euphon.net \
--cc=harshpb@linux.ibm.com \
--cc=marcandre.lureau@redhat.com \
--cc=nnmlinux@linux.ibm.com \
--cc=npiggin@gmail.com \
--cc=pbonzini@redhat.com \
--cc=philmd@oss.qualcomm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=rathc@linux.ibm.com \
--cc=sbhat@linux.ibm.com \
--cc=th.huth@posteo.eu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.