Skip to content
Snippets Groups Projects
Commit f8973325 authored by Mark Langsdorf's avatar Mark Langsdorf Committed by Tom Rini
Browse files

ARM: highbank: add reset support for Calxeda Midway machine


The Calxeda Midway part has A15 cores, which do not have the Highbank
A9's SCU used there for resetting the chip.
Add code to distinguish between the A9 and the A15 and invoke the
appropriate register writes to support the newer part.

Andre: rework detection of Highbank vs. Midway
Rob: fix Andre's reworked detection

Signed-off-by: default avatarMark Langsdorf <mark.langsdorf@gmail.com>
Signed-off-by: default avatarAndre Przywara <osp@andrep.de>
Signed-off-by: default avatarRob Herring <robh@kernel.org>
parent 083ffd65
No related branches found
No related tags found
No related merge requests found
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#define HB_SREG_A9_PWR_REQ 0xfff3cf00 #define HB_SREG_A9_PWR_REQ 0xfff3cf00
#define HB_SREG_A9_BOOT_SRC_STAT 0xfff3cf04 #define HB_SREG_A9_BOOT_SRC_STAT 0xfff3cf04
#define HB_SREG_A9_PWRDOM_STAT 0xfff3cf20 #define HB_SREG_A9_PWRDOM_STAT 0xfff3cf20
#define HB_SREG_A15_PWR_CTRL 0xfff3c200
#define HB_PWR_SUSPEND 0 #define HB_PWR_SUSPEND 0
#define HB_PWR_SOFT_RESET 1 #define HB_PWR_SOFT_RESET 1
...@@ -116,10 +117,22 @@ int ft_board_setup(void *fdt, bd_t *bd) ...@@ -116,10 +117,22 @@ int ft_board_setup(void *fdt, bd_t *bd)
} }
#endif #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) void reset_cpu(ulong addr)
{ {
writel(HB_PWR_HARD_RESET, HB_SREG_A9_PWR_REQ); 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(); wfi();
} }
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