arm: mvebu: Add runtime boot-device detection
authorStefan Roese <sr@denx.de>
Thu, 7 Jan 2016 13:09:09 +0000 (14:09 +0100)
committerStefan Roese <sr@denx.de>
Thu, 14 Jan 2016 13:08:59 +0000 (14:08 +0100)
This patch adds runtime boot-device detection to SPL U-Boot.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Luka Perkov <luka.perkov@sartura.hr>
Cc: Dirk Eibach <dirk.eibach@gdsys.cc>
Cc: Phil Sutter <phil@nwl.cc>
Cc: Kevin Smith <kevin.smith@elecsyscorp.com>
arch/arm/mach-mvebu/include/mach/soc.h
arch/arm/mach-mvebu/spl.c

index f2cbd7160295be2c5dfc745dd0a7e651fa6fb7fb..e27a36db1c688915df3434b0c2e10c983c68c452 100644 (file)
 #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
 #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 */
index 832df0a0049c3b4bf1fb3be204b5baa49ae96aae..778996eff54b78e3f2d85325a7a91246b46e0649 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014-2015 Stefan Roese <sr@denx.de>
+ * Copyright (C) 2014-2016 Stefan Roese <sr@denx.de>
  *
  * SPDX-License-Identifier:    GPL-2.0+
  */
 
 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