This patch adds runtime boot-device detection to SPL U-Boot.

Signed-off-by: Stefan Roese <[email protected]>
Cc: Luka Perkov <[email protected]>
Cc: Dirk Eibach <[email protected]>
Cc: Phil Sutter <[email protected]>
Cc: Kevin Smith <[email protected]>
---
 arch/arm/mach-mvebu/include/mach/soc.h | 16 ++++++++++++++++
 arch/arm/mach-mvebu/spl.c              | 30 +++++++++++++++++++++++-------
 2 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-mvebu/include/mach/soc.h 
b/arch/arm/mach-mvebu/include/mach/soc.h
index dbb96e0..0da313d 100644
--- a/arch/arm/mach-mvebu/include/mach/soc.h
+++ b/arch/arm/mach-mvebu/include/mach/soc.h
@@ -100,14 +100,24 @@
 #if defined(CONFIG_ARMADA_38X)
 /* SAR values for Armada 38x */
 #define CONFIG_SAR_REG         (MVEBU_REGISTER(0x18600))
+
 #define SAR_CPU_FREQ_OFFS      10
 #define SAR_CPU_FREQ_MASK      (0x1f << SAR_CPU_FREQ_OFFS)
 #define SAR_BOOT_DEVICE_OFFS   4
 #define SAR_BOOT_DEVICE_MASK   (0x1f << SAR_BOOT_DEVICE_OFFS)
+
+#define BOOT_DEV_SEL_OFFS      4
+#define BOOT_DEV_SEL_MASK      (0x1f << BOOT_DEV_SEL_OFFS)
+
+#define BOOT_FROM_UART         0x28
+#define BOOT_FROM_SPI          0x32
+#define BOOT_FROM_MMC          0x30
+#define BOOT_FROM_MMC_ALT      0x31
 #else
 /* SAR values for Armada XP */
 #define CONFIG_SAR_REG         (MVEBU_REGISTER(0x18230))
 #define CONFIG_SAR2_REG                (MVEBU_REGISTER(0x18234))
+
 #define SAR_CPU_FREQ_OFFS      21
 #define SAR_CPU_FREQ_MASK      (0x7 << SAR_CPU_FREQ_OFFS)
 #define SAR_FFC_FREQ_OFFS      24
@@ -116,6 +126,12 @@
 #define SAR2_CPU_FREQ_MASK     (0x1 << SAR2_CPU_FREQ_OFFS)
 #define SAR_BOOT_DEVICE_OFFS   5
 #define SAR_BOOT_DEVICE_MASK   (0xf << SAR_BOOT_DEVICE_OFFS)
+
+#define BOOT_DEV_SEL_OFFS      5
+#define BOOT_DEV_SEL_MASK      (0xf << BOOT_DEV_SEL_OFFS)
+
+#define BOOT_FROM_UART         0x2
+#define BOOT_FROM_SPI          0x3
 #endif
 
 #endif /* _MVEBU_SOC_H */
diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
index 832df0a..778996e 100644
--- a/arch/arm/mach-mvebu/spl.c
+++ b/arch/arm/mach-mvebu/spl.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014-2015 Stefan Roese <[email protected]>
+ * Copyright (C) 2014-2016 Stefan Roese <[email protected]>
  *
  * SPDX-License-Identifier:    GPL-2.0+
  */
@@ -15,14 +15,30 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-u32 spl_boot_device(void)
+static u32 get_boot_device(void)
 {
-#if defined(CONFIG_SPL_SPI_FLASH_SUPPORT)
-       return BOOT_DEVICE_SPI;
-#endif
-#if defined(CONFIG_SPL_MMC_SUPPORT)
-       return BOOT_DEVICE_MMC1;
+       u32 val;
+       u32 boot_device;
+
+       val = readl(CONFIG_SAR_REG);    /* SAR - Sample At Reset */
+       boot_device = (val & BOOT_DEV_SEL_MASK) >> BOOT_DEV_SEL_OFFS;
+       switch (boot_device) {
+#ifdef CONFIG_SPL_MMC_SUPPORT
+       case BOOT_FROM_MMC:
+       case BOOT_FROM_MMC_ALT:
+               return BOOT_DEVICE_MMC1;
 #endif
+       case BOOT_FROM_UART:
+               return BOOT_DEVICE_UART;
+       case BOOT_FROM_SPI:
+       default:
+               return BOOT_DEVICE_SPI;
+       };
+}
+
+u32 spl_boot_device(void)
+{
+       return get_boot_device();
 }
 
 #ifdef CONFIG_SPL_MMC_SUPPORT
-- 
2.6.4

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to