blob: 8d7fda10f15e9120ba253d959c34712e8273a3c5 [file] [log] [blame]
Bin Mengddec5e92019-07-18 00:34:15 -07001.. SPDX-License-Identifier: GPL-2.0+
2.. Copyright (C) 2017, Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +03003
Bin Mengddec5e92019-07-18 00:34:15 -07004QEMU ARM
5========
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +03006
7QEMU for ARM supports a special 'virt' machine designed for emulation and
8virtualization purposes. This document describes how to run U-Boot under it.
Tuomas Tynkkynen87145cf2018-01-11 16:11:24 +02009Both 32-bit ARM and AArch64 are supported.
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +030010
11The 'virt' platform provides the following as the basic functionality:
12
13 - A freely configurable amount of CPU cores
14 - U-Boot loaded and executing in the emulated flash at address 0x0
15 - A generated device tree blob placed at the start of RAM
16 - A freely configurable amount of RAM, described by the DTB
17 - A PL011 serial port, discoverable via the DTB
Tuomas Tynkkynen87145cf2018-01-11 16:11:24 +020018 - An ARMv7/ARMv8 architected timer
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +030019 - PSCI for rebooting the system
20 - A generic ECAM-based PCI host controller, discoverable via the DTB
21
22Additionally, a number of optional peripherals can be added to the PCI bus.
23
24Building U-Boot
25---------------
Tuomas Tynkkynen87145cf2018-01-11 16:11:24 +020026Set the CROSS_COMPILE environment variable as usual, and run:
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +030027
Bin Mengddec5e92019-07-18 00:34:15 -070028- For ARM::
29
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +030030 make qemu_arm_defconfig
31 make
32
Bin Mengddec5e92019-07-18 00:34:15 -070033- For AArch64::
34
Tuomas Tynkkynen87145cf2018-01-11 16:11:24 +020035 make qemu_arm64_defconfig
36 make
37
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +030038Running U-Boot
39--------------
40The minimal QEMU command line to get U-Boot up and running is:
41
Bin Mengddec5e92019-07-18 00:34:15 -070042- For ARM::
43
Tuomas Tynkkynen9cd7ac92018-05-14 18:47:52 +030044 qemu-system-arm -machine virt -bios u-boot.bin
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +030045
Bin Mengddec5e92019-07-18 00:34:15 -070046- For AArch64::
47
Tuomas Tynkkynen9cd7ac92018-05-14 18:47:52 +030048 qemu-system-aarch64 -machine virt -cpu cortex-a57 -bios u-boot.bin
Tuomas Tynkkynen87145cf2018-01-11 16:11:24 +020049
Tuomas Tynkkynen9cd7ac92018-05-14 18:47:52 +030050Note that for some odd reason qemu-system-aarch64 needs to be explicitly
Tuomas Tynkkynen87145cf2018-01-11 16:11:24 +020051told to use a 64-bit CPU or it will boot in 32-bit mode.
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +030052
Sumit Garg9b614ea2018-11-26 16:50:17 +053053Additional persistent U-boot environment support can be added as follows:
Bin Mengddec5e92019-07-18 00:34:15 -070054
55- Create envstore.img using qemu-img::
56
Sumit Garg9b614ea2018-11-26 16:50:17 +053057 qemu-img create -f raw envstore.img 64M
Bin Mengddec5e92019-07-18 00:34:15 -070058
59- Add a pflash drive parameter to the command line::
60
Sumit Garg9b614ea2018-11-26 16:50:17 +053061 -drive if=pflash,format=raw,index=1,file=envstore.img
62
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +030063Additional peripherals that have been tested to work in both U-Boot and Linux
64can be enabled with the following command line parameters:
65
Bin Mengddec5e92019-07-18 00:34:15 -070066- To add a Serial ATA disk via an Intel ICH9 AHCI controller, pass e.g.::
67
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +030068 -drive if=none,file=disk.img,id=mydisk -device ich9-ahci,id=ahci -device ide-drive,drive=mydisk,bus=ahci.0
Bin Mengddec5e92019-07-18 00:34:15 -070069
70- To add an Intel E1000 network adapter, pass e.g.::
71
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +030072 -netdev user,id=net0 -device e1000,netdev=net0
Bin Mengddec5e92019-07-18 00:34:15 -070073
74- To add an EHCI-compliant USB host controller, pass e.g.::
75
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +030076 -device usb-ehci,id=ehci
Bin Mengddec5e92019-07-18 00:34:15 -070077
78- To add a NVMe disk, pass e.g.::
79
Tuomas Tynkkynena1c21782017-10-09 19:42:41 +030080 -drive if=none,file=disk.img,id=mydisk -device nvme,drive=mydisk,serial=foo
81
82These have been tested in QEMU 2.9.0 but should work in at least 2.5.0 as well.
Heinrich Schuchardtd4a7fc12020-09-16 00:17:55 +020083
84Debug UART
85----------
86
87The debug UART on the ARM virt board uses these settings::
88
89 CONFIG_DEBUG_UART=y
90 CONFIG_DEBUG_UART_PL010=y
91 CONFIG_DEBUG_UART_BASE=0x9000000
92 CONFIG_DEBUG_UART_CLOCK=0