[PATCH 1/4] ARM: imx: Add bmode support for iMX7

Marek Vasut marex at denx.de
Wed Aug 5 15:34:04 CEST 2020


Add the basic differentiation between i.MX6 and i.MX7 into the bmode
command, the mechanism really works almost the same on both platforms.

Signed-off-by: Marek Vasut <marex at denx.de>
Cc: Fabio Estevam <festevam at gmail.com>
Cc: NXP i.MX U-Boot Team <uboot-imx at nxp.com>
Cc: Peng Fan <peng.fan at nxp.com>
Cc: Stefano Babic <sbabic at denx.de>
---
 arch/arm/include/asm/mach-imx/sys_proto.h |  6 +++++-
 arch/arm/mach-imx/Kconfig                 |  2 +-
 arch/arm/mach-imx/init.c                  | 12 +++++++++---
 arch/arm/mach-imx/mx7/soc.c               |  8 ++++++++
 4 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/arch/arm/include/asm/mach-imx/sys_proto.h b/arch/arm/include/asm/mach-imx/sys_proto.h
index ab94024c9b..2d18b1f56b 100644
--- a/arch/arm/include/asm/mach-imx/sys_proto.h
+++ b/arch/arm/include/asm/mach-imx/sys_proto.h
@@ -78,7 +78,7 @@ struct bd_info;
 #define is_imx8qxp() (is_cpu_type(MXC_CPU_IMX8QXP))
 
 #ifdef CONFIG_MX6
-#define IMX6_SRC_GPR10_BMODE		BIT(28)
+#define IMX6_SRC_GPR10_BMODE			BIT(28)
 
 #define IMX6_BMODE_MASK			GENMASK(7, 0)
 #define	IMX6_BMODE_SHIFT		4
@@ -126,6 +126,10 @@ void gpr_init(void);
 
 #endif /* CONFIG_MX6 */
 
+#ifdef CONFIG_MX7
+#define IMX7_SRC_GPR10_BMODE			BIT(28)
+#endif
+
 /* address translation table */
 struct rproc_att {
 	u32 da; /* device address (From Cortex M4 view) */
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index 1531d09f3b..8f64e23195 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -62,7 +62,7 @@ config CSF_SIZE
 config CMD_BMODE
 	bool "Support the 'bmode' command"
 	default y
-	depends on ARCH_MX6 || ARCH_MX5
+	depends on ARCH_MX7 || ARCH_MX6 || ARCH_MX5
 	help
 	  This enables the 'bmode' (bootmode) command for forcing
 	  a boot from specific media.
diff --git a/arch/arm/mach-imx/init.c b/arch/arm/mach-imx/init.c
index 693b724429..e30d63b896 100644
--- a/arch/arm/mach-imx/init.c
+++ b/arch/arm/mach-imx/init.c
@@ -103,14 +103,20 @@ void init_src(void)
 #ifdef CONFIG_CMD_BMODE
 void boot_mode_apply(unsigned cfg_val)
 {
-	unsigned reg;
+#ifdef CONFIG_MX6
+	const u32 bmode = IMX6_SRC_GPR10_BMODE;
+#elif CONFIG_MX7
+	const u32 bmode = IMX7_SRC_GPR10_BMODE;
+#endif
 	struct src *psrc = (struct src *)SRC_BASE_ADDR;
+	unsigned reg;
+
 	writel(cfg_val, &psrc->gpr9);
 	reg = readl(&psrc->gpr10);
 	if (cfg_val)
-		reg |= IMX6_SRC_GPR10_BMODE;
+		reg |= bmode;
 	else
-		reg &= ~IMX6_SRC_GPR10_BMODE;
+		reg &= ~bmode;
 	writel(reg, &psrc->gpr10);
 }
 #endif
diff --git a/arch/arm/mach-imx/mx7/soc.c b/arch/arm/mach-imx/mx7/soc.c
index 8db672fb05..2698ae623e 100644
--- a/arch/arm/mach-imx/mx7/soc.c
+++ b/arch/arm/mach-imx/mx7/soc.c
@@ -13,6 +13,7 @@
 #include <asm/mach-imx/hab.h>
 #include <asm/mach-imx/rdc-sema.h>
 #include <asm/arch/imx-rdc.h>
+#include <asm/mach-imx/boot_mode.h>
 #include <asm/arch/crm_regs.h>
 #include <dm.h>
 #include <env.h>
@@ -411,6 +412,13 @@ void s_init(void)
 	return;
 }
 
+#ifndef CONFIG_SPL_BUILD
+const struct boot_mode soc_boot_modes[] = {
+	{"normal",	MAKE_CFGVAL(0x00, 0x00, 0x00, 0x00)},
+	{NULL,		0},
+};
+#endif
+
 void reset_misc(void)
 {
 #ifndef CONFIG_SPL_BUILD
-- 
2.27.0



More information about the U-Boot mailing list