From cba586b40093990d89892e7704f5e6b71f437520 Mon Sep 17 00:00:00 2001 From: Jagan Teki Date: Fri, 24 Feb 2017 15:45:12 +0530 Subject: [PATCH] imx6: Add imx6_src_get_boot_mode For i.MX6, the bootmode determine code is part of spl_boot_device, but there is might be a possibility for other part the code need to check the desired boot mode for adding new functionalities like modeboot env variable, or changing boot order etc. So introduced imx6_src_get_boot_mode which actually reading the boot mode register for desired modes. More cleanup will be add in future patches. Cc: Stefano Babic Cc: Tim Harvey Cc: Matteo Lisi Cc: Michael Trimarchi Signed-off-by: Jagan Teki Reviewed-by: Stefano Babic --- arch/arm/imx-common/init.c | 12 ++++++++++++ arch/arm/imx-common/spl.c | 4 ++-- arch/arm/include/asm/imx-common/sys_proto.h | 14 ++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/arch/arm/imx-common/init.c b/arch/arm/imx-common/init.c index e5dbd93c3b..036ebb2f17 100644 --- a/arch/arm/imx-common/init.c +++ b/arch/arm/imx-common/init.c @@ -115,3 +115,15 @@ void boot_mode_apply(unsigned cfg_val) writel(reg, &psrc->gpr10); } #endif + +#if defined(CONFIG_MX6) +u32 imx6_src_get_boot_mode(void) +{ + struct src *psrc = (struct src *)SRC_BASE_ADDR; + + if (imx6_is_bmode_from_gpr9()) + return readl(&psrc->gpr9); + else + return readl(&psrc->sbmr1); +} +#endif diff --git a/arch/arm/imx-common/spl.c b/arch/arm/imx-common/spl.c index 46325ec344..6c20f28e10 100644 --- a/arch/arm/imx-common/spl.c +++ b/arch/arm/imx-common/spl.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -19,9 +20,8 @@ u32 spl_boot_device(void) { struct src *psrc = (struct src *)SRC_BASE_ADDR; - unsigned int gpr10_boot = readl(&psrc->gpr10) & (1 << 28); - unsigned reg = gpr10_boot ? readl(&psrc->gpr9) : readl(&psrc->sbmr1); unsigned int bmode = readl(&psrc->sbmr2); + u32 reg = imx6_src_get_boot_mode(); /* * Check for BMODE if serial downloader is enabled diff --git a/arch/arm/include/asm/imx-common/sys_proto.h b/arch/arm/include/asm/imx-common/sys_proto.h index 732b6922de..631ccc50ae 100644 --- a/arch/arm/include/asm/imx-common/sys_proto.h +++ b/arch/arm/include/asm/imx-common/sys_proto.h @@ -8,6 +8,7 @@ #ifndef _SYS_PROTO_H_ #define _SYS_PROTO_H_ +#include #include #include #include "../arch-imx/cpu.h" @@ -40,6 +41,19 @@ #define is_mx7ulp() (is_cpu_type(MXC_CPU_MX7ULP)) +#ifdef CONFIG_MX6 +#define IMX6_SRC_GPR10_BMODE BIT(28) + +static inline u8 imx6_is_bmode_from_gpr9(void) +{ + struct src *psrc = (struct src *)SRC_BASE_ADDR; + + return readl(&psrc->gpr10) & IMX6_SRC_GPR10_BMODE; +} + +u32 imx6_src_get_boot_mode(void); +#endif /* CONFIG_MX6 */ + u32 get_nr_cpus(void); u32 get_cpu_rev(void); u32 get_cpu_speed_grade_hz(void);