ARM: at91: sama5: Extend boot device autodetection
authorMarek Vasut <marex@denx.de>
Sat, 14 May 2016 21:43:01 +0000 (23:43 +0200)
committerAndreas Bießmann <andreas@biessmann.org>
Sun, 12 Jun 2016 21:49:38 +0000 (23:49 +0200)
Extend the boot device autodetection from SAMA5D2 only to the entire
SAMA5Dx family of microcontrollers.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Andreas Bießmann <andreas.devel@googlemail.com>
Cc: Wenyou Yang <wenyou.yang@atmel.com>
Reviewed-by: Andreas Bießmann <andreas@biessmann.org>
[minor compile fix for SAMA5D2]
Signed-off-by: Andreas Bießmann <andreas@biessmann.org>
arch/arm/mach-at91/Makefile
arch/arm/mach-at91/include/mach/sama5_boot.h [new file with mode: 0644]
arch/arm/mach-at91/include/mach/sama5d2.h
arch/arm/mach-at91/spl.c

index d2abf31..a908004 100644 (file)
@@ -10,8 +10,8 @@ obj-$(CONFIG_AT91SAM9M10G45) += mpddrc.o spl_at91.o
 obj-$(CONFIG_AT91SAM9N12) += mpddrc.o spl_at91.o
 obj-$(CONFIG_AT91SAM9X5) += mpddrc.o spl_at91.o
 obj-$(CONFIG_SAMA5D2) += bootparams_atmel.o mpddrc.o spl_atmel.o matrix.o atmel_sfr.o
-obj-$(CONFIG_SAMA5D3) += mpddrc.o spl_atmel.o
-obj-$(CONFIG_SAMA5D4) += mpddrc.o spl_atmel.o matrix.o atmel_sfr.o
+obj-$(CONFIG_SAMA5D3) += bootparams_atmel.o mpddrc.o spl_atmel.o
+obj-$(CONFIG_SAMA5D4) += bootparams_atmel.o mpddrc.o spl_atmel.o matrix.o atmel_sfr.o
 obj-y += spl.o
 endif
 
diff --git a/arch/arm/mach-at91/include/mach/sama5_boot.h b/arch/arm/mach-at91/include/mach/sama5_boot.h
new file mode 100644 (file)
index 0000000..8911a44
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Boot mode definitions for the SAMA5Dx SoC
+ *
+ * Copyright (C) 2016 Marek Vasut <marex@denx.de>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __SAMA5_BOOT_H
+#define __SAMA5_BOOT_H
+
+/* Boot modes stored by BootROM in r4 */
+#define ATMEL_SAMA5_BOOT_FROM_OFF      0
+#define ATMEL_SAMA5_BOOT_FROM_MASK     0xf
+#define ATMEL_SAMA5_BOOT_FROM_SPI      (0 << 0)
+#define ATMEL_SAMA5_BOOT_FROM_MCI      (1 << 0)
+#define ATMEL_SAMA5_BOOT_FROM_SMC      (2 << 0)
+#define ATMEL_SAMA5_BOOT_FROM_TWI      (3 << 0)
+#define ATMEL_SAMA5_BOOT_FROM_QSPI     (4 << 0)
+#define ATMEL_SAMA5_BOOT_FROM_SAMBA    (7 << 0)
+
+#define ATMEL_SAMA5_BOOT_DEV_ID_OFF    4
+#define ATMEL_SAMA5_BOOT_DEV_ID_MASK   0xf
+
+#endif /* __SAMA5_BOOT_H */
index ee841da..25c8541 100644 (file)
 /* No PMECC Galois table in ROM */
 #define NO_GALOIS_TABLE_IN_ROM
 
-/* Boot modes stored by BootROM in r4 */
-#define ATMEL_SAMA5D2_BOOT_FROM_OFF    0
-#define ATMEL_SAMA5D2_BOOT_FROM_MASK   0xf
-#define ATMEL_SAMA5D2_BOOT_FROM_SPI    (0 << 0)
-#define ATMEL_SAMA5D2_BOOT_FROM_MCI    (1 << 0)
-#define ATMEL_SAMA5D2_BOOT_FROM_SMC    (2 << 0)
-#define ATMEL_SAMA5D2_BOOT_FROM_TWI    (3 << 0)
-#define ATMEL_SAMA5D2_BOOT_FROM_QSPI   (4 << 0)
-
-#define ATMEL_SAMA5D2_BOOT_DEV_ID_OFF  4
-#define ATMEL_SAMA5D2_BOOT_DEV_ID_MASK 0xf
-
 #ifndef __ASSEMBLY__
 unsigned int get_chip_id(void);
 unsigned int get_extension_chip_id(void);
index c4ed224..f255b59 100644 (file)
@@ -23,20 +23,22 @@ void at91_disable_wdt(void)
 }
 #endif
 
-#if defined(CONFIG_SAMA5D2)
+#if defined(CONFIG_SAMA5D2) || defined(CONFIG_SAMA5D3) || \
+    defined(CONFIG_SAMA5D4)
+#include <asm/arch/sama5_boot.h>
 struct {
        u32     r4;
 } bootrom_stash __attribute__((section(".data")));
 
 u32 spl_boot_device(void)
 {
-       u32 dev = (bootrom_stash.r4 >> ATMEL_SAMA5D2_BOOT_FROM_OFF) &
-                 ATMEL_SAMA5D2_BOOT_FROM_MASK;
-       u32 off = (bootrom_stash.r4 >> ATMEL_SAMA5D2_BOOT_DEV_ID_OFF) &
-                 ATMEL_SAMA5D2_BOOT_DEV_ID_MASK;
+       u32 dev = (bootrom_stash.r4 >> ATMEL_SAMA5_BOOT_FROM_OFF) &
+                 ATMEL_SAMA5_BOOT_FROM_MASK;
+       u32 off = (bootrom_stash.r4 >> ATMEL_SAMA5_BOOT_DEV_ID_OFF) &
+                 ATMEL_SAMA5_BOOT_DEV_ID_MASK;
 
 #if defined(CONFIG_SYS_USE_MMC)
-       if (dev == ATMEL_SAMA5D2_BOOT_FROM_MCI) {
+       if (dev == ATMEL_SAMA5_BOOT_FROM_MCI) {
                if (off == 0)
                        return BOOT_DEVICE_MMC1;
                if (off == 1)
@@ -47,10 +49,13 @@ u32 spl_boot_device(void)
 #endif
 
 #if defined(CONFIG_SYS_USE_SERIALFLASH) || defined(CONFIG_SYS_USE_SPIFLASH)
-       if (dev == ATMEL_SAMA5D2_BOOT_FROM_SPI)
+       if (dev == ATMEL_SAMA5_BOOT_FROM_SPI)
                return BOOT_DEVICE_SPI;
 #endif
 
+       if (dev == ATMEL_SAMA5_BOOT_FROM_SAMBA)
+               return BOOT_DEVICE_USB;
+
        printf("ERROR: SMC/TWI/QSPI boot device not supported!\n"
               "       Boot device %i, controller number %i\n", dev, off);