From: Stephen Boyd <sboyd@codeaurora.org>
To: linux-arm-kernel@lists.infradead.org
Cc: Rohit Vaswani <rvaswani@codeaurora.org>,
David Brown <davidb@codeaurora.org>,
linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org
Subject: [PATCH 08/11] ARM: msm: Add SMP support for KPSSv1
Date: Fri, 1 Nov 2013 15:08:56 -0700 [thread overview]
Message-ID: <1383343739-23080-9-git-send-email-sboyd@codeaurora.org> (raw)
In-Reply-To: <1383343739-23080-1-git-send-email-sboyd@codeaurora.org>
From: Rohit Vaswani <rvaswani@codeaurora.org>
Implement support for the Krait CPU release sequence when the
CPUs are part of the first version of the krait processor
subsystem.
Signed-off-by: Rohit Vaswani <rvaswani@codeaurora.org>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
---
arch/arm/mach-msm/platsmp.c | 56 ++++++++++++++++++++++++++++++++++++++++++++
arch/arm/mach-msm/scm-boot.h | 8 ++++---
2 files changed, 61 insertions(+), 3 deletions(-)
diff --git a/arch/arm/mach-msm/platsmp.c b/arch/arm/mach-msm/platsmp.c
index 369d8f7..e187c6e 100644
--- a/arch/arm/mach-msm/platsmp.c
+++ b/arch/arm/mach-msm/platsmp.c
@@ -17,6 +17,7 @@
#include <linux/of_address.h>
#include <linux/smp.h>
#include <linux/io.h>
+#include <linux/sizes.h>
#include <asm/cacheflush.h>
#include <asm/cputype.h>
@@ -30,6 +31,10 @@
#define SCSS_CPU1CORE_RESET 0x2d80
#define SCSS_DBG_STATUS_CORE_PWRDUP 0x2e64
+#define APCS_CPU_PWR_CTL 0x04
+
+#define APCS_SAW2_VCTL 0x14
+
extern void secondary_startup(void);
static DEFINE_SPINLOCK(boot_lock);
@@ -66,6 +71,54 @@ static int scss_release_secondary(struct device_node *node, unsigned int cpu)
return 0;
}
+static int kpssv1_release_secondary(struct device_node *node, unsigned int cpu)
+{
+ u32 off;
+ struct resource res;
+ void __iomem *reg;
+
+ if (of_property_read_u32(node, "cpu-offset", &off))
+ return -EINVAL;
+
+ if (of_address_to_resource(node, 0, &res))
+ return -EINVAL;
+
+ /* The SAW base is always next to the ACC base so just map both */
+ reg = ioremap(res.start + off + (SZ_64K * cpu),
+ resource_size(&res) + SZ_4K);
+ if (!reg)
+ return -ENOMEM;
+
+ /* Turn on CPU rail */
+ writel_relaxed(0xA4, reg + SZ_4K + APCS_SAW2_VCTL);
+ mb();
+ udelay(512);
+
+ /* Krait bring-up sequence */
+ writel_relaxed(0x109, reg + APCS_CPU_PWR_CTL);
+ writel_relaxed(0x101, reg + APCS_CPU_PWR_CTL);
+ mb();
+ ndelay(300);
+
+ writel_relaxed(0x121, reg + APCS_CPU_PWR_CTL);
+ mb();
+ udelay(2);
+
+ writel_relaxed(0x120, reg + APCS_CPU_PWR_CTL);
+ mb();
+ udelay(2);
+
+ writel_relaxed(0x100, reg + APCS_CPU_PWR_CTL);
+ mb();
+ udelay(100);
+
+ writel_relaxed(0x180, reg + APCS_CPU_PWR_CTL);
+ mb();
+
+ iounmap(reg);
+ return 0;
+}
+
static DEFINE_PER_CPU(int, cold_boot_done);
static int boot_cold_cpu(unsigned int cpu)
@@ -77,6 +130,7 @@ static int boot_cold_cpu(unsigned int cpu)
#define M(c, f) { .compatible = c, .data = f }
static const struct of_device_id match_table[] = {
M("qcom,gcc-8660", scss_release_secondary),
+ M("qcom,kpss-acc-v1", kpssv1_release_secondary),
};
#undef M
@@ -155,6 +209,8 @@ static void __init msm_smp_prepare_cpus(unsigned int max_cpus)
static const int cold_boot_flags[] = {
0,
SCM_FLAG_COLDBOOT_CPU1,
+ SCM_FLAG_COLDBOOT_CPU2,
+ SCM_FLAG_COLDBOOT_CPU3,
};
for_each_present_cpu(cpu) {
diff --git a/arch/arm/mach-msm/scm-boot.h b/arch/arm/mach-msm/scm-boot.h
index 7be32ff..6aabb24 100644
--- a/arch/arm/mach-msm/scm-boot.h
+++ b/arch/arm/mach-msm/scm-boot.h
@@ -13,9 +13,11 @@
#define __MACH_SCM_BOOT_H
#define SCM_BOOT_ADDR 0x1
-#define SCM_FLAG_COLDBOOT_CPU1 0x1
-#define SCM_FLAG_WARMBOOT_CPU1 0x2
-#define SCM_FLAG_WARMBOOT_CPU0 0x4
+#define SCM_FLAG_COLDBOOT_CPU1 0x01
+#define SCM_FLAG_COLDBOOT_CPU2 0x08
+#define SCM_FLAG_COLDBOOT_CPU3 0x20
+#define SCM_FLAG_WARMBOOT_CPU0 0x04
+#define SCM_FLAG_WARMBOOT_CPU1 0x02
int scm_set_boot_addr(phys_addr_t addr, int flags);
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
hosted by The Linux Foundation
next prev parent reply other threads:[~2013-11-01 22:08 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-01 22:08 [PATCH 00/11] CPU enable method based SMP/hotplug + MSM conversion Stephen Boyd
2013-11-01 22:08 ` [PATCH 01/11] devicetree: bindings: Document cpu enable-method for ARM CPUs Stephen Boyd
2013-11-02 1:00 ` Rob Herring
2013-11-08 9:12 ` Tomasz Figa
2013-11-01 22:08 ` [PATCH 02/11] devicetree: bindings: Document Qualcomm cpus and enable-method Stephen Boyd
2013-11-02 1:04 ` Rob Herring
2013-11-04 17:36 ` Stephen Boyd
2013-11-05 17:12 ` Kumar Gala
2013-11-05 17:35 ` Stephen Boyd
2013-11-05 17:43 ` Kumar Gala
2013-11-05 17:46 ` Stephen Boyd
2013-11-05 18:12 ` Kumar Gala
2013-11-01 22:08 ` [PATCH 03/11] devicetree: bindings: Document qcom,kpss-acc Stephen Boyd
2013-11-05 17:13 ` Kumar Gala
2013-11-05 17:44 ` Stephen Boyd
2013-11-05 17:51 ` Kumar Gala
2013-11-08 9:10 ` Tomasz Figa
2013-11-08 14:30 ` Kumar Gala
2013-11-01 22:08 ` [PATCH 04/11] devicetree: bindings: Document qcom,saw2 node Stephen Boyd
2013-11-05 17:16 ` Kumar Gala
2013-11-01 22:08 ` [PATCH 05/11] ARM: Introduce CPU_METHOD_OF_DECLARE() for cpu hotplug/smp Stephen Boyd
2013-11-05 17:24 ` Kumar Gala
2013-11-05 17:27 ` Stephen Boyd
[not found] ` <1383343739-23080-6-git-send-email-sboyd-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2013-11-07 1:50 ` Josh Cartwright
2013-11-07 22:34 ` Stephen Boyd
2013-11-01 22:08 ` [PATCH 06/11] ARM: msm: Remove pen_release usage Stephen Boyd
2013-11-01 22:08 ` [PATCH 07/11] ARM: msm: Re-organize platsmp to make it extensible Stephen Boyd
2013-11-05 17:32 ` Kumar Gala
2013-11-01 22:08 ` Stephen Boyd [this message]
2013-11-01 22:08 ` [PATCH 09/11] ARM: msm: Add SMP support for KPSSv2 Stephen Boyd
[not found] ` <CACqS6krDt=zDWNXKTu2PvCkMXQbbf-4G2RZtuCt1deU6H2SUxQ@mail.gmail.com>
2013-11-04 18:03 ` Stephen Boyd
2013-11-01 22:08 ` [PATCH 10/11] ARM: dts: msm: Add nodes necessary for SMP boot Stephen Boyd
2013-11-01 22:08 ` [PATCH 11/11] ARM: msm: Remove nr_cpus detection logic Stephen Boyd
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1383343739-23080-9-git-send-email-sboyd@codeaurora.org \
--to=sboyd@codeaurora.org \
--cc=davidb@codeaurora.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rvaswani@codeaurora.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).