linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/02] ARM: shmobile: Initial r8a7790 APMU SMP code
@ 2013-08-09 10:07 Magnus Damm
  2013-08-09 10:07 ` [PATCH 01/02] ARM: shmobile: Add r8a7790 SMP support using APMU code Magnus Damm
  2013-08-09 10:08 ` [PATCH 02/02] ARM: shmobile: Add r8a7790 CA15 CPU cores and APMU as DTS Magnus Damm
  0 siblings, 2 replies; 4+ messages in thread
From: Magnus Damm @ 2013-08-09 10:07 UTC (permalink / raw)
  To: linux-arm-kernel

ARM: shmobile: Initial r8a7790 APMU SMP code

[PATCH 01/02] ARM: shmobile: Add r8a7790 SMP support using APMU code
[PATCH 02/02] ARM: shmobile: Add r8a7790 CA15 CPU cores and APMU as DTS

This series adds SMP support to r8a7790 using the APMU code. With these
patches applied r8a7790 CA15 support for SMP boot and CPU Hotplug is
known to be working.

Signed-off-by: Magnus Damm <damm@opensource.se>
---

 Written against renesas.git renesas-devel-20130807 and
 [PATCH 00/05] ARM: shmobile: Yet another SMP series
 [PATCH 00/02] ARM: shmobile: Rename to r8a73a4/r8a7790_init_early()
 [PATCH] ARM: shmobile: Shared APMU SMP support code
 [PATCH 00/02] ARM: shmobile: Initial r8a73a4 APMU SMP code

 arch/arm/boot/dts/r8a7790.dtsi                |   27 ++++++++++
 arch/arm/mach-shmobile/Makefile               |    1 
 arch/arm/mach-shmobile/include/mach/r8a7790.h |    1 
 arch/arm/mach-shmobile/setup-r8a7790.c        |    3 +
 arch/arm/mach-shmobile/smp-r8a7790.c          |   67 +++++++++++++++++++++++++
 5 files changed, 99 insertions(+)

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 01/02] ARM: shmobile: Add r8a7790 SMP support using APMU code
  2013-08-09 10:07 [PATCH 00/02] ARM: shmobile: Initial r8a7790 APMU SMP code Magnus Damm
