On 15 January 2015 at 06:42, Akshay Saraswat <aksha...@samsung.com> wrote: > 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 <aksha...@samsung.com> > --- > arch/arm/cpu/armv7/exynos/lowlevel_init.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/arm/cpu/armv7/exynos/lowlevel_init.c > b/arch/arm/cpu/armv7/exynos/lowlevel_init.c > index d9f3f4b..a459432 100644 > --- a/arch/arm/cpu/armv7/exynos/lowlevel_init.c > +++ b/arch/arm/cpu/armv7/exynos/lowlevel_init.c > @@ -124,7 +124,7 @@ static void low_power_start(void) > reg_val = readl(RST_FLAG_REG); > if (reg_val != RST_FLAG_VAL) { > writel(0x0, CONFIG_LOWPOWER_FLAG); > - set_pc(0x0); > + branch_bx(0x0); > } > > reg_val = readl(CONFIG_PHY_IRAM_BASE + 0x4); > -- > 1.9.1 >
Reviewed-by: Simon Glass <s...@chromium.org> Tested on snow, pit, pi Tested-by: Simon Glass <s...@chromium.org> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot