Skip to content
Snippets Groups Projects
Commit c8fd8e66 authored by Akshay Saraswat's avatar Akshay Saraswat Committed by Minkyu Kang
Browse files

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: default avatarAkshay Saraswat <akshay.s@samsung.com>
Reviewed-by: default avatarSimon Glass <sjg@chromium.org>
Tested-by: default avatarSimon Glass <sjg@chromium.org>
Signed-off-by: default avatarMinkyu Kang <mk7.kang@samsung.com>
parent cecf2db2
No related branches found
No related tags found
No related merge requests found
...@@ -103,7 +103,7 @@ static void low_power_start(void) ...@@ -103,7 +103,7 @@ static void low_power_start(void)
reg_val = readl(EXYNOS5420_SPARE_BASE); reg_val = readl(EXYNOS5420_SPARE_BASE);
if (reg_val != CPU_RST_FLAG_VAL) { if (reg_val != CPU_RST_FLAG_VAL) {
writel(0x0, CONFIG_LOWPOWER_FLAG); writel(0x0, CONFIG_LOWPOWER_FLAG);
set_pc(0x0); branch_bx(0x0);
} }
reg_val = readl(CONFIG_PHY_IRAM_BASE + 0x4); reg_val = readl(CONFIG_PHY_IRAM_BASE + 0x4);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment