]> git.sur5r.net Git - u-boot/commitdiff
omap4: Definitions for SYS_BOOT-based fallback boot device selection
authorPaul Kocialkowski <contact@paulk.fr>
Wed, 15 Jul 2015 14:02:25 +0000 (16:02 +0200)
committerTom Rini <trini@konsulko.com>
Mon, 27 Jul 2015 19:02:08 +0000 (15:02 -0400)
This introduces code to read the value of the SYS_BOOT pins on the OMAP4, as
well as the memory-preferred scheme for the interpretation of each value.

Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
arch/arm/cpu/armv7/omap4/Makefile
arch/arm/cpu/armv7/omap4/boot.c [new file with mode: 0644]
arch/arm/cpu/armv7/omap4/prcm-regs.c

index 76a032a2d96684048170533a7b3f4327ec42f520..564f1f632f328e8a6e429fb4940065877bc2910c 100644 (file)
@@ -5,6 +5,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
+obj-y  += boot.o
 obj-y  += sdram_elpida.o
 obj-y  += hwinit.o
 obj-y  += emif.o
diff --git a/arch/arm/cpu/armv7/omap4/boot.c b/arch/arm/cpu/armv7/omap4/boot.c
new file mode 100644 (file)
index 0000000..4b5aa77
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * OMAP4 boot
+ *
+ * Copyright (C) 2015 Paul Kocialkowski <contact@paulk.fr>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/omap_common.h>
+#include <spl.h>
+
+static u32 boot_devices[] = {
+       BOOT_DEVICE_MMC2,
+       BOOT_DEVICE_XIP,
+       BOOT_DEVICE_XIPWAIT,
+       BOOT_DEVICE_NAND,
+       BOOT_DEVICE_XIPWAIT,
+       BOOT_DEVICE_MMC1,
+       BOOT_DEVICE_ONENAND,
+       BOOT_DEVICE_ONENAND,
+       BOOT_DEVICE_MMC2,
+       BOOT_DEVICE_ONENAND,
+       BOOT_DEVICE_XIPWAIT,
+       BOOT_DEVICE_NAND,
+       BOOT_DEVICE_NAND,
+       BOOT_DEVICE_MMC1,
+       BOOT_DEVICE_ONENAND,
+       BOOT_DEVICE_MMC2,
+       BOOT_DEVICE_XIP,
+       BOOT_DEVICE_XIPWAIT,
+       BOOT_DEVICE_NAND,
+       BOOT_DEVICE_MMC1,
+       BOOT_DEVICE_MMC1,
+       BOOT_DEVICE_ONENAND,
+       BOOT_DEVICE_MMC2,
+       BOOT_DEVICE_XIP,
+       BOOT_DEVICE_MMC2_2,
+       BOOT_DEVICE_NAND,
+       BOOT_DEVICE_MMC2_2,
+       BOOT_DEVICE_MMC1,
+       BOOT_DEVICE_MMC2_2,
+       BOOT_DEVICE_MMC2_2,
+       BOOT_DEVICE_NONE,
+       BOOT_DEVICE_XIPWAIT,
+};
+
+u32 omap_sys_boot_device(void)
+{
+       u32 sys_boot;
+
+       /* Grab the first 5 bits of the status register for SYS_BOOT. */
+       sys_boot = readl((u32 *) (*ctrl)->control_status) & ((1 << 5) - 1);
+
+       if (sys_boot >= (sizeof(boot_devices) / sizeof(u32)))
+               return BOOT_DEVICE_NONE;
+
+       return boot_devices[sys_boot];
+}
index 1ed146b44538c57ab57d569cc0215853a4761bf1..8698ec7a486d07d98d15456184b17c6c93225467 100644 (file)
@@ -279,6 +279,7 @@ struct prcm_regs const omap4_prcm = {
 };
 
 struct omap_sys_ctrl_regs const omap4_ctrl = {
+       .control_status                         = 0x4A0022C4,
        .control_id_code                        = 0x4A002204,
        .control_std_fuse_opp_bgap              = 0x4a002260,
        .control_status                         = 0x4a0022c4,