@ 2013-08-09 10:07 ` Magnus Damm
  2013-08-21  9:14   ` Simon Horman
  2013-08-09 10:08 ` [PATCH 02/02] ARM: shmobile: Add r8a7790 CA15 CPU cores and APMU as DTS Magnus Damm
  1 sibling, 1 reply; 4+ messages in thread
From: Magnus Damm @ 2013-08-09 10:07 UTC (permalink / raw)
  To: linux-arm-kernel

From: Magnus Damm <damm@opensource.se>

Add r8a7790 SMP support using the shared APMU code. To enable
SMP the r8a7790 specific DTS needs to be updated to include
CPU cores, and this is happening in a separate patch.

Signed-off-by: Magnus Damm <damm@opensource.se>
---

 arch/arm/mach-shmobile/Makefile               |    1 
 arch/arm/mach-shmobile/include/mach/r8a7790.h |    1 
 arch/arm/mach-shmobile/setup-r8a7790.c        |    3 +
 arch/arm/mach-shmobile/smp-r8a7790.c          |   67 +++++++++++++++++++++++++
 4 files changed, 72 insertions(+)

--- 0011/arch/arm/mach-shmobile/Makefile
+++ work/arch/arm/mach-shmobile/Makefile	2013-08-07 20:10:54.000000000 +0900
@@ -35,6 +35,7 @@ smp-y				:= platsmp.o headsmp.o
 smp-$(CONFIG_ARCH_SH73A0)	+= smp-sh73a0.o headsmp-scu.o platsmp-scu.o
 smp-$(CONFIG_ARCH_R8A73A4)	+= smp-r8a73a4.o platsmp-apmu.o
 smp-$(CONFIG_ARCH_R8A7779)	+= smp-r8a7779.o headsmp-scu.o platsmp-scu.o
+smp-$(CONFIG_ARCH_R8A7790)	+= smp-r8a7790.o platsmp-apmu.o
 smp-$(CONFIG_ARCH_EMEV2)	+= smp-emev2.o headsmp-scu.o platsmp-scu.o
 
 # IRQ objects
--- 0009/arch/arm/mach-shmobile/include/mach/r8a7790.h
+++ work/arch/arm/mach-shmobile/include/mach/r8a7790.h	2013-08-07 20:10:54.000000000 +0900
@@ -7,6 +7,7 @@ void r8a7790_clock_init(void);
 void r8a7790_pinmux_init(void);
 void r8a7790_init_early(void);
 void r8a7790_timer_init(void);
+extern struct smp_operations r8a7790_smp_ops;
 
 #define MD(nr) BIT(nr)
 u32 r8a7790_read_mode_pins(void);
--- 0009/arch/arm/mach-shmobile/setup-r8a7790.c
+++ work/arch/arm/mach-shmobile/setup-r8a7790.c	2013-08-07 20:10:54.000000000 +0900
@@ -272,6 +272,9 @@ void __init r8a7790_init_early(void)
 #ifndef CONFIG_ARM_ARCH_TIMER
 	shmobile_setup_delay(1300, 2, 4); /* Cortex-A15 @ 1300MHz */
 #endif
+#ifdef CONFIG_SMP
+	smp_set_ops(&r8a7790_smp_ops);
+#endif
 }
 
 #ifdef CONFIG_USE_OF
--- /dev/null
+++ work/arch/arm/mach-shmobile/smp-r8a7790.c	2013-08-07 20:10:55.000000000 +0900
@@ -0,0 +1,67 @@
+/*
+ * SMP support for r8a7790
+ *
+ * Copyright (C) 2012-2013 Renesas Solutions Corp.
+ * Copyright (C) 2012 Takashi Yoshii <takashi.yoshii.ze@renesas.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/smp.h>
+#include <linux/io.h>
+#include <asm/smp_plat.h>
+#include <mach/common.h>
+
+#define RST		0xe6160000
+#define CA15BAR		0x0020
+#define CA7BAR		0x0030
+#define CA15RESCNT	0x0040
+#define CA7RESCNT	0x0044
+#define MERAM		0xe8080000
+
+static void __init r8a7790_smp_prepare_cpus(unsigned int max_cpus)
+{
+	void __iomem *p;
+	u32 bar;
+
+	/* let APMU code install data related to shmobile_boot_vector */
+	shmobile_smp_apmu_prepare_cpus(max_cpus);
+
+	/* MERAM for jump stub, because BAR requires 256KB aligned address */
+	p = ioremap_nocache(MERAM, shmobile_boot_size);
+	memcpy_toio(p, shmobile_boot_vector, shmobile_boot_size);
+	iounmap(p);
+
+	/* setup reset vectors */
+	p = ioremap_nocache(RST, 0x63);
+	bar = (MERAM >> 8) & 0xfffffc00;
+	writel_relaxed(bar, p + CA15BAR);
+	writel_relaxed(bar, p + CA7BAR);
+	writel_relaxed(bar | 0x10, p + CA15BAR);
+	writel_relaxed(bar | 0x10, p + CA7BAR);
+
+	/* enable clocks to all CPUs */
+	writel_relaxed((readl_relaxed(p + CA15RESCNT) & ~0x0f) | 0xa5a50000,
+		       p + CA15RESCNT);
+	writel_relaxed((readl_relaxed(p + CA7RESCNT) & ~0x0f) | 0x5a5a0000,
+		       p + CA7RESCNT);
+	iounmap(p);
+}
+
+struct smp_operations r8a7790_smp_ops __initdata = {
+	.smp_prepare_cpus	= r8a7790_smp_prepare_cpus,
+	.smp_boot_secondary	= shmobile_smp_apmu_boot_secondary,
+#ifdef CONFIG_HOTPLUG_CPU
+	.cpu_disable		= shmobile_smp_cpu_disable,
+	.cpu_die		= shmobile_smp_apmu_cpu_die,
+	.cpu_kill		= shmobile_smp_apmu_cpu_kill,
+#endif
+};

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 02/02] ARM: shmobile: Add r8a7790 CA15 CPU cores and APMU as DTS
  2013-08-09 10:07 [PATCH 00/02] ARM: shmobile: Initial r8a7790 APMU SMP code Magnus Damm
  2013-08-09 10:07 ` [PATCH 01/02] ARM: shmobile: Add r8a7790 SMP support using APMU code Magnus Damm
