LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH v5 0/3] Renesas R9A06G032 SMP enabler
@ 2018-06-14 10:58 Michel Pollet
2018-06-14 10:58 ` [PATCH v5 1/3] dt-bindings: cpu: Add Renesas R9A06G032 SMP enable method Michel Pollet
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Michel Pollet @ 2018-06-14 10:58 UTC (permalink / raw)
To: linux-renesas-soc, Simon Horman
Cc: phil.edworthy, Michel Pollet, Michel Pollet, Rob Herring,
Mark Rutland, Magnus Damm, Russell King, Chen-Yu Tsai,
Stefan Wahren, Rajendra Nayak, Andy Gross, Frank Rowand,
Carlo Caione, Florian Fainelli, Andreas Färber, devicetree,
linux-kernel, linux-arm-kernel
*WARNING -- this requires the base R9A06G032 support patches
already posted
This patch series is for enabling the second CA7 of the R9A06G032.
It's based on a spin_table method, and it reuses the same binding
property as that driver.
v5:
+ Fixed a couple of typos
+ Added the Reviewed-by tags where appropriate
+ Rebased on base patch v9
+ Replaced the dts property with a 64 bits one.
+ Changed the driver to support 32 or 64 bits property.
v4:
+ Geert's comments adressed.
+ Renamed symbols to r9a06g032 to match the rest of patchset
+ Rebased on base patch v8
v3:
+ Removed mentions of rz/?n1d?
+ Rebased on base patch v7
v2:
+ Added suggestions from Florian Fainelli
+ Use __pa_symbol()
+ Simplified logic in prepare_cpu()
+ Reordered the patches
+ Rebased on RZN1 Base patch v5
Michel Pollet (3):
dt-bindings: cpu: Add Renesas R9A06G032 SMP enable method.
arm: shmobile: Add the R9A06G032 SMP enabler driver
ARM: dts: Renesas R9A06G032 SMP enable method
Documentation/devicetree/bindings/arm/cpus.txt | 1 +
arch/arm/boot/dts/r9a06g032.dtsi | 2 +
arch/arm/mach-shmobile/Makefile | 1 +
arch/arm/mach-shmobile/smp-r9a06g032.c | 90 ++++++++++++++++++++++++++
4 files changed, 94 insertions(+)
create mode 100644 arch/arm/mach-shmobile/smp-r9a06g032.c
--
2.7.4
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v5 1/3] dt-bindings: cpu: Add Renesas R9A06G032 SMP enable method.
2018-06-14 10:58 [PATCH v5 0/3] Renesas R9A06G032 SMP enabler Michel Pollet
@ 2018-06-14 10:58 ` Michel Pollet
2018-06-14 10:58 ` [PATCH v5 2/3] arm: shmobile: Add the R9A06G032 SMP enabler driver Michel Pollet
2018-06-14 10:58 ` [PATCH v5 3/3] ARM: dts: Renesas R9A06G032 SMP enable method Michel Pollet
2 siblings, 0 replies; 4+ messages in thread
From: Michel Pollet @ 2018-06-14 10:58 UTC (permalink / raw)
To: linux-renesas-soc, Simon Horman
Cc: phil.edworthy, Michel Pollet, Michel Pollet, Rob Herring,
Mark Rutland, Magnus Damm, Russell King, Martin Blumenstingl,
Andy Gross, Geert Uytterhoeven, Carlo Caione, Stefan Wahren,
Florian Fainelli, Rajendra Nayak, Andreas Färber,
Frank Rowand, devicetree, linux-kernel, linux-arm-kernel
Add a special enable method for second CA7 of the R9A06G032
Signed-off-by: Michel Pollet <michel.pollet@bp.renesas.com>
Reviewed-by: Rob Herring <robh@kernel.org>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Simon Horman <horms+renesas@verge.net.au>
---
Documentation/devicetree/bindings/arm/cpus.txt | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/arm/cpus.txt b/Documentation/devicetree/bindings/arm/cpus.txt
index 29e1dc5..b395d107 100644
--- a/Documentation/devicetree/bindings/arm/cpus.txt
+++ b/Documentation/devicetree/bindings/arm/cpus.txt
@@ -219,6 +219,7 @@ described below.
"qcom,kpss-acc-v1"
"qcom,kpss-acc-v2"
"renesas,apmu"
+ "renesas,r9a06g032-smp"
"rockchip,rk3036-smp"
"rockchip,rk3066-smp"
"ste,dbx500-smp"
--
2.7.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v5 2/3] arm: shmobile: Add the R9A06G032 SMP enabler driver
2018-06-14 10:58 [PATCH v5 0/3] Renesas R9A06G032 SMP enabler Michel Pollet
2018-06-14 10:58 ` [PATCH v5 1/3] dt-bindings: cpu: Add Renesas R9A06G032 SMP enable method Michel Pollet
@ 2018-06-14 10:58 ` Michel Pollet
2018-06-14 10:58 ` [PATCH v5 3/3] ARM: dts: Renesas R9A06G032 SMP enable method Michel Pollet
2 siblings, 0 replies; 4+ messages in thread
From: Michel Pollet @ 2018-06-14 10:58 UTC (permalink / raw)
To: linux-renesas-soc, Simon Horman
Cc: phil.edworthy, Michel Pollet, Michel Pollet, Rob Herring,
Mark Rutland, Magnus Damm, Russell King, Rajendra Nayak,
Andy Gross, Frank Rowand, Andreas Färber, Stefan Wahren,
Carlo Caione, Florian Fainelli, devicetree, linux-kernel,
linux-arm-kernel
The Renesas R9A06G032 second CA7 is parked in a ROM pen at boot time, it
requires a special enable method to get it started.
Signed-off-by: Michel Pollet <michel.pollet@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
arch/arm/mach-shmobile/Makefile | 1 +
arch/arm/mach-shmobile/smp-r9a06g032.c | 90 ++++++++++++++++++++++++++++++++++
2 files changed, 91 insertions(+)
create mode 100644 arch/arm/mach-shmobile/smp-r9a06g032.c
diff --git a/arch/arm/mach-shmobile/Makefile b/arch/arm/mach-shmobile/Makefile
index 1939f52..d7fc98f 100644
--- a/arch/arm/mach-shmobile/Makefile
+++ b/arch/arm/mach-shmobile/Makefile
@@ -34,6 +34,7 @@ smp-$(CONFIG_ARCH_SH73A0) += smp-sh73a0.o headsmp-scu.o platsmp-scu.o
smp-$(CONFIG_ARCH_R8A7779) += smp-r8a7779.o headsmp-scu.o platsmp-scu.o
smp-$(CONFIG_ARCH_R8A7790) += smp-r8a7790.o
smp-$(CONFIG_ARCH_R8A7791) += smp-r8a7791.o
+smp-$(CONFIG_ARCH_R9A06G032) += smp-r9a06g032.o
smp-$(CONFIG_ARCH_EMEV2) += smp-emev2.o headsmp-scu.o platsmp-scu.o
# PM objects
diff --git a/arch/arm/mach-shmobile/smp-r9a06g032.c b/arch/arm/mach-shmobile/smp-r9a06g032.c
new file mode 100644
index 0000000..882a838
--- /dev/null
+++ b/arch/arm/mach-shmobile/smp-r9a06g032.c
@@ -0,0 +1,90 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * R9A06G032 Second CA7 enabler.
+ *
+ * Copyright (C) 2018 Renesas Electronics Europe Limited
+ *
+ * Michel Pollet <michel.pollet@bp.renesas.com>, <buserror@gmail.com>
+ * Derived from actions,s500-smp
+ */
+
+#include <linux/io.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/smp.h>
+
+/*
+ * The second CPU is parked in ROM at boot time. It requires waking it after
+ * writing an address into the BOOTADDR register of sysctrl.
+ *
+ * So the default value of the "cpu-release-addr" corresponds to BOOTADDR...
+ *
+ * *However* the BOOTADDR register is not available when the kernel
+ * starts in NONSEC mode.
+ *
+ * So for NONSEC mode, the bootloader re-parks the second CPU into a pen
+ * in SRAM, and changes the "cpu-release-addr" of linux's DT to a SRAM address,
+ * which is not restricted.
+ */
+
+static void __iomem *cpu_bootaddr;
+
+static DEFINE_SPINLOCK(cpu_lock);
+
+static int r9a06g032_smp_boot_secondary(unsigned int cpu, struct task_struct *idle)
+{
+ if (!cpu_bootaddr)
+ return -ENODEV;
+
+ spin_lock(&cpu_lock);
+
+ writel(__pa_symbol(secondary_startup), cpu_bootaddr);
+ arch_send_wakeup_ipi_mask(cpumask_of(cpu));
+
+ spin_unlock(&cpu_lock);
+
+ return 0;
+}
+
+static void __init r9a06g032_smp_prepare_cpus(unsigned int max_cpus)
+{
+ struct device_node *dn;
+ int ret = -EINVAL, dns;
+ u32 bootaddr;
+
+ dn = of_get_cpu_node(1, NULL);
+ if (!dn) {
+ pr_err("CPU#1: missing device tree node\n");
+ return;
+ }
+ /*
+ * Determine the address from which the CPU is polling.
+ * The bootloader *does* change this property.
+ * Note: The property can be either 64 or 32 bits, so handle both cases
+ */
+ if (of_find_property(dn, "cpu-release-addr", &dns)) {
+ if (dns == sizeof(u64)) {
+ u64 temp;
+ ret = of_property_read_u64(dn,
+ "cpu-release-addr", &temp);
+ bootaddr = temp;
+ } else
+ ret = of_property_read_u32(dn,
+ "cpu-release-addr", &bootaddr);
+ }
+ of_node_put(dn);
+ if (ret) {
+ pr_err("CPU#1: invalid cpu-release-addr property\n");
+ return;
+ }
+ pr_info("CPU#1: cpu-release-addr %08x\n", bootaddr);
+
+ cpu_bootaddr = ioremap(bootaddr, sizeof(bootaddr));
+}
+
+static const struct smp_operations r9a06g032_smp_ops __initconst = {
+ .smp_prepare_cpus = r9a06g032_smp_prepare_cpus,
+ .smp_boot_secondary = r9a06g032_smp_boot_secondary,
+};
+CPU_METHOD_OF_DECLARE(r9a06g032_smp,
+ "renesas,r9a06g032-smp", &r9a06g032_smp_ops);
--
2.7.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v5 3/3] ARM: dts: Renesas R9A06G032 SMP enable method
2018-06-14 10:58 [PATCH v5 0/3] Renesas R9A06G032 SMP enabler Michel Pollet
2018-06-14 10:58 ` [PATCH v5 1/3] dt-bindings: cpu: Add Renesas R9A06G032 SMP enable method Michel Pollet
2018-06-14 10:58 ` [PATCH v5 2/3] arm: shmobile: Add the R9A06G032 SMP enabler driver Michel Pollet
@ 2018-06-14 10:58 ` Michel Pollet
2 siblings, 0 replies; 4+ messages in thread
From: Michel Pollet @ 2018-06-14 10:58 UTC (permalink / raw)
To: linux-renesas-soc, Simon Horman
Cc: phil.edworthy, Michel Pollet, Michel Pollet, Rob Herring,
Mark Rutland, Magnus Damm, Russell King, Martin Blumenstingl,
Frank Rowand, Maxime Ripard, Carlo Caione, Stefan Wahren,
Rajendra Nayak, Andreas Färber, Florian Fainelli,
devicetree, linux-kernel, linux-arm-kernel
Add a special enable method for the second CA7 of the R9A06G032
as well as the default value for the "cpu-release-addr" property.
Signed-off-by: Michel Pollet <michel.pollet@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
arch/arm/boot/dts/r9a06g032.dtsi | 2 ++
1 file changed, 2 insertions(+)
diff --git a/arch/arm/boot/dts/r9a06g032.dtsi b/arch/arm/boot/dts/r9a06g032.dtsi
index 353e06f..3e45375 100644
--- a/arch/arm/boot/dts/r9a06g032.dtsi
+++ b/arch/arm/boot/dts/r9a06g032.dtsi
@@ -30,6 +30,8 @@
compatible = "arm,cortex-a7";
reg = <1>;
clocks = <&sysctrl R9A06G032_CLK_A7MP>;
+ enable-method = "renesas,r9a06g032-smp";
+ cpu-release-addr = <0 0x4000c204>;
};
};
--
2.7.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-06-14 11:04 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-14 10:58 [PATCH v5 0/3] Renesas R9A06G032 SMP enabler Michel Pollet
2018-06-14 10:58 ` [PATCH v5 1/3] dt-bindings: cpu: Add Renesas R9A06G032 SMP enable method Michel Pollet
2018-06-14 10:58 ` [PATCH v5 2/3] arm: shmobile: Add the R9A06G032 SMP enabler driver Michel Pollet
2018-06-14 10:58 ` [PATCH v5 3/3] ARM: dts: Renesas R9A06G032 SMP enable method Michel Pollet
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).