summaryrefslogtreecommitdiff
path: root/arch/arm/mach-imx/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-imx/init.c')
-rw-r--r--arch/arm/mach-imx/init.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/arch/arm/mach-imx/init.c b/arch/arm/mach-imx/init.c
index e30d63b896..ce3eb4b0b8 100644
--- a/arch/arm/mach-imx/init.c
+++ b/arch/arm/mach-imx/init.c
@@ -104,20 +104,28 @@ void init_src(void)
void boot_mode_apply(unsigned cfg_val)
{
#ifdef CONFIG_MX6
+ const u32 persist_sec = IMX6_SRC_GPR10_PERSIST_SECONDARY_BOOT;
const u32 bmode = IMX6_SRC_GPR10_BMODE;
#elif CONFIG_MX7
+ const u32 persist_sec = IMX7_SRC_GPR10_PERSIST_SECONDARY_BOOT;
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 |= bmode;
- else
- reg &= ~bmode;
- writel(reg, &psrc->gpr10);
+ if (cfg_val == MAKE_CFGVAL_PRIMARY_BOOT)
+ clrbits_le32(&psrc->gpr10, persist_sec);
+ else if (cfg_val == MAKE_CFGVAL_SECONDARY_BOOT)
+ setbits_le32(&psrc->gpr10, persist_sec);
+ else {
+ writel(cfg_val, &psrc->gpr9);
+ reg = readl(&psrc->gpr10);
+ if (cfg_val)
+ reg |= bmode;
+ else
+ reg &= ~bmode;
+ writel(reg, &psrc->gpr10);
+ }
}
#endif