From: Akshay Saraswat Date: Fri, 20 Feb 2015 07:57:19 +0000 (+0530) Subject: Exynos542x: Make A7s boot with thumb-mode U-Boot on warm reset X-Git-Tag: v2015.04-rc3~10^2~1 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=c8fd8e66cdd9bf8b4fe78eaaa9bc1000fa60ae85;p=oweals%2Fu-boot.git Exynos542x: Make A7s boot with thumb-mode U-Boot on warm reset On warm reset, all cores jump to the low_power_start function because iRAM data is retained and because while executing iROM code all cores find the jump flag 0x02020028 set. In low_power_start, cores check the reset status and if true they clear the jump flag and jump back to 0x0. The A7 cores do jump to 0x0 but consider following instructions as a Thumb instructions which in turn makes them loop inside the iROM code instead of jumping to power_down_core. This issue is fixed by replacing the "mov pc" instruction with a "bx" instruction which switches state along with the jump to make the execution unit consider the branch target as an ARM instruction. Signed-off-by: Akshay Saraswat Reviewed-by: Simon Glass Tested-by: Simon Glass Signed-off-by: Minkyu Kang --- diff --git a/arch/arm/cpu/armv7/exynos/lowlevel_init.c b/arch/arm/cpu/armv7/exynos/lowlevel_init.c index 782ecd1115..329ab0cf8e 100644 --- a/arch/arm/cpu/armv7/exynos/lowlevel_init.c +++ b/arch/arm/cpu/armv7/exynos/lowlevel_init.c @@ -103,7 +103,7 @@ static void low_power_start(void) reg_val = readl(EXYNOS5420_SPARE_BASE); if (reg_val != CPU_RST_FLAG_VAL) { writel(0x0, CONFIG_LOWPOWER_FLAG); - set_pc(0x0); + branch_bx(0x0); } reg_val = readl(CONFIG_PHY_IRAM_BASE + 0x4);