Add enums, #defines, and helper functions needed for SPL images to describe
and detect IMX6 boot device.

Signed-off-by: Tim Harvey <thar...@gateworks.com>
---
 arch/arm/cpu/armv7/mx6/soc.c                | 56 +++++++++++++++++++++++++++++
 arch/arm/include/asm/arch-mx6/spl.h         | 26 ++++++++++++++
 arch/arm/include/asm/imx-common/boot_mode.h | 17 +++++++++
 3 files changed, 99 insertions(+)
 create mode 100644 arch/arm/include/asm/arch-mx6/spl.h

diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c
index 1725279..4ee62c7 100644
--- a/arch/arm/cpu/armv7/mx6/soc.c
+++ b/arch/arm/cpu/armv7/mx6/soc.c
@@ -305,6 +305,62 @@ const struct boot_mode soc_boot_modes[] = {
        {NULL,          0},
 };
 
+/* determine boot device from SRC_SBMR1 register (BOOT_CFG[4:1]) */
+enum boot_device get_boot_device(void)
+{
+       enum boot_device boot_dev;
+
+       uint soc_sbmr = readl(SRC_BASE_ADDR + 0x4); /* SRC_SBMR1 */
+
+       /* BOOT_CFG1[7:4] - see IMX6DQRM Table 8-8 */
+       switch ((soc_sbmr & 0x000000FF) >> 4) {
+        /* EIM: See 8.5.1, Table 8-9 */
+       case 0x0:
+               /* BOOT_CFG1[3]: NOR/OneNAND Selection */
+               if ((soc_sbmr & 0x00000008) >> 3)
+                       boot_dev = MX6_ONE_NAND_BOOT;
+               else
+                       boot_dev = MX6_WEIM_NOR_BOOT;
+               break;
+       /* SATA: See 8.5.4, Table 8-20 */
+       case 0x2:
+               boot_dev = MX6_SATA_BOOT;
+               break;
+       /* Serial ROM: See 8.5.5.1, Table 8-22 */
+       case 0x3:
+               /* BOOT_CFG4[2:0] */
+               switch ((soc_sbmr & 0x07000000) >> 24) {
+               case 0x0 ... 0x4:
+                       boot_dev = MX6_SPI_NOR_BOOT;
+                       break;
+               case 0x5 ... 0x7:
+                       boot_dev = MX6_I2C_BOOT;
+                       break;
+               }
+               break;
+       /* SD/eSD: 8.5.3, Table 8-15  */
+       case 0x4:
+       case 0x5:
+               boot_dev = MX6_SD_BOOT;
+               break;
+       /* MMC/eMMC: 8.5.3 */
+       case 0x6:
+       case 0x7:
+               boot_dev = MX6_MMC_BOOT;
+               break;
+       /* NAND Flash: 8.5.2 */
+       case 0x8 ... 0xf:
+               boot_dev = MX6_NAND_BOOT;
+               break;
+       default:
+               boot_dev = MX6_UNKNOWN_BOOT;
+               break;
+       }
+
+       return boot_dev;
+}
+
+
 void s_init(void)
 {
        struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
diff --git a/arch/arm/include/asm/arch-mx6/spl.h 
b/arch/arm/include/asm/arch-mx6/spl.h
new file mode 100644
index 0000000..5611c71
--- /dev/null
+++ b/arch/arm/include/asm/arch-mx6/spl.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2013 TechNexion Ltd.
+ *
+ * Author: Richard Hu <linux...@technexion.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ */
+
+#ifndef __ASM_ARCH_SPL_H__
+#define __ASM_ARCH_SPL_H__
+
+#define BOOT_DEVICE_MMC1       0
+#define BOOT_DEVICE_MMC2       1
+#define BOOT_DEVICE_MMC2_2     2
+#define BOOT_DEVICE_NAND       3
+#define BOOT_DEVICE_SATA       4
+#define BOOT_DEVICE_USBETH     5
+#define BOOT_DEVICE_NONE       6
+
+#endif /* __ASM_ARCH_SPL_H__ */
diff --git a/arch/arm/include/asm/imx-common/boot_mode.h 
b/arch/arm/include/asm/imx-common/boot_mode.h
index de0205c..3686367 100644
--- a/arch/arm/include/asm/imx-common/boot_mode.h
+++ b/arch/arm/include/asm/imx-common/boot_mode.h
@@ -17,4 +17,21 @@ struct boot_mode {
 void add_board_boot_modes(const struct boot_mode *p);
 void boot_mode_apply(unsigned cfg_val);
 extern const struct boot_mode soc_boot_modes[];
+
+/* boot devices */
+enum boot_device {
+       MX6_SD_BOOT,
+       MX6_MMC_BOOT,
+       MX6_NAND_BOOT,
+       MX6_SATA_BOOT,
+       MX6_WEIM_NOR_BOOT,
+       MX6_ONE_NAND_BOOT,
+       MX6_PATA_BOOT,
+       MX6_I2C_BOOT,
+       MX6_SPI_NOR_BOOT,
+       MX6_UNKNOWN_BOOT,
+       MX6_BOOT_DEV_NUM = MX6_UNKNOWN_BOOT,
+};
+enum boot_device get_boot_device(void);
+
 #endif
-- 
1.8.3.2

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to