@ 2013-08-09 10:08 ` Magnus Damm
  1 sibling, 0 replies; 4+ messages in thread
From: Magnus Damm @ 2013-08-09 10:08 UTC (permalink / raw)
  To: linux-arm-kernel

From: Magnus Damm <damm@opensource.se>

Add CA15 CPU cores to r8a7790 for a total of 4 x CA15
and also add an APMU node for SMP power management.

Signed-off-by: Magnus Damm <damm@opensource.se>
---

 arch/arm/boot/dts/r8a7790.dtsi |   27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

--- 0001/arch/arm/boot/dts/r8a7790.dtsi
+++ work/arch/arm/boot/dts/r8a7790.dtsi	2013-08-07 20:14:31.000000000 +0900
@@ -24,6 +24,33 @@
 			reg = <0>;
 			clock-frequency = <1300000000>;
 		};
+
+		cpu1: cpu at 1 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a15";
+			reg = <1>;
+			clock-frequency = <1300000000>;
+		};
+
+		cpu2: cpu at 2 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a15";
+			reg = <2>;
+			clock-frequency = <1300000000>;
+		};
+
+		cpu3: cpu at 3 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a15";
+			reg = <3>;
+			clock-frequency = <1300000000>;
+		};
+	};
+
+	apmu at e6152000 {
+		compatible = "renesas,r8a7790-apmu", "renesas,apmu";
+		reg = <0 0xe6152000 0 0x88>;
+		cpus = <&cpu0 &cpu1 &cpu2 &cpu3>;
 	};
 
 	gic: interrupt-controller at f1001000 {

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 01/02] ARM: shmobile: Add r8a7790 SMP support using APMU code
  2013-08-09 10:07 ` [PATCH 01/02] ARM: shmobile: Add r8a7790 SMP support using APMU code Magnus Damm
