From mboxrd@z Thu Jan 1 00:00:00 1970 From: Darwin Rambo Date: Fri, 23 May 2014 10:41:29 -0700 Subject: [U-Boot] [PATCH v3] arm: Add support for semihosting for armv8 fastmodel targets. In-Reply-To: <52268d69760843f7a12770e136f6d97e@BN1PR03MB220.namprd03.prod.outlook.com> References: <1395688573-28855-1-git-send-email-drambo@broadcom.com> <52268d69760843f7a12770e136f6d97e@BN1PR03MB220.namprd03.prod.outlook.com> Message-ID: <537F8849.7030804@broadcom.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Bhupesh, I believe that this patch is now stale, because other changes to boards.cfg and vexpress_aemv8a.h were done after this patch was submitted. So it doesn't apply cleanly anymore and needs to be regenerated. In the meantime can you remove this patch from your world since I believe that it doesn't provide any functionality you need at this time? I will send in a v4 patch that applies cleanly to the latest u-boot. Am I suggesting the right process here? Thanks, Darwin On 14-05-23 05:05 AM, bhupesh.sharma at freescale.com wrote: > Hi Darwin, > >> -----Original Message----- >> From: Darwin Rambo [mailto:drambo at broadcom.com] >> Sent: Tuesday, March 25, 2014 12:46 AM >> To: u-boot at lists.denx.de >> Cc: Darwin Rambo; Albert Aribaud; Tom Rini; fenghua at phytium.com.cn; >> Sharma Bhupesh-B45370 >> Subject: [PATCH v3] arm: Add support for semihosting for armv8 fastmodel >> targets. >> >> The reason for this change is to be able to use the ARM Trusted Firmware >> (ATF) to load the various ATF images, plus u-boot, which can then load >> the kernel/ramdisk/dtb with calls to an external host from a standard >> fastmodel armv8 board file using semihosting, and then launch the kernel >> without a bootwrapper. This gives us a more realistic boot sequence. >> >> There are two main ARM virtual Fixed Virtual Platform (FVP) models, >> Versatile Express (VE) FVP and BASE FVP (See >> http://www.arm.com/products/tools/models/fast-models/foundation- >> model.php) >> The initial vexpress64 u-boot board created here runs on the VE virtual >> platform using the license-free Foundation_v8 simulator. Fortunately, the >> Foundation_v8 simulator also supports the BASE_FVP model which companies >> can purchase licenses for and contain much more functionality. >> So we can, in u-boot, run either model by either using the VE FVP >> (default), or turning on CONFIG_BASE_FVP for the more full featured >> model. >> >> Rather than create a new armv8 board similar to armltd/vexpress64, add >> semihosting calls to the existing one, enabled with CONFIG_SEMIHOSTING >> and CONFIG_BASE_FVP both set. Also reuse the existing board config file >> vexpress_aemv8a.h but differentiate the two models by the presence or >> absence of CONFIG_BASE_FVP. This change is tested and works on both the >> Foundation and Base fastmodel simulators. >> >> Support for armv7 in fastmodel is less useful due to the wide range of >> available silicon and the lack of a free armv7 fastmodel, so this change >> contains an untested armv7 placeholder for the service trap opcode. >> >> The level of semihosting support is minimal, restricted to just what it >> takes to load images to memory. If more semihosting functionality is >> required, such as file seek, outputting strings, reading characters, etc, >> then it can be easily added later. > > Sorry for the late reply. We are using ARMv8 foundation model (the free version) > to launch u-boot via the ARM Trusted Firmware (ATF). We are using a older > u-boot version and cannot see the ATF launching the u-boot.bin. > > Please find the details of the ARMv8 foundation model command line and ATF, u-boot commit > logs below (Host machine is a ubuntu-64 bit). > > ARMv8 foundation model Command Line used > ----------------------------------------- > > $ ./Foundation_v8 --cores=1 --no-secure-memory --visualization --gicv3 --data="bl1.bin"@0x00000000 --data="fip.bin"@0x80000000 > > Trying 127.0.0.1... > Connected to localhost. > Escape character is '^]'. > Booting trusted firmware boot loader stage 1 > Built : 12:58:21, May 22 2014 > ERROR: Firmware Image Package header check failed. > Booting trusted firmware boot loader stage 2 > BL2 Built : 12:58:22, May 22 2014 > ERROR: Firmware Image Package header check failed. > ERROR: Firmware Image Package header check failed. > Booting trusted firmware boot loader stage 3 > BL31 Built : 12:58:23, May 22 2014 > > ATF latest commit > ----------------- > > commit ca823d2c881d9d8c7db364de7e362d2e75ad55df > Author: Achin Gupta > Date: Sun Feb 2 13:04:00 2014 +0000 > > Increase coherent stack sizes > > This patch increases coherent stack size for both debug and release > builds in order to accommodate stack-heavy printf() and extended EL3 > functionality > > Change-Id: I30ef30530a01517a97e63d703873374828c09f20 > > u-boot commit > ------------- > > commit 22a240c32c1340183fce12867ae5f8736b92a638 > Author: Alexey Brodkin > Date: Fri Dec 13 10:35:11 2013 +0400 > > serial/serial_arc - add driver for ARC UART > > Driver for non-standard on-chip UART, instantiated in the ARC (Synopsys) > FPGA Boards such as ARCAngel4/ML50x > > Signed-off-by: Alexey Brodkin > Regards, > Bhupesh > >> Signed-off-by: Darwin Rambo >> --- >> >> Changes in v3: >> - minor format fixup in board file >> >> Changes in v2: >> - use kernel_addr_r, fdt_addr_r, initrd_addr_r convention. >> - Use env variables for kernel/fdt/initrd file names. >> - Add CONFIG_BASE_FVP to differentiate VE and BASE FVP models. >> - CONFIG_SEMIHOSTING only refers to bringing in semihosting code now. >> - Remove unnecessary CONFIG_SYS_BAUDRATE_TABLE, >> CONFIG_SYS_PROMPT_HUSH_PS2 >> - Remove vexpress_aemv8a_semi.h and replace with CONFIG_BASE_FVP >> - Update boards.cfg with option SEMIHOSTING and BASE_FVP >> - Add doc/README.semihosting >> >> Changes in v1: >> - Initial code >> - Remove empty timer_init() function. >> >> arch/arm/include/asm/semihosting.h | 21 +++ >> arch/arm/lib/Makefile | 1 + >> arch/arm/lib/semihosting.c | 235 >> ++++++++++++++++++++++++++++++++++ >> board/armltd/vexpress64/vexpress64.c | 101 ++++++++++++++- >> boards.cfg | 1 + >> doc/README.semihosting | 35 +++++ >> include/configs/vexpress_aemv8a.h | 59 ++++++++- >> 7 files changed, 441 insertions(+), 12 deletions(-) create mode 100644 >> arch/arm/include/asm/semihosting.h >> create mode 100644 arch/arm/lib/semihosting.c create mode 100644 >> doc/README.semihosting >> >> diff --git a/arch/arm/include/asm/semihosting.h >> b/arch/arm/include/asm/semihosting.h >> new file mode 100644 >> index 0000000..74111dc >> --- /dev/null >> +++ b/arch/arm/include/asm/semihosting.h >> @@ -0,0 +1,21 @@ >> +/* >> + * Copyright 2014 Broadcom Corporation >> + * >> + * SPDX-License-Identifier: GPL-2.0+ >> + */ >> + >> +#ifndef __SEMIHOSTING_H__ >> +#define __SEMIHOSTING_H__ >> + >> +/* >> + * ARM semihosting functions for loading images to memory. See the >> +source >> + * code for more information. >> + */ >> +int smh_load(const char *fname, void *memp, int avail, int verbose); >> +int smh_read(int fd, void *memp, int len); int smh_open(const char >> +*fname, char *modestr); int smh_close(int fd); int smh_len_fd(int fd); >> +int smh_len(const char *fname); >> + >> +#endif /* __SEMIHOSTING_H__ */ >> diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile index >> 9fc81cd..0ba929d 100644 >> --- a/arch/arm/lib/Makefile >> +++ b/arch/arm/lib/Makefile >> @@ -32,6 +32,7 @@ obj-$(CONFIG_USE_ARCH_MEMCPY) += memcpy.o else >> obj-$(CONFIG_SPL_FRAMEWORK) += spl.o >> endif >> +obj-$(CONFIG_SEMIHOSTING) += semihosting.o >> >> obj-y += sections.o >> ifdef CONFIG_ARM64 >> diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c new >> file mode 100644 index 0000000..d603789 >> --- /dev/null >> +++ b/arch/arm/lib/semihosting.c >> @@ -0,0 +1,235 @@ >> +/* >> + * Copyright 2014 Broadcom Corporation >> + * >> + * SPDX-License-Identifier: GPL-2.0+ >> + */ >> + >> +/* >> + * Minimal semihosting implementation for reading files into memory. If >> +more >> + * features like writing files or console output are required they can >> +be >> + * added later. This code has been tested on arm64/aarch64 fastmodel >> only. >> + * An untested placeholder exists for armv7 architectures, but since >> +they >> + * are commonly available in silicon now, fastmodel usage makes less >> +sense >> + * for them. >> + */ >> +#include >> +#include >> + >> +#define SYSOPEN 0x01 >> +#define SYSCLOSE 0x02 >> +#define SYSREAD 0x06 >> +#define SYSFLEN 0x0C >> + >> +#define MODE_READ 0x0 >> +#define MODE_READBIN 0x1 >> + >> +/* >> + * Call the handler >> + */ >> +static int smh_trap(unsigned int sysnum, void *addr) { >> + register int result asm("r0"); >> +#if defined(CONFIG_ARM64) >> + asm volatile ("hlt #0xf000" : "=r" (result) : "0"(sysnum), >> "r"(addr)); >> +#else >> + /* Note - untested placeholder */ >> + asm volatile ("svc #0x123456" : "=r" (result) : "0"(sysnum), >> +"r"(addr)); #endif >> + return result; >> +} >> + >> +/* >> + * Open, load a file into memory, and close it. Check that the >> +available space >> + * is sufficient to store the entire file. Return the bytes actually >> +read from >> + * the file as seen by the read function. The verbose flag enables some >> +extra >> + * printing of successful read status. >> + */ >> +int smh_load(const char *fname, void *memp, int avail, int verbose) { >> + int ret, fd, len; >> + >> + ret = -1; >> + >> + debug("%s: fname \'%s\', avail %u, memp %p\n", __func__, fname, >> + avail, memp); >> + >> + /* Open the file */ >> + fd = smh_open(fname, "rb"); >> + if (fd == -1) >> + return ret; >> + >> + /* Get the file length */ >> + ret = smh_len_fd(fd); >> + if (ret == -1) { >> + smh_close(fd); >> + return ret; >> + } >> + >> + /* Check that the file will fit in the supplied buffer */ >> + if (ret > avail) { >> + printf("%s: ERROR ret %d, avail %u\n", __func__, ret, >> + avail); >> + smh_close(fd); >> + return ret; >> + } >> + >> + len = ret; >> + >> + /* Read the file into the buffer */ >> + ret = smh_read(fd, memp, len); >> + if (ret == 0) { >> + /* Print successful load information if requested */ >> + if (verbose) { >> + printf("\n%s\n", fname); >> + printf(" 0x%8p dest\n", memp); >> + printf(" 0x%08x size\n", len); >> + printf(" 0x%08x avail\n", avail); >> + } >> + } >> + >> + /* Close the file */ >> + smh_close(fd); >> + >> + return ret; >> +} >> + >> +/* >> + * Read 'len' bytes of file into 'memp'. Returns 0 on success, else >> +failure */ int smh_read(int fd, void *memp, int len) { >> + int ret; >> + struct smh_read_s { >> + int fd; >> + void *memp; >> + int len; >> + } read; >> + >> + debug("%s: fd %d, memp %p, len %d\n", __func__, fd, memp, len); >> + >> + read.fd = fd; >> + read.memp = memp; >> + read.len = len; >> + >> + ret = smh_trap(SYSREAD, &read); >> + if (ret == 0) { >> + return 0; >> + } else { >> + /* >> + * The ARM handler allows for returning partial lengths, >> + * but if this ever happens, it is a bug in the fastmodel >> + * implementation. The Linux fastmodel doesn't show this >> + * issue, and any Windows fastmodel bugs need to be fixed. >> + * So rather than create ugly unmaintainable partial read >> + * loops and such, just fail with an error message. >> + */ >> + printf("%s: ERROR ret %d, fd %d, len %u memp %p\n", >> + __func__, ret, fd, len, memp); >> + } >> + return ret; >> +} >> + >> +/* >> + * Open a file on the host. Mode is "r" or "rb" currently. Returns a >> +file >> + * descriptor or -1 on error. >> + */ >> +int smh_open(const char *fname, char *modestr) { >> + int ret, fd, mode; >> + struct smh_open_s { >> + const char *fname; >> + unsigned int mode; >> + unsigned int len; >> + } open; >> + >> + debug("%s: file \'%s\', mode \'%s\'\n", __func__, fname, modestr); >> + >> + ret = -1; >> + >> + /* Check the file mode */ >> + if (!(strcmp(modestr, "r"))) { >> + mode = MODE_READ; >> + } else if (!(strcmp(modestr, "rb"))) { >> + mode = MODE_READBIN; >> + } else { >> + printf("%s: ERROR mode \'%s\' not supported\n", __func__, >> + modestr); >> + return ret; >> + } >> + >> + open.fname = fname; >> + open.len = strlen(fname); >> + open.mode = mode; >> + >> + /* Open the file on the host */ >> + fd = smh_trap(SYSOPEN, &open); >> + if (fd == -1) >> + printf("%s: ERROR fd %d for file \'%s\'\n", __func__, fd, >> + fname); >> + >> + return fd; >> +} >> + >> +/* >> + * Close the file using the file descriptor */ int smh_close(int fd) { >> + int ret; >> + long fdlong; >> + >> + debug("%s: fd %d\n", __func__, fd); >> + >> + fdlong = (long)fd; >> + ret = smh_trap(SYSCLOSE, &fdlong); >> + if (ret == -1) >> + printf("%s: ERROR fd %d\n", __func__, fd); >> + >> + return ret; >> +} >> + >> +/* >> + * Get the file length from the file descriptor */ int smh_len_fd(int >> +fd) { >> + int ret; >> + long fdlong; >> + >> + debug("%s: fd %d\n", __func__, fd); >> + >> + fdlong = (long)fd; >> + ret = smh_trap(SYSFLEN, &fdlong); >> + if (ret == -1) >> + printf("%s: ERROR ret %d\n", __func__, ret); >> + >> + return ret; >> +} >> + >> +/* >> + * Get the file length from the filename */ int smh_len(const char >> +*fname) { >> + int ret, fd, len; >> + >> + debug("%s: file \'%s\'\n", __func__, fname); >> + >> + /* Open the file */ >> + fd = smh_open(fname, "rb"); >> + if (fd == -1) >> + return fd; >> + >> + /* Get the file length */ >> + len = smh_len_fd(fd); >> + >> + /* Close the file */ >> + ret = smh_close(fd); >> + if (ret == -1) >> + return ret; >> + >> + debug("%s: returning len %d\n", __func__, len); >> + >> + /* Return the file length (or -1 error indication) */ >> + return len; >> +} >> diff --git a/board/armltd/vexpress64/vexpress64.c >> b/board/armltd/vexpress64/vexpress64.c >> index 2ec3bc9..5897318 100644 >> --- a/board/armltd/vexpress64/vexpress64.c >> +++ b/board/armltd/vexpress64/vexpress64.c >> @@ -11,6 +11,7 @@ >> #include >> #include >> #include >> +#include >> >> DECLARE_GLOBAL_DATA_PTR; >> >> @@ -31,11 +32,6 @@ int dram_init(void) >> return 0; >> } >> >> -int timer_init(void) >> -{ >> - return 0; >> -} >> - >> /* >> * Board specific reset that is system reset. >> */ >> @@ -43,6 +39,101 @@ void reset_cpu(ulong addr) { } >> >> +#ifdef CONFIG_BOARD_LATE_INIT >> +int board_late_init(void) >> +{ >> +#ifdef CONFIG_SEMIHOSTING >> + /* >> + * Please refer to doc/README.semihosting for a more complete >> + * description. >> + * >> + * We require that the board include file defines these env >> variables: >> + * - kernel_name >> + * - kernel_addr_r >> + * - initrd_name >> + * - initrd_addr_r >> + * - fdt_name >> + * - fdt_addr_r >> + * >> + * For the "fdt chosen" startup macro, this code will then define: >> + * - initrd_end (based on initrd_addr_r plus actual initrd_size) >> + * >> + * We will then load the kernel, initrd, and fdt into the specified >> + * locations in memory in a similar way that the ATF fastmodel code >> + * uses semihosting calls to load other boot stages and u-boot >> itself. >> + */ >> + >> + /* Env variable strings */ >> + char *kernel_name = getenv("kernel_name"); >> + char *kernel_addr_str = getenv("kernel_addr_r"); >> + char *initrd_name = getenv("initrd_name"); >> + char *initrd_addr_str = getenv("initrd_addr_r"); >> + char *fdt_name = getenv("fdt_name"); >> + char *fdt_addr_str = getenv("fdt_addr_r"); >> + char initrd_end_str[64]; >> + >> + /* Actual addresses converted from env variables */ >> + void *kernel_addr_r; >> + void *initrd_addr_r; >> + void *fdt_addr_r; >> + >> + /* Actual initrd base and size */ >> + unsigned long initrd_base; >> + unsigned long initrd_size; >> + >> + /* Space available */ >> + int avail; >> + >> + /* Make sure the environment variables needed are set */ >> + if (!(kernel_addr_str && initrd_addr_str && fdt_addr_str)) { >> + printf("%s: Define {kernel/initrd/fdt}_addr_r\n", __func__); >> + return -1; >> + } >> + if (!(kernel_name && initrd_name && fdt_name)) { >> + printf("%s: Define {kernel/initrd/fdt}_name\n", __func__); >> + return -1; >> + } >> + >> + /* Get exact initrd_size */ >> + initrd_size = smh_len(initrd_name); >> + if (initrd_size == -1) { >> + printf("%s: Can't get file size for \'%s\'\n", __func__, >> + initrd_name); >> + return -1; >> + } >> + >> + /* Set initrd_end */ >> + initrd_base = simple_strtoul(initrd_addr_str, NULL, 16); >> + initrd_addr_r = (void *)initrd_base; >> + sprintf(initrd_end_str, "0x%lx", initrd_base + initrd_size - 1); >> + setenv("initrd_end", initrd_end_str); >> + >> + /* Load kernel to memory */ >> + fdt_addr_r = (void *)simple_strtoul(fdt_addr_str, NULL, 16); >> + kernel_addr_r = (void *)simple_strtoul(kernel_addr_str, NULL, 16); >> + >> + /* >> + * The kernel must be lower in memory than fdt and loading the >> + * kernel must not trample the fdt or vice versa. >> + */ >> + avail = fdt_addr_r - kernel_addr_r; >> + if (avail < 0) { >> + printf("%s: fdt must be after kernel\n", __func__); >> + return -1; >> + } >> + smh_load(kernel_name, kernel_addr_r, avail, 1); >> + >> + /* Load fdt to memory */ >> + smh_load(fdt_name, fdt_addr_r, 0x20000, 1); >> + >> + /* Load initrd to memory */ >> + smh_load(initrd_name, initrd_addr_r, initrd_size, 1); >> + >> +#endif /* CONFIG_SEMIHOSTING */ >> + return 0; >> +} >> +#endif /* CONFIG_BOARD_LATE_INIT */ >> + >> /* >> * Board specific ethernet initialization routine. >> */ >> diff --git a/boards.cfg b/boards.cfg >> index 69c8936..d142b10 100644 >> --- a/boards.cfg >> +++ b/boards.cfg >> @@ -44,6 +44,7 @@ >> >> ######################################################################### >> ################################## >> >> Active aarch64 armv8 - armltd >> vexpress64 vexpress_aemv8a >> vexpress_aemv8a:ARM64 >> David Feng >> +Active aarch64 armv8 - armltd >> vexpress64 vexpress_aemv8a_semi >> vexpress_aemv8a:ARM64,SEMIHOSTING,BASE_FVP >> Darwin Rambo >> Active arc arc700 - synopsys - >> axs101 - >> Alexey Brodkin >> Active arc arc700 - synopsys >> arcangel4 - >> Alexey Brodkin >> Active arc arc700 - synopsys >> arcangel4-be - >> Alexey Brodkin >> diff --git a/doc/README.semihosting b/doc/README.semihosting new file >> mode 100644 index 0000000..c999a27 >> --- /dev/null >> +++ b/doc/README.semihosting >> @@ -0,0 +1,35 @@ >> +/* >> + * Copyright 2014 Broadcom Corporation. >> + * >> + * SPDX-License-Identifier: GPL-2.0+ >> + */ >> + >> +Semihosting is ARM's way of having a real or virtual target communicate >> +with a host or host debugger for basic operations such as file I/O, >> +console I/O, etc. Please see >> +http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471c/Bgb >> jjgij.html for more information. >> + >> +For developing on armv8 virtual fastmodel platforms, semihosting is a >> +valuable tool since it allows access to image/configuration files >> +before eMMC or other NV media are available. >> + >> +For reference, the current example is enabled by setting >> +CONFIG_SEMIHOSTING for the "vexpress_aemv8a" board. >> + >> +We require that the board include file define these env variables: >> +- kernel_name e.g. "uImage" >> +- kernel_addr_r e.g. "0x80000000" >> +- initrd_name e.g. "ramdisk.img" >> +- initrd_addr_r e.g. "0x88000000" >> +- fdt_name e.g. "devtree.dtb" >> +- fdt_addr_r e.g. "0x83000000" >> + >> +Optionally, "fdt_high" and "initrd_high" can be specified as per their >> +rules for allowing or preventing copying of these images. >> + >> +For the "fdt chosen" startup macro, this code will then define: >> +- initrd_end (based on retrieving initrd_addr_r plus actual >> +initrd_size) >> + >> +We will then load the kernel, initrd, and fdt into the specified >> +locations in memory in a similar way that the ATF fastmodel code uses >> +semihosting calls to load other boot stages and u-boot itself. >> diff --git a/include/configs/vexpress_aemv8a.h >> b/include/configs/vexpress_aemv8a.h >> index e851702..96978f5 100644 >> --- a/include/configs/vexpress_aemv8a.h >> +++ b/include/configs/vexpress_aemv8a.h >> @@ -10,6 +10,14 @@ >> >> #define DEBUG >> >> +#ifdef CONFIG_BASE_FVP >> +#ifndef CONFIG_SEMIHOSTING >> +#error CONFIG_BASE_FVP requires CONFIG_SEMIHOSTING #endif #define >> +CONFIG_BOARD_LATE_INIT #define CONFIG_ARMV8_SWITCH_TO_EL1 #endif >> + >> #define CONFIG_REMAKE_ELF >> >> /*#define CONFIG_ARMV8_SWITCH_TO_EL1*/ >> @@ -28,8 +36,14 @@ >> #define CONFIG_BOOTP_VCI_STRING "U-boot.armv8.vexpress_aemv8a" >> >> /* Link Definitions */ >> +#ifdef CONFIG_BASE_FVP >> +/* ATF loads u-boot here for BASE_FVP model */ >> +#define CONFIG_SYS_TEXT_BASE 0x88000000 >> +#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + >> 0x03f00000) >> +#else >> #define CONFIG_SYS_TEXT_BASE 0x80000000 >> #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + >> 0x7fff0) >> +#endif >> >> /* Flat Device Tree Definitions */ >> #define CONFIG_OF_LIBFDT >> @@ -37,7 +51,11 @@ >> #define CONFIG_DEFAULT_DEVICE_TREE vexpress64 >> >> /* SMP Spin Table Definitions */ >> +#ifdef CONFIG_BASE_FVP >> +#define CPU_RELEASE_ADDR (CONFIG_SYS_SDRAM_BASE + 0x03f00000) >> +#else >> #define CPU_RELEASE_ADDR (CONFIG_SYS_SDRAM_BASE + 0x7fff0) >> +#endif >> >> /* CS register bases for the original memory map. */ >> #define V2M_PA_CS0 0x00000000 >> @@ -93,8 +111,13 @@ >> #define COUNTER_FREQUENCY (0x1800000) /* 24MHz */ >> >> /* Generic Interrupt Controller Definitions */ >> +#ifdef CONFIG_BASE_FVP >> +#define GICD_BASE (0x2f000000) >> +#define GICC_BASE (0x2c000000) >> +#else >> #define GICD_BASE (0x2C001000) >> #define GICC_BASE (0x2C002000) >> +#endif >> >> #define CONFIG_SYS_MEMTEST_START V2M_BASE >> #define CONFIG_SYS_MEMTEST_END (V2M_BASE + 0x80000000) >> @@ -114,7 +137,6 @@ >> #define CONFIG_CONS_INDEX 0 >> >> #define CONFIG_BAUDRATE 115200 >> -#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } >> #define CONFIG_SYS_SERIAL0 V2M_UART0 >> #define CONFIG_SYS_SERIAL1 V2M_UART1 >> >> @@ -158,17 +180,41 @@ >> #define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 >> >> /* Initial environment variables */ >> +#ifdef CONFIG_BASE_FVP >> +#define CONFIG_EXTRA_ENV_SETTINGS \ >> + "kernel_name=uImage\0" \ >> + "kernel_addr_r=0x80000000\0" \ >> + "initrd_name=ramdisk.img\0" \ >> + "initrd_addr_r=0x88000000\0" \ >> + "fdt_name=devtree.dtb\0" \ >> + "fdt_addr_r=0x83000000\0" \ >> + "fdt_high=0xffffffffffffffff\0" \ >> + "initrd_high=0xffffffffffffffff\0" >> + >> +#define CONFIG_BOOTARGS "console=ttyAMA0 earlyprintk=pl011,"\ >> + "0x1c090000 debug user_debug=31 "\ >> + "loglevel=9" >> + >> +#define CONFIG_BOOTCOMMAND "fdt addr $fdt_addr_r; fdt resize; " \ >> + "fdt chosen $initrd_addr_r $initrd_end; " \ >> + "bootm $kernel_addr_r - $fdt_addr_r" >> + >> +#define CONFIG_BOOTDELAY 1 >> + >> +#else >> + >> #define CONFIG_EXTRA_ENV_SETTINGS \ >> - "kernel_addr=0x200000\0" \ >> - "initrd_addr=0xa00000\0" \ >> + "kernel_addr_r=0x200000\0" \ >> + "initrd_addr_r=0xa00000\0" \ >> "initrd_size=0x2000000\0" \ >> - "fdt_addr=0x100000\0" \ >> + "fdt_addr_r=0x100000\0" \ >> "fdt_high=0xa0000000\0" >> >> #define CONFIG_BOOTARGS "console=ttyAMA0 >> root=/dev/ram0" >> -#define CONFIG_BOOTCOMMAND "bootm $kernel_addr " \ >> - "$initrd_addr:$initrd_size $fdt_addr" >> +#define CONFIG_BOOTCOMMAND "bootm $kernel_addr_r " \ >> + "$initrd_addr_r:$initrd_size $fdt_addr_r" >> #define CONFIG_BOOTDELAY -1 >> +#endif >> >> /* Do not preserve environment */ >> #define CONFIG_ENV_IS_NOWHERE 1 >> @@ -180,7 +226,6 @@ >> #define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \ >> sizeof(CONFIG_SYS_PROMPT) + 16) >> #define CONFIG_SYS_HUSH_PARSER >> -#define CONFIG_SYS_PROMPT_HUSH_PS2 "> " >> #define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE >> #define CONFIG_SYS_LONGHELP >> #define CONFIG_CMDLINE_EDITING 1 >> -- >> 1.7.9.5 >> >> >