diff options
author | Antoine Ténart <antoine.tenart@free-electrons.com> | 2014-06-04 18:03:42 +0200 |
---|---|---|
committer | Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> | 2014-06-16 13:16:44 +0200 |
commit | 7b7dfdd2b9927c1861bb6d03ca35261f1739aceb (patch) | |
tree | cb1da3b1522e0c493c3dba207e731ac8e2e4a6a6 /arch/arm/mach-berlin/headsmp.S | |
parent | 7171511eaec5bf23fb06078f59784a3a0626b38f (diff) | |
download | blackbird-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.S | 30 |
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 |