Hi Darwin, > -----Original Message----- > From: Darwin Rambo [mailto:dra...@broadcom.com] > Sent: Tuesday, March 25, 2014 12:46 AM > To: u-boot@lists.denx.de > Cc: Darwin Rambo; Albert Aribaud; Tom Rini; feng...@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 <achin.gu...@arm.com> 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 <alexey.brod...@synopsys.com> 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 <abrod...@synopsys.com Regards, Bhupesh > Signed-off-by: Darwin Rambo <dra...@broadcom.com> > --- > > 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 <common.h> > +#include <asm/semihosting.h> > + > +#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 <netdev.h> > #include <asm/io.h> > #include <linux/compiler.h> > +#include <asm/semihosting.h> > > 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 <feng...@phytium.com.cn> > +Active aarch64 armv8 - armltd > vexpress64 vexpress_aemv8a_semi > vexpress_aemv8a:ARM64,SEMIHOSTING,BASE_FVP > Darwin Rambo <dra...@broadcom.com> > Active arc arc700 - synopsys - > axs101 - > Alexey Brodkin <abrod...@synopsys.com> > Active arc arc700 - synopsys <none> > arcangel4 - > Alexey Brodkin <abrod...@synopsys.com> > Active arc arc700 - synopsys <none> > arcangel4-be - > Alexey Brodkin <abrod...@synopsys.com> > 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 > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot