1.. SPDX-License-Identifier: GPL-2.0+ 2.. Copyright (C) 2021, Bin Meng <bmeng.cn@gmail.com> 3 4QEMU PPC E500 5============= 6 7QEMU for PPC supports a special 'ppce500' machine designed for emulation and 8virtualization purposes. This document describes how to run U-Boot under it. 9 10The QEMU ppce500 machine models a generic PowerPC E500 virtual machine with 11support for the VirtIO standard networking device connected to the built-in 12PCI host controller. Some common devices in the CCSBAR space are modeled, 13including MPIC, 16550A UART devices, GPIO, I2C and PCI host controller with 14MSI delivery to MPIC. It uses device-tree to pass configuration information 15to guest software. 16 17Building U-Boot 18--------------- 19Set the CROSS_COMPILE environment variable as usual, and run:: 20 21 $ make qemu-ppce500_defconfig 22 $ make 23 24Running U-Boot 25-------------- 26The minimal QEMU command line to get U-Boot up and running is:: 27 28 $ qemu-system-ppc -nographic -machine ppce500 -bios u-boot 29 30You can also run U-Boot using 'qemu-system-ppc64':: 31 32 $ qemu-system-ppc64 -nographic -machine ppce500 -bios u-boot 33 34The commands above create a target with 128 MiB memory by default. A freely 35configurable amount of RAM can be created via the '-m' parameter. For example, 36'-m 2G' creates 2 GiB memory for the target, and the memory node in the 37embedded DTB created by QEMU reflects the new setting. 38 39Both qemu-system-ppc and qemu-system-ppc64 provide emulation for the following 4032-bit PowerPC CPUs: 41 42* e500v2 43* e500mc 44 45Additionally qemu-system-ppc64 provides support for the following 64-bit CPUs: 46 47* e5500 48* e6500 49 50The CPU type can be specified via the '-cpu' command line. If not specified, 51it creates a machine with e500v2 core. The following example shows an e6500 52based machine creation:: 53 54 $ qemu-system-ppc64 -nographic -machine ppce500 -cpu e6500 -bios u-boot 55 56When U-Boot boots, you will notice the following:: 57 58 CPU: Unknown, Version: 0.0, (0x00000000) 59 Core: e6500, Version: 2.0, (0x80400020) 60 61This is because we only specified a core name to QEMU and it does not have a 62meaningful SVR value which represents an actual SoC that integrates such core. 63You can specify a real world SoC device that QEMU has built-in support but all 64these SoCs are e500v2 based MPC85xx series, hence you cannot test anything 65built for P4080 (e500mc), P5020 (e5500) and T2080 (e6500). 66 67By default a VirtIO standard PCI networking device is connected as an ethernet 68interface at PCI address 0.1.0, but we can switch that to an e1000 NIC by:: 69 70 $ qemu-system-ppc -nographic -machine ppce500 -bios u-boot \ 71 -nic tap,ifname=tap0,script=no,downscript=no,model=e1000 72 73VirtIO BLK driver is also enabled to support booting from a disk image where 74a kernel image is stored. Append the following to QEMU:: 75 76 -drive file=disk.img,format=raw,id=disk0 -device virtio-blk-pci,drive=disk0 77 78Pericom pt7c4338 RTC is supported so we can use the 'date' command:: 79 80 => date 81 Date: 2021-02-18 (Thursday) Time: 15:33:20 82 83Additionally, 'poweroff' command is supported to shut down the QEMU session:: 84 85 => poweroff 86 poweroff ... 87 88These have been tested in QEMU 5.2.0. 89