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