diff options
| author | Marek Vasut <marex@denx.de> | 2020-08-05 15:34:04 +0200 | 
|---|---|---|
| committer | Stefano Babic <sbabic@denx.de> | 2020-08-17 17:53:55 +0200 | 
| commit | c72372d38cb9d625f32f32e95e8fe821e5e2734b (patch) | |
| tree | e7fef75fd317c8e17076870ebd2dd604deba0727 | |
| parent | 789bfb52668ee609b2043de645e2f94bbd24fd1f (diff) | |
ARM: imx: Add bmode support for iMX7
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@denx.de>
Cc: Fabio Estevam <festevam@gmail.com>
Cc: NXP i.MX U-Boot Team <uboot-imx@nxp.com>
Cc: Peng Fan <peng.fan@nxp.com>
Cc: Stefano Babic <sbabic@denx.de>
| -rw-r--r-- | arch/arm/include/asm/mach-imx/sys_proto.h | 6 | ||||
| -rw-r--r-- | arch/arm/mach-imx/Kconfig | 2 | ||||
| -rw-r--r-- | arch/arm/mach-imx/init.c | 12 | ||||
| -rw-r--r-- | 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 ab94024c9b8..2d18b1f56b8 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 1531d09f3be..8f64e231952 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 693b7244299..e30d63b8963 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 9cb61f5c349..979ba3eebc9 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> @@ -410,6 +411,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 | 
