From efe5ff987833754641f218c5e0834ef5bddf9cf0 Mon Sep 17 00:00:00 2001 From: Ye Li Date: Fri, 17 May 2019 02:36:57 -0700 Subject: [PATCH] MLK-19869-1 imx6: Checking serial download booting We introduce a new arch-specific flag GD_FLG_ARCH_IMX_USB_BOOT to indicate if it is USB boot. We check the USB PHY PWD bit at early of boot stage then set that flag in global variable. So any following calling of is_boot_from_usb will return correct value. Signed-off-by: Ye Li (cherry picked from commit 50b30746a9aac8785bfe6ea8077c8572b02065c2) (cherry picked from commit 24906eac79b62e9993b3706d3fb9ee710103aa1d) --- arch/arm/include/asm/arch-mx6/imx-regs.h | 6 +++++- arch/arm/include/asm/mach-imx/sys_proto.h | 3 +++ arch/arm/mach-imx/mx6/soc.c | 13 +++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/arch/arm/include/asm/arch-mx6/imx-regs.h b/arch/arm/include/asm/arch-mx6/imx-regs.h index e5a96bfd53..1a1159908d 100644 --- a/arch/arm/include/asm/arch-mx6/imx-regs.h +++ b/arch/arm/include/asm/arch-mx6/imx-regs.h @@ -1068,7 +1068,11 @@ struct dbg_monitor_regs { * If ROM fail back to USB recover mode, USBPH0_PWD will be clear to use USB * If boot from the other mode, USB0_PWD will keep reset value */ -#define is_boot_from_usb(void) (!(readl(USB_PHY0_BASE_ADDR) & (1<<20))) +#include +bool is_usb_boot(void); +#define is_boot_from_usb is_usb_boot +#define is_usbphy_power_on(void) (!(readl(USB_PHY0_BASE_ADDR) & (1<<20))) +#define disconnect_from_pc(void) writel(0x0, OTG_BASE_ADDR + 0x140) #endif /* __ASSEMBLY__ */ #endif /* __ASM_ARCH_MX6_IMX_REGS_H__ */ diff --git a/arch/arm/include/asm/mach-imx/sys_proto.h b/arch/arm/include/asm/mach-imx/sys_proto.h index 927dfc2e71..7fb9fa7b4c 100644 --- a/arch/arm/include/asm/mach-imx/sys_proto.h +++ b/arch/arm/include/asm/mach-imx/sys_proto.h @@ -74,6 +74,9 @@ struct bd_info; #define is_imx8qxp() (is_cpu_type(MXC_CPU_IMX8QXP)) + /* gd->flags reserves high 16 bits for arch-specific flags */ +#define GD_FLG_ARCH_IMX_USB_BOOT 0x80000000 /* Only used for MX6/7, If set, the u-boot is booting from USB serial download */ + #ifdef CONFIG_MX6 #define IMX6_SRC_GPR10_BMODE BIT(28) #define IMX6_SRC_GPR10_PERSIST_SECONDARY_BOOT BIT(30) diff --git a/arch/arm/mach-imx/mx6/soc.c b/arch/arm/mach-imx/mx6/soc.c index 6679d5a63a..1b56a15edf 100644 --- a/arch/arm/mach-imx/mx6/soc.c +++ b/arch/arm/mach-imx/mx6/soc.c @@ -33,6 +33,8 @@ #include #include +DECLARE_GLOBAL_DATA_PTR; + #define has_err007805() \ (is_mx6sl() || is_mx6dl() || is_mx6solo() || is_mx6ull()) @@ -537,10 +539,21 @@ static void imx_set_pcie_phy_power_down(void) } } +bool is_usb_boot(void) +{ + if (gd->flags & GD_FLG_ARCH_IMX_USB_BOOT) + return true; + + return false; +} + int arch_cpu_init(void) { struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; + if (is_usbphy_power_on()) + gd->flags |= GD_FLG_ARCH_IMX_USB_BOOT; + if (!is_mx6sl() && !is_mx6sx() && !is_mx6ul() && !is_mx6ull() && !is_mx6sll()) { -- 2.17.1