summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-hisi/hotplug.c
diff options
context:
space:
mode:
authorWang Long <long.wanglong@huawei.com>2014-12-24 03:10:02 +0000
committerOlof Johansson <olof@lixom.net>2015-01-21 14:33:39 -0800
commit7fda91e731554336c08a8157b886387d890a9676 (patch)
tree3cdf75fa716ec06d77f3ec95eccd34a9978db06c /arch/arm/mach-hisi/hotplug.c
parent29d189e1395a3f0924f7a442bb4b968c9e6de9c1 (diff)
downloadlinux-stable-7fda91e731554336c08a8157b886387d890a9676.tar.gz
linux-stable-7fda91e731554336c08a8157b886387d890a9676.tar.bz2
linux-stable-7fda91e731554336c08a8157b886387d890a9676.zip
ARM: hisi: enable smp for HiP01
Enable smp for HiP01 board. Signed-off-by: Wang Long <long.wanglong@huawei.com> Signed-off-by: Wei Xu <xuwei5@hisilicon.com> [olof: split off the dts change to a separate commit] Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'arch/arm/mach-hisi/hotplug.c')
-rw-r--r--arch/arm/mach-hisi/hotplug.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/arch/arm/mach-hisi/hotplug.c b/arch/arm/mach-hisi/hotplug.c
index 84e6919f68c7..a129aae72602 100644
--- a/arch/arm/mach-hisi/hotplug.c
+++ b/arch/arm/mach-hisi/hotplug.c
@@ -65,6 +65,9 @@
#define PMC0_CPU1_PMC_ENABLE (1 << 7)
#define PMC0_CPU1_POWERDOWN (1 << 3)
+#define HIP01_PERI9 0x50
+#define PERI9_CPU1_RESET (1 << 1)
+
enum {
HI3620_CTRL,
ERROR_CTRL,
@@ -209,6 +212,34 @@ void hix5hd2_set_cpu(int cpu, bool enable)
}
}
+void hip01_set_cpu(int cpu, bool enable)
+{
+ unsigned int temp;
+ struct device_node *np;
+
+ if (!ctrl_base) {
+ np = of_find_compatible_node(NULL, NULL, "hisilicon,hip01-sysctrl");
+ if (np)
+ ctrl_base = of_iomap(np, 0);
+ else
+ BUG();
+ }
+
+ if (enable) {
+ /* reset on CPU1 */
+ temp = readl_relaxed(ctrl_base + HIP01_PERI9);
+ temp |= PERI9_CPU1_RESET;
+ writel_relaxed(temp, ctrl_base + HIP01_PERI9);
+
+ udelay(50);
+
+ /* unreset on CPU1 */
+ temp = readl_relaxed(ctrl_base + HIP01_PERI9);
+ temp &= ~PERI9_CPU1_RESET;
+ writel_relaxed(temp, ctrl_base + HIP01_PERI9);
+ }
+}
+
static inline void cpu_enter_lowpower(void)
{
unsigned int v;