qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

powernv.rst (7475B)


      1 PowerNV family boards (``powernv8``, ``powernv9``, ``powernv10``)
      2 ==================================================================
      3 
      4 PowerNV (as Non-Virtualized) is the "bare metal" platform using the
      5 OPAL firmware. It runs Linux on IBM and OpenPOWER systems and it can
      6 be used as an hypervisor OS, running KVM guests, or simply as a host
      7 OS.
      8 
      9 The PowerNV QEMU machine tries to emulate a PowerNV system at the
     10 level of the skiboot firmware, which loads the OS and provides some
     11 runtime services. Power Systems have a lower firmware (HostBoot) that
     12 does low level system initialization, like DRAM training. This is
     13 beyond the scope of what QEMU addresses today.
     14 
     15 Supported devices
     16 -----------------
     17 
     18  * Multi processor support for POWER8, POWER8NVL and POWER9.
     19  * XSCOM, serial communication sideband bus to configure chiplets.
     20  * Simple LPC Controller.
     21  * Processor Service Interface (PSI) Controller.
     22  * Interrupt Controller, XICS (POWER8) and XIVE (POWER9) and XIVE2 (Power10).
     23  * POWER8 PHB3 PCIe Host bridge and POWER9 PHB4 PCIe Host bridge.
     24  * Simple OCC is an on-chip micro-controller used for power management tasks.
     25  * iBT device to handle BMC communication, with the internal BMC simulator
     26    provided by QEMU or an external BMC such as an Aspeed QEMU machine.
     27  * PNOR containing the different firmware partitions.
     28 
     29 Missing devices
     30 ---------------
     31 
     32 A lot is missing, among which :
     33 
     34  * I2C controllers (yet to be merged).
     35  * NPU/NPU2/NPU3 controllers.
     36  * EEH support for PCIe Host bridge controllers.
     37  * NX controller.
     38  * VAS controller.
     39  * chipTOD (Time Of Day).
     40  * Self Boot Engine (SBE).
     41  * FSI bus.
     42 
     43 Firmware
     44 --------
     45 
     46 The OPAL firmware (OpenPower Abstraction Layer) for OpenPower systems
     47 includes the runtime services ``skiboot`` and the bootloader kernel and
     48 initramfs ``skiroot``. Source code can be found on the `OpenPOWER account at
     49 GitHub <https://github.com/open-power>`_.
     50 
     51 Prebuilt images of ``skiboot`` and ``skiroot`` are made available on the
     52 `OpenPOWER <https://github.com/open-power/op-build/releases/>`__ site.
     53 
     54 QEMU includes a prebuilt image of ``skiboot`` which is updated when a
     55 more recent version is required by the models.
     56 
     57 Current acceleration status
     58 ---------------------------
     59 
     60 KVM acceleration in Linux Power hosts is provided by the kvm-hv and
     61 kvm-pr modules. kvm-hv is adherent to PAPR and it's not compliant with
     62 powernv. kvm-pr in theory could be used as a valid accel option but
     63 this isn't supported by kvm-pr at this moment.
     64 
     65 To spare users from dealing with not so informative errors when attempting
     66 to use accel=kvm, the powernv machine will throw an error informing that
     67 KVM is not supported. This can be revisited in the future if kvm-pr (or
     68 any other KVM alternative) is usable as KVM accel for this machine.
     69 
     70 Boot options
     71 ------------
     72 
     73 Here is a simple setup with one e1000e NIC :
     74 
     75 .. code-block:: bash
     76 
     77   $ qemu-system-ppc64 -m 2G -machine powernv9 -smp 2,cores=2,threads=1 \
     78   -accel tcg,thread=single \
     79   -device e1000e,netdev=net0,mac=C0:FF:EE:00:00:02,bus=pcie.0,addr=0x0 \
     80   -netdev user,id=net0,hostfwd=::20022-:22,hostname=pnv \
     81   -kernel ./zImage.epapr  \
     82   -initrd ./rootfs.cpio.xz \
     83   -nographic
     84 
     85 and a SATA disk :
     86 
     87 .. code-block:: bash
     88 
     89   -device ich9-ahci,id=sata0,bus=pcie.1,addr=0x0 \
     90   -drive file=./ubuntu-ppc64le.qcow2,if=none,id=drive0,format=qcow2,cache=none \
     91   -device ide-hd,bus=sata0.0,unit=0,drive=drive0,id=ide,bootindex=1 \
     92 
     93 Complex PCIe configuration
     94 ~~~~~~~~~~~~~~~~~~~~~~~~~~
     95 
     96 Six PHBs are defined per chip (POWER9) but no default PCI layout is
     97 provided (to be compatible with libvirt). One PCI device can be added
     98 on any of the available PCIe slots using command line options such as:
     99 
    100 .. code-block:: bash
    101 
    102   -device e1000e,netdev=net0,mac=C0:FF:EE:00:00:02,bus=pcie.0,addr=0x0
    103   -netdev bridge,id=net0,helper=/usr/libexec/qemu-bridge-helper,br=virbr0,id=hostnet0
    104 
    105   -device megasas,id=scsi0,bus=pcie.0,addr=0x0
    106   -drive file=./ubuntu-ppc64le.qcow2,if=none,id=drive-scsi0-0-0-0,format=qcow2,cache=none
    107   -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,bootindex=2
    108 
    109 Here is a full example with two different storage controllers on
    110 different PHBs, each with a disk, the second PHB is empty :
    111 
    112 .. code-block:: bash
    113 
    114   $ qemu-system-ppc64 -m 2G -machine powernv9 -smp 2,cores=2,threads=1 -accel tcg,thread=single \
    115   -kernel ./zImage.epapr -initrd ./rootfs.cpio.xz -bios ./skiboot.lid \
    116   \
    117   -device megasas,id=scsi0,bus=pcie.0,addr=0x0 \
    118   -drive file=./rhel7-ppc64le.qcow2,if=none,id=drive-scsi0-0-0-0,format=qcow2,cache=none \
    119   -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,bootindex=2 \
    120   \
    121   -device pcie-pci-bridge,id=bridge1,bus=pcie.1,addr=0x0 \
    122   \
    123   -device ich9-ahci,id=sata0,bus=bridge1,addr=0x1 \
    124   -drive file=./ubuntu-ppc64le.qcow2,if=none,id=drive0,format=qcow2,cache=none \
    125   -device ide-hd,bus=sata0.0,unit=0,drive=drive0,id=ide,bootindex=1 \
    126   -device e1000e,netdev=net0,mac=C0:FF:EE:00:00:02,bus=bridge1,addr=0x2 \
    127   -netdev bridge,helper=/usr/libexec/qemu-bridge-helper,br=virbr0,id=net0 \
    128   -device nec-usb-xhci,bus=bridge1,addr=0x7 \
    129   \
    130   -serial mon:stdio -nographic
    131 
    132 You can also use VIRTIO devices :
    133 
    134 .. code-block:: bash
    135 
    136   -drive file=./fedora-ppc64le.qcow2,if=none,snapshot=on,id=drive0 \
    137   -device virtio-blk-pci,drive=drive0,id=blk0,bus=pcie.0 \
    138   \
    139   -netdev tap,helper=/usr/lib/qemu/qemu-bridge-helper,br=virbr0,id=netdev0 \
    140   -device virtio-net-pci,netdev=netdev0,id=net0,bus=pcie.1 \
    141   \
    142   -fsdev local,id=fsdev0,path=$HOME,security_model=passthrough \
    143   -device virtio-9p-pci,fsdev=fsdev0,mount_tag=host,bus=pcie.2
    144 
    145 Multi sockets
    146 ~~~~~~~~~~~~~
    147 
    148 The number of sockets is deduced from the number of CPUs and the
    149 number of cores. ``-smp 2,cores=1`` will define a machine with 2
    150 sockets of 1 core, whereas ``-smp 2,cores=2`` will define a machine
    151 with 1 socket of 2 cores. ``-smp 8,cores=2``, 4 sockets of 2 cores.
    152 
    153 BMC configuration
    154 ~~~~~~~~~~~~~~~~~
    155 
    156 OpenPOWER systems negotiate the shutdown and reboot with their
    157 BMC. The QEMU PowerNV machine embeds an IPMI BMC simulator using the
    158 iBT interface and should offer the same power features.
    159 
    160 If you want to define your own BMC, use ``-nodefaults`` and specify
    161 one on the command line :
    162 
    163 .. code-block:: bash
    164 
    165   -device ipmi-bmc-sim,id=bmc0 -device isa-ipmi-bt,bmc=bmc0,irq=10
    166 
    167 The files `palmetto-SDR.bin <http://www.kaod.org/qemu/powernv/palmetto-SDR.bin>`__
    168 and `palmetto-FRU.bin <http://www.kaod.org/qemu/powernv/palmetto-FRU.bin>`__
    169 define a Sensor Data Record repository and a Field Replaceable Unit
    170 inventory for a Palmetto BMC. They can be used to extend the QEMU BMC
    171 simulator.
    172 
    173 .. code-block:: bash
    174 
    175   -device ipmi-bmc-sim,sdrfile=./palmetto-SDR.bin,fruareasize=256,frudatafile=./palmetto-FRU.bin,id=bmc0 \
    176   -device isa-ipmi-bt,bmc=bmc0,irq=10
    177 
    178 The PowerNV machine can also be run with an external IPMI BMC device
    179 connected to a remote QEMU machine acting as BMC, using these options
    180 :
    181 
    182 .. code-block:: bash
    183 
    184   -chardev socket,id=ipmi0,host=localhost,port=9002,reconnect=10 \
    185   -device ipmi-bmc-extern,id=bmc0,chardev=ipmi0 \
    186   -device isa-ipmi-bt,bmc=bmc0,irq=10 \
    187   -nodefaults
    188 
    189 NVRAM
    190 ~~~~~
    191 
    192 Use a MTD drive to add a PNOR to the machine, and get a NVRAM :
    193 
    194 .. code-block:: bash
    195 
    196   -drive file=./witherspoon.pnor,format=raw,if=mtd
    197 
    198 CAVEATS
    199 -------
    200 
    201  * No support for multiple HW threads (SMT=1). Same as pseries.
    202 
    203 Maintainer contact information
    204 ------------------------------
    205 
    206 Cédric Le Goater <clg@kaod.org>