diff options
| -rw-r--r-- | board/bf537-stamp/bf537-stamp.c | 45 | ||||
| -rw-r--r-- | common/Makefile | 1 | ||||
| -rw-r--r-- | common/cmd_bootldr.c | 64 | 
3 files changed, 65 insertions, 45 deletions
| diff --git a/board/bf537-stamp/bf537-stamp.c b/board/bf537-stamp/bf537-stamp.c index d279817bb..e36a1b6e1 100644 --- a/board/bf537-stamp/bf537-stamp.c +++ b/board/bf537-stamp/bf537-stamp.c @@ -54,51 +54,6 @@ DECLARE_GLOBAL_DATA_PTR;  #define POST_WORD_ADDR 0xFF903FFC -/* - * the bootldr command loads an address, checks to see if there - *   is a Boot stream that the on-chip BOOTROM can understand, - *   and loads it via the BOOTROM Callback. It is possible - *   to also add booting from SPI, or TWI, but this function does - *   not currently support that. - */ -int do_bootldr(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) -{ -	ulong addr, entry; -	ulong *data; - -	/* Get the address */ -	if (argc < 2) { -		addr = load_addr; -	} else { -		addr = simple_strtoul(argv[1], NULL, 16); -	} - -	/* Check if it is a LDR file */ -	data = (ulong *) addr; -	if (*data == 0xFF800060 || *data == 0xFF800040 || *data == 0xFF800020) { -		/* We want to boot from FLASH or SDRAM */ -		entry = _BOOTROM_BOOT_DXE_FLASH; -		printf("## Booting ldr image at 0x%08lx ...\n", addr); -		if (icache_status()) -			icache_disable(); -		if (dcache_status()) -			dcache_disable(); - -	      __asm__("R7=%[a];\n" "P0=%[b];\n" "JUMP (P0);\n": -	      :[a] "d"(addr),[b] "a"(entry) -	      :"R7", "P0"); - -	} else { -		printf("## No ldr image at address 0x%08lx\n", addr); -	} - -	return 0; -} - -U_BOOT_CMD(bootldr, 2, 0, do_bootldr, -	   "bootldr - boot ldr image from memory\n", -	   "[addr]\n         - boot ldr image stored in memory\n"); -  int checkboard(void)  {  #if (BFIN_CPU == ADSP_BF534) diff --git a/common/Makefile b/common/Makefile index a88d1ef53..1244e0b62 100644 --- a/common/Makefile +++ b/common/Makefile @@ -37,6 +37,7 @@ COBJS-$(CONFIG_CMD_BDI) += cmd_bdinfo.o  COBJS-$(CONFIG_CMD_BEDBUG) += cmd_bedbug.o  COBJS-$(CONFIG_CMD_BMP) += cmd_bmp.o  COBJS-y += cmd_boot.o +COBJS-$(CONFIG_CMD_BOOTLDR) += cmd_bootldr.o  COBJS-y += cmd_bootm.o  COBJS-$(CONFIG_CMD_CACHE) += cmd_cache.o  COBJS-$(CONFIG_CMD_CONSOLE) += cmd_console.o diff --git a/common/cmd_bootldr.c b/common/cmd_bootldr.c new file mode 100644 index 000000000..e6474aab2 --- /dev/null +++ b/common/cmd_bootldr.c @@ -0,0 +1,64 @@ +/* + * U-boot - bootldr.c + * + * Copyright (c) 2005-2008 Analog Devices Inc. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * Licensed under the GPL-2 or later. + */ + +#include <config.h> +#include <common.h> +#include <command.h> + +#include <asm/blackfin.h> +#include <asm/mach-common/bits/bootrom.h> + +/* + * the bootldr command loads an address, checks to see if there + *   is a Boot stream that the on-chip BOOTROM can understand, + *   and loads it via the BOOTROM Callback. It is possible + *   to also add booting from SPI, or TWI, but this function does + *   not currently support that. + */ + +int do_bootldr(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ +	void *addr; +	uint32_t *data; + +	/* Get the address */ +	if (argc < 2) +		addr = (void *)load_addr; +	else +		addr = (void *)simple_strtoul(argv[1], NULL, 16); + +	/* Check if it is a LDR file */ +	data = addr; +#if defined(__ADSPBF54x__) || defined(__ADSPBF52x__) +	if ((*data & 0xFF000000) == 0xAD000000 && data[2] == 0x00000000) { +#else +	if (*data == 0xFF800060 || *data == 0xFF800040 || *data == 0xFF800020) { +#endif +		/* We want to boot from FLASH or SDRAM */ +		printf("## Booting ldr image at 0x%p ...\n", addr); + +		icache_disable(); +		dcache_disable(); + +		__asm__( +			"jump (%1);" +			: +			: "q7" (addr), "a" (_BOOTROM_MEMBOOT)); +	} else +		printf("## No ldr image at address 0x%p\n", addr); + +	return 0; +} + +U_BOOT_CMD(bootldr, 2, 0, do_bootldr, +	"bootldr - boot ldr image from memory\n", +	"[addr]\n" +	"    - boot ldr image stored in memory\n"); |