1/* 2 * Copyright 2014 Broadcom Corporation. 3 * 4 * SPDX-License-Identifier: GPL-2.0+ 5 */ 6 7Semihosting is ARM's way of having a real or virtual target communicate 8with a host or host debugger for basic operations such as file I/O, 9console I/O, etc. Please see 10http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471c/Bgbjjgij.html for more information. 11 12For developing on armv8 virtual fastmodel platforms, semihosting is a 13valuable tool since it allows access to image/configuration files before 14eMMC or other NV media are available. 15 16There are two main ARM virtual Fixed Virtual Platform (FVP) models, 17Versatile Express (VE) FVP and BASE FVP (See 18http://www.arm.com/products/tools/models/fast-models/foundation-model.php) 19The initial vexpress64 u-boot board created here runs on the VE virtual 20platform using the license-free Foundation_v8 simulator. Fortunately, 21the Foundation_v8 simulator also supports the BASE_FVP model which 22companies can purchase licenses for and contain much more functionality. 23So we can, in u-boot, run either model by either using the VE FVP (default), 24or turning on CONFIG_BASE_FVP for the more full featured model. 25 26Rather than create a new armv8 board similar to armltd/vexpress64, add 27semihosting calls to the existing one, enabled with CONFIG_SEMIHOSTING 28and CONFIG_BASE_FVP both set. Also reuse the existing board config file 29vexpress_aemv8a.h but differentiate the two models by the presence or 30absence of CONFIG_BASE_FVP. This change is tested and works on both the 31Foundation and Base fastmodel simulators. 32 33The level of semihosting support is minimal, restricted to just what it 34takes to load images to memory. If more semihosting functionality is 35required, such as file seek, outputting strings, reading characters, etc, 36then it can be easily added later. 37 38We require that the board include file define these env variables: 39- kernel_name e.g. "uImage" 40- kernel_addr_r e.g. "0x80000000" 41- initrd_name e.g. "ramdisk.img" 42- initrd_addr_r e.g. "0x88000000" 43- fdt_name e.g. "devtree.dtb" 44- fdt_addr_r e.g. "0x83000000" 45 46Optionally, "fdt_high" and "initrd_high" can be specified as per 47their rules for allowing or preventing copying of these images. 48 49For the "fdt chosen" startup macro, this code will then define: 50- initrd_end (based on retrieving initrd_addr_r plus actual initrd_size) 51 52We will then load the kernel, initrd, and fdt into the specified 53locations in memory in a similar way that the ATF fastmodel code 54uses semihosting calls to load other boot stages and u-boot itself. 55