On Thu, May 20, 2021 at 11:59:07PM +0200, BALATON Zoltan wrote: > On Thu, 20 May 2021, Alexey Kardashevskiy wrote: > > The PAPR platform describes an OS environment that's presented by > > a combination of a hypervisor and firmware. The features it specifies > > require collaboration between the firmware and the hypervisor. > > > > Since the beginning, the runtime component of the firmware (RTAS) has > > been implemented as a 20 byte shim which simply forwards it to > > a hypercall implemented in qemu. The boot time firmware component is > > SLOF - but a build that's specific to qemu, and has always needed to be > > updated in sync with it. Even though we've managed to limit the amount > > of runtime communication we need between qemu and SLOF, there's some, > > and it has become increasingly awkward to handle as we've implemented > > new features. > > > > This implements a boot time OF client interface (CI) which is > > enabled by a new "x-vof" pseries machine option (stands for "Virtual Open > > Firmware). When enabled, QEMU implements the custom H_OF_CLIENT hcall > > which implements Open Firmware Client Interface (OF CI). This allows > > using a smaller stateless firmware which does not have to manage > > the device tree. > > > > The new "vof.bin" firmware image is included with source code under > > pc-bios/. It also includes RTAS blob. > > > > This implements a handful of CI methods just to get -kernel/-initrd > > working. In particular, this implements the device tree fetching and > > simple memory allocator - "claim" (an OF CI memory allocator) and updates > > "/memory@0/available" to report the client about available memory. > > > > This implements changing some device tree properties which we know how > > to deal with, the rest is ignored. To allow changes, this skips > > fdt_pack() when x-vof=on as not packing the blob leaves some room for > > appending. > > > > In absence of SLOF, this assigns phandles to device tree nodes to make > > device tree traversing work. > > > > When x-vof=on, this adds "/chosen" every time QEMU (re)builds a tree. > > > > This adds basic instances support which are managed by a hash map > > ihandle -> [phandle]. > > > > Before the guest started, the used memory is: > > 0..e60 - the initial firmware > > 8000..10000 - stack > > 400000.. - kernel > > 3ea0000.. - initramdisk > > > > This OF CI does not implement "interpret". > > > > Unlike SLOF, this does not format uninitialized nvram. Instead, this > > includes a disk image with pre-formatted nvram. > > > > With this basic support, this can only boot into kernel directly. > > However this is just enough for the petitboot kernel and initradmdisk to > > boot from any possible source. Note this requires reasonably recent guest > > kernel with: > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=df5be5be8735 > > > > The immediate benefit is much faster booting time which especially > > crucial with fully emulated early CPU bring up environments. Also this > > may come handy when/if GRUB-in-the-userspace sees light of the day. > > > > This separates VOF and sPAPR in a hope that VOF bits may be reused by > > other POWERPC boards which do not support pSeries. > > > > This is coded in assumption that later on we might be adding support for > > booting from QEMU backends (blockdev is the first candidate) without > > devices/drivers in between as OF1275 does not require that and > > it is quite easy to so. > > > > Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru> > > --- > > > > The example command line is: > > > > /home/aik/pbuild/qemu-killslof-localhost-ppc64/qemu-system-ppc64 \ > > -nodefaults \ > > -chardev stdio,id=STDIO0,signal=off,mux=on \ > > -device spapr-vty,id=svty0,reg=0x71000110,chardev=STDIO0 \ > > -mon id=MON0,chardev=STDIO0,mode=readline \ > > -nographic \ > > -vga none \ > > -enable-kvm \ > > -m 8G \ > > -machine > > pseries,x-vof=on,cap-cfpc=broken,cap-sbbc=broken,cap-ibs=broken,cap-ccf-assist=off > > \ > > -kernel pbuild/kernel-le-guest/vmlinux \ > > -initrd pb/rootfs.cpio.xz \ > > -drive > > id=DRIVE0,if=none,file=./p/qemu-killslof/pc-bios/vof-nvram.bin,format=raw \ > > -global spapr-nvram.drive=DRIVE0 \ > > -snapshot \ > > -smp 8,threads=8 \ > > -L /home/aik/t/qemu-ppc64-bios/ \ > > -trace events=qemu_trace_events \ > > -d guest_errors \ > > -chardev socket,id=SOCKET0,server,nowait,path=qemu.mon.tmux26 \ > > -mon chardev=SOCKET0,mode=control > > > > --- > > Changes: > > v20: > > * compile vof.bin with -mcpu=power4 for better compatibility > > * s/std/stw/ in entry.S to make it work on ppc32 > > * fixed dt_available property to support both 32 and 64bit > > * shuffled prom_args handling code > > * do not enforce 32bit in MSR (again, to support 32bit platforms) > > > > [...] > > > diff --git a/default-configs/devices/ppc64-softmmu.mak > > b/default-configs/devices/ppc64-softmmu.mak > > index ae0841fa3a18..9fb201dfacfa 100644 > > --- a/default-configs/devices/ppc64-softmmu.mak > > +++ b/default-configs/devices/ppc64-softmmu.mak > > @@ -9,3 +9,4 @@ CONFIG_POWERNV=y > > # For pSeries > > CONFIG_PSERIES=y > > CONFIG_NVDIMM=y > > +CONFIG_VOF=y > > diff --git a/hw/ppc/Kconfig b/hw/ppc/Kconfig > > index e51e0e5e5ac6..964510dfc73d 100644 > > --- a/hw/ppc/Kconfig > > +++ b/hw/ppc/Kconfig > > @@ -143,3 +143,6 @@ config FW_CFG_PPC > > > > config FDT_PPC > > bool > > + > > +config VOF > > + bool > > I think you should just add "select VOF" to config PSERIES section in > Kconfig instead of adding it to default-configs/devices/ppc64-softmmu.mak. > That should do it, it works in my updated pegasos2 patch:
No, we don't want a "select": PSERIES doesn't require VOF while we still support SLOF, and indeed we're quite a ways from being ready to even make VOF the default pseries firmware. -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature