summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-berlin/headsmp.S
diff options
context:
space:
mode:
authorAntoine Ténart <antoine.tenart@free-electrons.com>2014-06-04 18:03:42 +0200
committerSebastian Hesselbarth <sebastian.hesselbarth@gmail.com>2014-06-16 13:16:44 +0200
commit7b7dfdd2b9927c1861bb6d03ca35261f1739aceb (patch)
treecb1da3b1522e0c493c3dba207e731ac8e2e4a6a6 /arch/arm/mach-berlin/headsmp.S
parent7171511eaec5bf23fb06078f59784a3a0626b38f (diff)
downloadblackbird-obmc-linux-7b7dfdd2b9927c1861bb6d03ca35261f1739aceb.tar.gz
blackbird-obmc-linux-7b7dfdd2b9927c1861bb6d03ca35261f1739aceb.zip
ARM: berlin: add SMP support
Adds SMP support for Berlin SoCs. Secondary CPUs are reset, then execute the instruction we put in the reset exception register, setting the pc at the address contained in the software reset address register, which is the physical address of the Berlin secondary startup. This implementation avoid using the pen lock mechanism. Signed-off-by: Antoine Ténart <antoine.tenart@free-electrons.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Diffstat (limited to 'arch/arm/mach-berlin/headsmp.S')
-rw-r--r--arch/arm/mach-berlin/headsmp.S30
1 files changed, 30 insertions, 0 deletions
diff --git a/arch/arm/mach-berlin/headsmp.S b/arch/arm/mach-berlin/headsmp.S
new file mode 100644
index 000000000000..4a4c56a58ad3
--- /dev/null
+++ b/arch/arm/mach-berlin/headsmp.S
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2014 Marvell Technology Group Ltd.
+ *
+ * Antoine Ténart <antoine.tenart@free-electrons.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/linkage.h>
+#include <linux/init.h>
+#include <asm/assembler.h>
+
+ENTRY(berlin_secondary_startup)
+ ARM_BE8(setend be)
+ bl v7_invalidate_l1
+ b secondary_startup
+ENDPROC(berlin_secondary_startup)
+
+/*
+ * If the following instruction is set in the reset exception vector, CPUs
+ * will fetch the value of the software reset address vector when being
+ * reset.
+ */
+.global boot_inst
+boot_inst:
+ ldr pc, [pc, #140]
+
+ .align
OpenPOWER on IntegriCloud