arm: socfpga: misc: Fix warm reset
authorMarek Vasut <marex@denx.de>
Sun, 12 Jul 2015 13:11:03 +0000 (15:11 +0200)
committerMarek Vasut <marex@denx.de>
Sat, 8 Aug 2015 12:14:08 +0000 (14:14 +0200)
Write necessary magic value into the Warm Boot from ON-Chip RAM
group Enable register to enable Warm reset support. Instead of
doing this in the reset_cpu() function, we do it in arch early
init to avoid breaking old kernel code which expects this magic
value to be already written into this register.

This magic is originally excavated from common/spl/spl.c in the
u-boot port from altera, where this value was written just before
the SPL jumped to actual U-Boot in the RAM.

Signed-off-by: Marek Vasut <marex@denx.de>
arch/arm/mach-socfpga/misc.c

index e3fa92f2e2bbc55ccd7336dbae1e161beba90a6c..a6ff793c736de290cc4d52a3ca9f3fbbece1e812 100644 (file)
@@ -194,6 +194,16 @@ static uint32_t iswgrp_handoff[8];
 int arch_early_init_r(void)
 {
        int i;
+
+       /*
+        * Write magic value into magic register to unlock support for
+        * issuing warm reset. The ancient kernel code expects this
+        * value to be written into the register by the bootloader, so
+        * to support that old code, we write it here instead of in the
+        * reset_cpu() function just before reseting the CPU.
+        */
+       writel(0xae9efebc, &sysmgr_regs->romcodegrp_warmramgrp_enable);
+
        for (i = 0; i < 8; i++) /* Cache initial SW setting regs */
                iswgrp_handoff[i] = readl(&sysmgr_regs->iswgrp_handoff[i]);