forked from Xilinx/u-boot-xlnx
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ARM: Add a new arch + board for QEMU's 'virt' machine
This board builds an U-Boot binary that is bootable with QEMU's 'virt' machine on ARM. The minimal QEMU command line is: qemu-system-arm -machine virt,highmem=off -bios u-boot.bin (Note that the 'highmem=off' parameter to the 'virt' machine is required for PCI to work in U-Boot.) This command line enables the following: - u-boot.bin loaded and executing in the emulated flash at address 0x0 - A generated device tree blob placed at the start of RAM - A freely configurable amount of RAM, described by the DTB - A PL011 serial port, discoverable via the DTB - An ARMv7 architected timer - PSCI for rebooting the system - A generic ECAM-based PCI host controller, discoverable via the DTB Additionally, QEMU allows plugging a bunch of useful peripherals to the PCI bus. The following ones are supported by both U-Boot and Linux: - To add a Serial ATA disk via an Intel ICH9 AHCI controller, pass e.g.: -drive if=none,file=disk.img,id=mydisk -device ich9-ahci,id=ahci -device ide-drive,drive=mydisk,bus=ahci.0 - To add an Intel E1000 network adapter, pass e.g.: -net nic,model=e1000 -net user - To add an EHCI-compliant USB host controller, pass e.g.: -device usb-ehci,id=ehci - To add a NVMe disk, pass e.g.: -drive if=none,file=disk.img,id=mydisk -device nvme,drive=mydisk,serial=foo Signed-off-by: Tuomas Tynkkynen <[email protected]>
- Loading branch information
Showing
7 changed files
with
152 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
if ARCH_QEMU | ||
|
||
config SYS_VENDOR | ||
default "emulation" | ||
|
||
config SYS_BOARD | ||
default "qemu-arm" | ||
|
||
config SYS_CONFIG_NAME | ||
default "qemu-arm" | ||
|
||
endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
QEMU ARM 'VIRT' BOARD | ||
M: Tuomas Tynkkynen <[email protected]> | ||
S: Maintained | ||
F: board/emulation/qemu-arm/ | ||
F: include/configs/qemu-arm.h | ||
F: configs/qemu_arm_defconfig |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# | ||
# SPDX-License-Identifier: GPL-2.0+ | ||
# | ||
|
||
obj-y += qemu-arm.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
/* | ||
* Copyright (c) 2017 Tuomas Tynkkynen | ||
* | ||
* SPDX-License-Identifier: GPL-2.0+ | ||
*/ | ||
#include <common.h> | ||
#include <fdtdec.h> | ||
|
||
int board_init(void) | ||
{ | ||
return 0; | ||
} | ||
|
||
int dram_init(void) | ||
{ | ||
if (fdtdec_setup_memory_size() != 0) | ||
return -EINVAL; | ||
|
||
return 0; | ||
} | ||
|
||
int dram_init_banksize(void) | ||
{ | ||
fdtdec_setup_memory_banksize(); | ||
|
||
return 0; | ||
} | ||
|
||
void *board_fdt_blob_setup(void) | ||
{ | ||
/* QEMU loads a generated DTB for us at the start of RAM. */ | ||
return (void *)CONFIG_SYS_SDRAM_BASE; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
CONFIG_ARM=y | ||
CONFIG_ARM_SMCCC=y | ||
CONFIG_ARCH_QEMU=y | ||
CONFIG_AHCI=y | ||
CONFIG_DISTRO_DEFAULTS=y | ||
# CONFIG_DISPLAY_CPUINFO is not set | ||
# CONFIG_DISPLAY_BOARDINFO is not set | ||
# CONFIG_CMD_IMLS is not set | ||
CONFIG_CMD_PCI=y | ||
CONFIG_CMD_USB=y | ||
CONFIG_OF_BOARD=y | ||
CONFIG_AHCI_PCI=y | ||
CONFIG_BLK=y | ||
# CONFIG_MMC is not set | ||
CONFIG_DM_ETH=y | ||
CONFIG_E1000=y | ||
CONFIG_NVME=y | ||
CONFIG_PCI=y | ||
CONFIG_DM_PCI=y | ||
CONFIG_PCIE_ECAM_GENERIC=y | ||
CONFIG_SCSI=y | ||
CONFIG_DM_SCSI=y | ||
CONFIG_SYSRESET=y | ||
CONFIG_SYSRESET_PSCI=y | ||
CONFIG_USB=y | ||
CONFIG_DM_USB=y | ||
CONFIG_USB_EHCI_HCD=y | ||
CONFIG_USB_EHCI_PCI=y |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
/* | ||
* Copyright (c) 2017 Tuomas Tynkkynen | ||
* | ||
* SPDX-License-Identifier: GPL-2.0+ | ||
*/ | ||
|
||
#ifndef __CONFIG_H | ||
#define __CONFIG_H | ||
|
||
#include <linux/sizes.h> | ||
|
||
/* Physical memory map */ | ||
#define CONFIG_SYS_TEXT_BASE 0x00000000 | ||
|
||
#define CONFIG_NR_DRAM_BANKS 1 | ||
#define CONFIG_SYS_SDRAM_BASE 0x40000000 | ||
|
||
/* The DTB generated by QEMU is placed at start of RAM, stay away from there */ | ||
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + SZ_2M) | ||
#define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE + SZ_2M) | ||
#define CONFIG_SYS_MALLOC_LEN SZ_16M | ||
|
||
/* QEMU's PL011 serial port is detected via FDT using the device model */ | ||
#define CONFIG_PL01X_SERIAL | ||
|
||
/* QEMU implements a 62.5MHz architected timer */ | ||
/* FIXME: can we rely on CNTFREQ instead of hardcoding this fact here? */ | ||
#define CONFIG_SYS_ARCH_TIMER | ||
#define CONFIG_SYS_HZ 1000 | ||
#define CONFIG_SYS_HZ_CLOCK 62500000 | ||
|
||
/* For block devices, QEMU emulates an ICH9 AHCI controller over PCI */ | ||
#define CONFIG_SYS_SCSI_MAX_SCSI_ID 6 | ||
#define CONFIG_SCSI_AHCI | ||
#define CONFIG_LIBATA | ||
|
||
/* Environment options */ | ||
#define CONFIG_ENV_SIZE SZ_64K | ||
|
||
#include <config_distro_defaults.h> | ||
|
||
#define BOOT_TARGET_DEVICES(func) \ | ||
func(SCSI, scsi, 0) | ||
|
||
#include <config_distro_bootcmd.h> | ||
|
||
#define CONFIG_PREBOOT "pci enum" | ||
#define CONFIG_EXTRA_ENV_SETTINGS \ | ||
"fdt_high=0xffffffff\0" \ | ||
"initrd_high=0xffffffff\0" \ | ||
"fdt_addr=0x40000000\0" \ | ||
"scriptaddr=0x40200000\0" \ | ||
"pxefile_addr_r=0x40300000\0" \ | ||
"kernel_addr_r=0x40400000\0" \ | ||
"ramdisk_addr_r=0x44000000\0" \ | ||
BOOTENV | ||
|
||
#endif /* __CONFIG_H */ |