summaryrefslogtreecommitdiff
path: root/board/highbank/highbank.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/highbank/highbank.c')
-rw-r--r--board/highbank/highbank.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/board/highbank/highbank.c b/board/highbank/highbank.c
index ba254b6352..e8132b842f 100644
--- a/board/highbank/highbank.c
+++ b/board/highbank/highbank.c
@@ -18,6 +18,7 @@
#define HB_SREG_A9_PWR_REQ 0xfff3cf00
#define HB_SREG_A9_BOOT_SRC_STAT 0xfff3cf04
#define HB_SREG_A9_PWRDOM_STAT 0xfff3cf20
+#define HB_SREG_A15_PWR_CTRL 0xfff3c200
#define HB_PWR_SUSPEND 0
#define HB_PWR_SOFT_RESET 1
@@ -116,10 +117,22 @@ int ft_board_setup(void *fdt, bd_t *bd)
}
#endif
+static int is_highbank(void)
+{
+ uint32_t midr;
+
+ asm volatile ("mrc p15, 0, %0, c0, c0, 0\n" : "=r"(midr));
+
+ return (midr & 0xfff0) == 0xc090;
+}
+
void reset_cpu(ulong addr)
{
writel(HB_PWR_HARD_RESET, HB_SREG_A9_PWR_REQ);
- writeb(HB_SCU_A9_PWR_OFF, HB_SCU_A9_PWR_STATUS);
+ if (is_highbank())
+ writeb(HB_SCU_A9_PWR_OFF, HB_SCU_A9_PWR_STATUS);
+ else
+ writel(0x1, HB_SREG_A15_PWR_CTRL);
wfi();
}