@ 2013-08-21  9:14   ` Simon Horman
  0 siblings, 0 replies; 4+ messages in thread
From: Simon Horman @ 2013-08-21  9:14 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Aug 09, 2013 at 07:07:55PM +0900, Magnus Damm wrote:
> From: Magnus Damm <damm@opensource.se>
> 
> Add r8a7790 SMP support using the shared APMU code. To enable
> SMP the r8a7790 specific DTS needs to be updated to include
> CPU cores, and this is happening in a separate patch.
> 
> Signed-off-by: Magnus Damm <damm@opensource.se>
> ---
> 
>  arch/arm/mach-shmobile/Makefile               |    1 
>  arch/arm/mach-shmobile/include/mach/r8a7790.h |    1 
>  arch/arm/mach-shmobile/setup-r8a7790.c        |    3 +
>  arch/arm/mach-shmobile/smp-r8a7790.c          |   67 +++++++++++++++++++++++++
>  4 files changed, 72 insertions(+)
> 
> --- 0011/arch/arm/mach-shmobile/Makefile
> +++ work/arch/arm/mach-shmobile/Makefile	2013-08-07 20:10:54.000000000 +0900
> @@ -35,6 +35,7 @@ smp-y				:= platsmp.o headsmp.o
>  smp-$(CONFIG_ARCH_SH73A0)	+= smp-sh73a0.o headsmp-scu.o platsmp-scu.o
>  smp-$(CONFIG_ARCH_R8A73A4)	+= smp-r8a73a4.o platsmp-apmu.o
>  smp-$(CONFIG_ARCH_R8A7779)	+= smp-r8a7779.o headsmp-scu.o platsmp-scu.o
> +smp-$(CONFIG_ARCH_R8A7790)	+= smp-r8a7790.o platsmp-apmu.o
>  smp-$(CONFIG_ARCH_EMEV2)	+= smp-emev2.o headsmp-scu.o platsmp-scu.o
>  
>  # IRQ objects
> --- 0009/arch/arm/mach-shmobile/include/mach/r8a7790.h
> +++ work/arch/arm/mach-shmobile/include/mach/r8a7790.h	2013-08-07 20:10:54.000000000 +0900
> @@ -7,6 +7,7 @@ void r8a7790_clock_init(void);
>  void r8a7790_pinmux_init(void);
>  void r8a7790_init_early(void);
>  void r8a7790_timer_init(void);
> +extern struct smp_operations r8a7790_smp_ops;
>  
>  #define MD(nr) BIT(nr)
>  u32 r8a7790_read_mode_pins(void);
> --- 0009/arch/arm/mach-shmobile/setup-r8a7790.c
> +++ work/arch/arm/mach-shmobile/setup-r8a7790.c	2013-08-07 20:10:54.000000000 +0900
> @@ -272,6 +272,9 @@ void __init r8a7790_init_early(void)
>  #ifndef CONFIG_ARM_ARCH_TIMER
>  	shmobile_setup_delay(1300, 2, 4); /* Cortex-A15 @ 1300MHz */
>  #endif
> +#ifdef CONFIG_SMP
> +	smp_set_ops(&r8a7790_smp_ops);
> +#endif
>  }
>  
>  #ifdef CONFIG_USE_OF

As per your email to Olof and Arnd regarding the r8a73a4 version of this
change, I am holding off on this until there is some determination if it is
preferred to set smp_set_ops() in ->init_early(i) or to use the (more
traditional) method of setting smp_ops directly in the per-board
DT_MACHINE_START.

> --- /dev/null
> +++ work/arch/arm/mach-shmobile/smp-r8a7790.c	2013-08-07 20:10:55.000000000 +0900
> @@ -0,0 +1,67 @@
> +/*
> + * SMP support for r8a7790
> + *
> + * Copyright (C) 2012-2013 Renesas Solutions Corp.
> + * Copyright (C) 2012 Takashi Yoshii <takashi.yoshii.ze@renesas.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; version 2 of the License.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +#include <linux/kernel.h>
> +#include <linux/init.h>
> +#include <linux/smp.h>
> +#include <linux/io.h>
> +#include <asm/smp_plat.h>
> +#include <mach/common.h>
> +
> +#define RST		0xe6160000
> +#define CA15BAR		0x0020
> +#define CA7BAR		0x0030
> +#define CA15RESCNT	0x0040
> +#define CA7RESCNT	0x0044
> +#define MERAM		0xe8080000
> +
> +static void __init r8a7790_smp_prepare_cpus(unsigned int max_cpus)
> +{
> +	void __iomem *p;
> +	u32 bar;
> +
> +	/* let APMU code install data related to shmobile_boot_vector */
> +	shmobile_smp_apmu_prepare_cpus(max_cpus);
> +
> +	/* MERAM for jump stub, because BAR requires 256KB aligned address */
> +	p = ioremap_nocache(MERAM, shmobile_boot_size);
> +	memcpy_toio(p, shmobile_boot_vector, shmobile_boot_size);
> +	iounmap(p);
> +
> +	/* setup reset vectors */
> +	p = ioremap_nocache(RST, 0x63);
> +	bar = (MERAM >> 8) & 0xfffffc00;
> +	writel_relaxed(bar, p + CA15BAR);
> +	writel_relaxed(bar, p + CA7BAR);
> +	writel_relaxed(bar | 0x10, p + CA15BAR);
> +	writel_relaxed(bar | 0x10, p + CA7BAR);
> +
> +	/* enable clocks to all CPUs */
> +	writel_relaxed((readl_relaxed(p + CA15RESCNT) & ~0x0f) | 0xa5a50000,
> +		       p + CA15RESCNT);
> +	writel_relaxed((readl_relaxed(p + CA7RESCNT) & ~0x0f) | 0x5a5a0000,
> +		       p + CA7RESCNT);
> +	iounmap(p);
> +}
> +
> +struct smp_operations r8a7790_smp_ops __initdata = {
> +	.smp_prepare_cpus	= r8a7790_smp_prepare_cpus,
> +	.smp_boot_secondary	= shmobile_smp_apmu_boot_secondary,
> +#ifdef CONFIG_HOTPLUG_CPU
> +	.cpu_disable		= shmobile_smp_cpu_disable,
> +	.cpu_die		= shmobile_smp_apmu_cpu_die,
> +	.cpu_kill		= shmobile_smp_apmu_cpu_kill,
> +#endif
> +};
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sh" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-08-21  9:14 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-09 10:07 [PATCH 00/02] ARM: shmobile: Initial r8a7790 APMU SMP code Magnus Damm
2013-08-09 10:07 ` [PATCH 01/02] ARM: shmobile: Add r8a7790 SMP support using APMU code Magnus Damm
2013-08-21  9:14   ` Simon Horman
2013-08-09 10:08 ` [PATCH 02/02] ARM: shmobile: Add r8a7790 CA15 CPU cores and APMU as DTS Magnus Damm

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).