Blackfin: new spibootldr command
authorMike Frysinger <vapier@gentoo.org>
Thu, 27 Nov 2008 21:50:32 +0000 (16:50 -0500)
committerMike Frysinger <vapier@gentoo.org>
Mon, 15 Jun 2009 00:01:04 +0000 (20:01 -0400)
Newer Blackfin parts can an on-chip ROM that can boot LDRs over SPI flashes,
so add a new 'spibootldr' command to take advantage of it.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
common/Makefile
common/cmd_spibootldr.c [new file with mode: 0644]
include/asm-blackfin/mach-common/bits/bootrom.h
include/configs/bfin_adi_common.h

index ee0cb33aca31371eb00592e1de350d5b7020eb33..c8e5d26104399fb4ca3ee7e6c2536c3c8c2ba65f 100644 (file)
@@ -133,6 +133,7 @@ COBJS-$(CONFIG_CMD_SF) += cmd_sf.o
 COBJS-$(CONFIG_CMD_SCSI) += cmd_scsi.o
 COBJS-$(CONFIG_CMD_SETEXPR) += cmd_setexpr.o
 COBJS-$(CONFIG_CMD_SPI) += cmd_spi.o
+COBJS-$(CONFIG_CMD_SPIBOOTLDR) += cmd_spibootldr.o
 COBJS-$(CONFIG_CMD_STRINGS) += cmd_strings.o
 COBJS-$(CONFIG_CMD_TERMINAL) += cmd_terminal.o
 COBJS-$(CONFIG_CMD_UBI) += cmd_ubi.o
diff --git a/common/cmd_spibootldr.c b/common/cmd_spibootldr.c
new file mode 100644 (file)
index 0000000..d29ed2b
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * U-boot - spibootldr.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 <common.h>
+#include <command.h>
+
+#include <asm/blackfin.h>
+#include <asm/mach-common/bits/bootrom.h>
+
+int do_spibootldr(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       s32 addr;
+
+       /* Get the address */
+       if (argc < 2)
+               addr = 0;
+       else
+               addr = simple_strtoul(argv[1], NULL, 16);
+
+       printf("## Booting ldr image at SPI offset 0x%x ...\n", addr);
+
+       return bfrom_SpiBoot(addr, BFLAG_PERIPHERAL | 4, 0, NULL);
+}
+
+U_BOOT_CMD(spibootldr, 2, 0, do_spibootldr,
+       "boot ldr image from spi",
+       "[offset]\n"
+       "    - boot ldr image stored at offset into spi\n");
index fb97ff81b3b3fccefd3fcc0ee4464b88f5ab97f2..f537e93f701a751a1f5d9bdce96126d93d3b9f5d 100644 (file)
@@ -200,6 +200,33 @@ typedef struct ADI_BOOT_DATA {
        int32_t dLogByteCount;
 } ADI_BOOT_DATA;
 
+typedef void ADI_BOOT_HOOK_FUNC (ADI_BOOT_DATA *);
+
+#ifndef _BOOTROM_MEMBOOT
+#define _BOOTROM_MEMBOOT 0
+#endif
+static uint32_t (* const bfrom_MemBoot)(void *pBootStream, int32_t dFlags, int32_t dBlockCount, ADI_BOOT_HOOK_FUNC *pCallHook) = (void *)_BOOTROM_MEMBOOT;
+
+#ifndef _BOOTROM_TWIBOOT
+#define _BOOTROM_TWIBOOT 0
+#endif
+static uint32_t (* const bfrom_TwiBoot)(int32_t dTwiAddress, int32_t dFlags, int32_t dBlockCount, ADI_BOOT_HOOK_FUNC *pCallHook) = (void *)_BOOTROM_TWIBOOT;
+
+#ifndef _BOOTROM_SPIBOOT
+#define _BOOTROM_SPIBOOT 0
+#endif
+static uint32_t (* const bfrom_SpiBoot)(int32_t dSpiAddress, int32_t dFlags, int32_t dBlockCount, ADI_BOOT_HOOK_FUNC *pCallHook) = (void *)_BOOTROM_SPIBOOT;
+
+#ifndef _BOOTROM_OTPBOOT
+#define _BOOTROM_OTPBOOT 0
+#endif
+static uint32_t (* const bfrom_OtpBoot)(int32_t dOtpAddress, int32_t dFlags, int32_t dBlockCount, ADI_BOOT_HOOK_FUNC *pCallHook) = (void *)_BOOTROM_OTPBOOT;
+
+#ifndef _BOOTROM_NANDBOOT
+#define _BOOTROM_NANDBOOT 0
+#endif
+static uint32_t (* const bfrom_NandBoot)(int32_t dNandAddress, int32_t dFlags, int32_t dBlockCount, ADI_BOOT_HOOK_FUNC *pCallHook) = (void *)_BOOTROM_NANDBOOT;
+
 #endif /* __ASSEMBLY__ */
 
 /* Bit defines for ADI_BOOT_DATA->dFlags */
index e0be07b477ede93dd3ef79ed2114a8365fdbb958..a581924d278dcc973c98f9011c44f09e1da98952 100644 (file)
@@ -71,6 +71,7 @@
 # define CONFIG_CMD_STRINGS
 # if defined(__ADSPBF51x__) || defined(__ADSPBF52x__) || defined(__ADSPBF54x__)
 #  define CONFIG_CMD_OTP
+#  define CONFIG_CMD_SPIBOOTLDR
 # endif
 #endif