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 Maintainer contact information 199 ------------------------------ 200 201 Cédric Le Goater <clg@kaod.org> 202