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>
This commit is contained in:
Marek Vasut 2020-08-05 15:34:04 +02:00 committed by Stefano Babic
parent 789bfb5266
commit c72372d38c
4 changed files with 23 additions and 5 deletions

View file

@ -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) */

View file

@ -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.

View file

@ -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

View file

@ -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