linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [GIT PULL] Renesas ARM Based SoC Sysc Updates for v4.12
@ 2017-04-07 18:14 Simon Horman
  2017-04-07 18:14 ` [PATCH 1/3] soc: renesas: Register SoC device early Simon Horman
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Simon Horman @ 2017-04-07 18:14 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Olof, Hi Kevin, Hi Arnd,

Please consider these Renesas ARM based SoC sysc updates for v4.12.

This pull request is based on the soc-device-match-tag2 tag of
Geert Uytterhoeven's renesas-drivers tree which he has already
sent a pull-request for.


The following changes since commit 6e12db376b60b7158e4e6006af60566f8c68f7ab:

  base: soc: Allow early registration of a single SoC device (2017-03-29 21:43:26 +0200)

are available in the git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git tags/renesas-sysc-for-v4.12

for you to fetch changes up to fcb87087261e1be51b4c03677f39246bdc312b1c:

  soc: renesas: rcar-sysc: Add support for R-Car H3 ES2.0 (2017-04-07 13:53:41 -0400)

----------------------------------------------------------------
Renesas ARM Based SoC Sysc Updates for v4.12

* Add support for R-Car H3 ES2.0

----------------------------------------------------------------
Geert Uytterhoeven (3):
      soc: renesas: Register SoC device early
      soc: renesas: rcar-sysc: Add support for fixing up power area tables
      soc: renesas: rcar-sysc: Add support for R-Car H3 ES2.0

 drivers/soc/renesas/r8a7795-sysc.c       | 26 ++++++++++++++++++++++++--
 drivers/soc/renesas/rcar-sysc.c          | 25 ++++++++++++++++++++++++-
 drivers/soc/renesas/rcar-sysc.h          | 10 ++++++++++
 drivers/soc/renesas/renesas-soc.c        |  2 +-
 include/dt-bindings/power/r8a7795-sysc.h |  2 +-
 5 files changed, 60 insertions(+), 5 deletions(-)

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

* [PATCH 1/3] soc: renesas: Register SoC device early
  2017-04-07 18:14 [GIT PULL] Renesas ARM Based SoC Sysc Updates for v4.12 Simon Horman
@ 2017-04-07 18:14 ` Simon Horman
  2017-04-07 18:14 ` [PATCH 2/3] soc: renesas: rcar-sysc: Add support for fixing up power area tables Simon Horman
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Simon Horman @ 2017-04-07 18:14 UTC (permalink / raw)
  To: linux-arm-kernel

From: Geert Uytterhoeven <geert+renesas@glider.be>

The r8a7795 SYSC driver manages PM Domains, and thus is initialized from
an early_initcall().  However, this means the driver cannot check the
SoC revision, as the SoC device hasn't been registered yet.

Change renesas_soc_init() from a core_initcall() to an early_initcall()
to fix this (renesas-soc.o is listed before rcar-sysc.o in the Makefile).

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
---
 drivers/soc/renesas/renesas-soc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/soc/renesas/renesas-soc.c b/drivers/soc/renesas/renesas-soc.c
index 330960312296..51ed33f3426d 100644
--- a/drivers/soc/renesas/renesas-soc.c
+++ b/drivers/soc/renesas/renesas-soc.c
@@ -254,4 +254,4 @@ static int __init renesas_soc_init(void)
 
 	return 0;
 }
-core_initcall(renesas_soc_init);
+early_initcall(renesas_soc_init);
-- 
2.7.0.rc3.207.g0ac5344

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

* [PATCH 2/3] soc: renesas: rcar-sysc: Add support for fixing up power area tables
  2017-04-07 18:14 [GIT PULL] Renesas ARM Based SoC Sysc Updates for v4.12 Simon Horman
  2017-04-07 18:14 ` [PATCH 1/3] soc: renesas: Register SoC device early Simon Horman
@ 2017-04-07 18:14 ` Simon Horman
  2017-04-07 18:14 ` [PATCH 3/3] soc: renesas: rcar-sysc: Add support for R-Car H3 ES2.0 Simon Horman
  2017-04-19 13:55 ` [GIT PULL] Renesas ARM Based SoC Sysc Updates for v4.12 Olof Johansson
  3 siblings, 0 replies; 6+ messages in thread
From: Simon Horman @ 2017-04-07 18:14 UTC (permalink / raw)
  To: linux-arm-kernel

From: Geert Uytterhoeven <geert+renesas@glider.be>

The same SoC may have different power areas, depending on SoC revision.
One option is to use different sets of power area tables for each SoC
revision.  However, if the differences are small, it is much more
space-efficient to have a single set of tables, and fix those up at
runtime instead.

Hence provide a helper to NULLify power areas that do not exist on some
revisions (NULLified power areas are skipped during the registration
phase), and support for an optional initialization callback to e.g. fix
up power area tables.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
---
 drivers/soc/renesas/rcar-sysc.c | 25 ++++++++++++++++++++++++-
 drivers/soc/renesas/rcar-sysc.h | 10 ++++++++++
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/drivers/soc/renesas/rcar-sysc.c b/drivers/soc/renesas/rcar-sysc.c
index 225c35c79d9a..528a13742aeb 100644
--- a/drivers/soc/renesas/rcar-sysc.c
+++ b/drivers/soc/renesas/rcar-sysc.c
@@ -2,7 +2,7 @@
  * R-Car SYSC Power management support
  *
  * Copyright (C) 2014  Magnus Damm
- * Copyright (C) 2015-2016 Glider bvba
+ * Copyright (C) 2015-2017 Glider bvba
  *
  * This file is subject to the terms and conditions of the GNU General Public
  * License.  See the file "COPYING" in the main directory of this archive
@@ -334,6 +334,12 @@ static int __init rcar_sysc_pd_init(void)
 
 	info = match->data;
 
+	if (info->init) {
+		error = info->init();
+		if (error)
+			return error;
+	}
+
 	has_cpg_mstp = of_find_compatible_node(NULL, NULL,
 					       "renesas,cpg-mstp-clocks");
 
@@ -377,6 +383,11 @@ static int __init rcar_sysc_pd_init(void)
 		const struct rcar_sysc_area *area = &info->areas[i];
 		struct rcar_sysc_pd *pd;
 
+		if (!area->name) {
+			/* Skip NULLified area */
+			continue;
+		}
+
 		pd = kzalloc(sizeof(*pd) + strlen(area->name) + 1, GFP_KERNEL);
 		if (!pd) {
 			error = -ENOMEM;
@@ -406,6 +417,18 @@ static int __init rcar_sysc_pd_init(void)
 }
 early_initcall(rcar_sysc_pd_init);
 
+void __init rcar_sysc_nullify(struct rcar_sysc_area *areas,
+			      unsigned int num_areas, u8 id)
+{
+	unsigned int i;
+
+	for (i = 0; i < num_areas; i++)
+		if (areas[i].isr_bit == id) {
+			areas[i].name = NULL;
+			return;
+		}
+}
+
 void __init rcar_sysc_init(phys_addr_t base, u32 syscier)
 {
 	u32 syscimr;
diff --git a/drivers/soc/renesas/rcar-sysc.h b/drivers/soc/renesas/rcar-sysc.h
index f6e842e2976e..07edb049a401 100644
--- a/drivers/soc/renesas/rcar-sysc.h
+++ b/drivers/soc/renesas/rcar-sysc.h
@@ -46,6 +46,7 @@ struct rcar_sysc_area {
  */
 
 struct rcar_sysc_info {
+	int (*init)(void);	/* Optional */
 	const struct rcar_sysc_area *areas;
 	unsigned int num_areas;
 };
@@ -59,4 +60,13 @@ extern const struct rcar_sysc_info r8a7792_sysc_info;
 extern const struct rcar_sysc_info r8a7794_sysc_info;
 extern const struct rcar_sysc_info r8a7795_sysc_info;
 extern const struct rcar_sysc_info r8a7796_sysc_info;
+
+
+    /*
+     * Helpers for fixing up power area tables depending on SoC revision
+     */
+
+extern void rcar_sysc_nullify(struct rcar_sysc_area *areas,
+			      unsigned int num_areas, u8 id);
+
 #endif /* __SOC_RENESAS_RCAR_SYSC_H__ */
-- 
2.7.0.rc3.207.g0ac5344

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

* [PATCH 3/3] soc: renesas: rcar-sysc: Add support for R-Car H3 ES2.0
  2017-04-07 18:14 [GIT PULL] Renesas ARM Based SoC Sysc Updates for v4.12 Simon Horman
  2017-04-07 18:14 ` [PATCH 1/3] soc: renesas: Register SoC device early Simon Horman
  2017-04-07 18:14 ` [PATCH 2/3] soc: renesas: rcar-sysc: Add support for fixing up power area tables Simon Horman
@ 2017-04-07 18:14 ` Simon Horman
  2017-04-19 13:55 ` [GIT PULL] Renesas ARM Based SoC Sysc Updates for v4.12 Olof Johansson
  3 siblings, 0 replies; 6+ messages in thread
From: Simon Horman @ 2017-04-07 18:14 UTC (permalink / raw)
  To: linux-arm-kernel

From: Geert Uytterhoeven <geert+renesas@glider.be>

Power area A2VC0 was removed in revision ES2.0, cfr. R-Car Gen3 Hardware
User's Manual rev. 0.53E.

Hence remove it from the power area table when not running on ES1.x.

This is in line with the goal to:
  1. Support both the ES1.x and ES2.0 SoC revisions in a single binary
     for now,
  2. Make it clear which code supports ES1.x, so it can easily be
     identified and removed later, when production SoCs are deemed
     ubiquitous.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
---
 drivers/soc/renesas/r8a7795-sysc.c       | 26 ++++++++++++++++++++++++--
 include/dt-bindings/power/r8a7795-sysc.h |  2 +-
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/drivers/soc/renesas/r8a7795-sysc.c b/drivers/soc/renesas/r8a7795-sysc.c
index 5e7537c96f7b..7412666187b3 100644
--- a/drivers/soc/renesas/r8a7795-sysc.c
+++ b/drivers/soc/renesas/r8a7795-sysc.c
@@ -1,7 +1,7 @@
 /*
  * Renesas R-Car H3 System Controller
  *
- * Copyright (C) 2016 Glider bvba
+ * Copyright (C) 2016-2017 Glider bvba
  *
  * 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
@@ -10,12 +10,13 @@
 
 #include <linux/bug.h>
 #include <linux/kernel.h>
+#include <linux/sys_soc.h>
 
 #include <dt-bindings/power/r8a7795-sysc.h>
 
 #include "rcar-sysc.h"
 
-static const struct rcar_sysc_area r8a7795_areas[] __initconst = {
+static struct rcar_sysc_area r8a7795_areas[] __initdata = {
 	{ "always-on",	    0, 0, R8A7795_PD_ALWAYS_ON,	-1, PD_ALWAYS_ON },
 	{ "ca57-scu",	0x1c0, 0, R8A7795_PD_CA57_SCU,	R8A7795_PD_ALWAYS_ON,
 	  PD_SCU },
@@ -40,6 +41,7 @@ static const struct rcar_sysc_area r8a7795_areas[] __initconst = {
 	{ "a3vp",	0x340, 0, R8A7795_PD_A3VP,	R8A7795_PD_ALWAYS_ON },
 	{ "cr7",	0x240, 0, R8A7795_PD_CR7,	R8A7795_PD_ALWAYS_ON },
 	{ "a3vc",	0x380, 0, R8A7795_PD_A3VC,	R8A7795_PD_ALWAYS_ON },
+	/* A2VC0 exists on ES1.x only */
 	{ "a2vc0",	0x3c0, 0, R8A7795_PD_A2VC0,	R8A7795_PD_A3VC },
 	{ "a2vc1",	0x3c0, 1, R8A7795_PD_A2VC1,	R8A7795_PD_A3VC },
 	{ "3dg-a",	0x100, 0, R8A7795_PD_3DG_A,	R8A7795_PD_ALWAYS_ON },
@@ -50,7 +52,27 @@ static const struct rcar_sysc_area r8a7795_areas[] __initconst = {
 	{ "a3ir",	0x180, 0, R8A7795_PD_A3IR,	R8A7795_PD_ALWAYS_ON },
 };
 
+
+	/*
+	 * Fixups for R-Car H3 revisions after ES1.x
+	 */
+
+static const struct soc_device_attribute r8a7795es1[] __initconst = {
+	{ .soc_id = "r8a7795", .revision = "ES1.*" },
+	{ /* sentinel */ }
+};
+
+static int __init r8a7795_sysc_init(void)
+{
+	if (!soc_device_match(r8a7795es1))
+		rcar_sysc_nullify(r8a7795_areas, ARRAY_SIZE(r8a7795_areas),
+				  R8A7795_PD_A2VC0);
+
+	return 0;
+}
+
 const struct rcar_sysc_info r8a7795_sysc_info __initconst = {
+	.init = r8a7795_sysc_init,
 	.areas = r8a7795_areas,
 	.num_areas = ARRAY_SIZE(r8a7795_areas),
 };
diff --git a/include/dt-bindings/power/r8a7795-sysc.h b/include/dt-bindings/power/r8a7795-sysc.h
index ee2e26ba605e..ad679eeda137 100644
--- a/include/dt-bindings/power/r8a7795-sysc.h
+++ b/include/dt-bindings/power/r8a7795-sysc.h
@@ -33,7 +33,7 @@
 #define R8A7795_PD_CA53_SCU		21
 #define R8A7795_PD_3DG_E		22
 #define R8A7795_PD_A3IR			24
-#define R8A7795_PD_A2VC0		25
+#define R8A7795_PD_A2VC0		25	/* ES1.x only */
 #define R8A7795_PD_A2VC1		26
 
 /* Always-on power area */
-- 
2.7.0.rc3.207.g0ac5344

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

* [GIT PULL] Renesas ARM Based SoC Sysc Updates for v4.12
  2017-04-07 18:14 [GIT PULL] Renesas ARM Based SoC Sysc Updates for v4.12 Simon Horman
                   ` (2 preceding siblings ...)
  2017-04-07 18:14 ` [PATCH 3/3] soc: renesas: rcar-sysc: Add support for R-Car H3 ES2.0 Simon Horman
@ 2017-04-19 13:55 ` Olof Johansson
  2017-04-20  9:22   ` Simon Horman
  3 siblings, 1 reply; 6+ messages in thread
From: Olof Johansson @ 2017-04-19 13:55 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

On Fri, Apr 07, 2017 at 02:14:07PM -0400, Simon Horman wrote:
> Hi Olof, Hi Kevin, Hi Arnd,
> 
> Please consider these Renesas ARM based SoC sysc updates for v4.12.
> 
> This pull request is based on the soc-device-match-tag2 tag of
> Geert Uytterhoeven's renesas-drivers tree which he has already
> sent a pull-request for.

Geert's pull request wasn't cc:d to arm at kernel.org, so I had actually missed it
when it was originally sent (since my inbox tends to get quite a few emails
directly to it).

Merged now, thanks!


-Olof

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

* [GIT PULL] Renesas ARM Based SoC Sysc Updates for v4.12
  2017-04-19 13:55 ` [GIT PULL] Renesas ARM Based SoC Sysc Updates for v4.12 Olof Johansson
@ 2017-04-20  9:22   ` Simon Horman
  0 siblings, 0 replies; 6+ messages in thread
From: Simon Horman @ 2017-04-20  9:22 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, Apr 19, 2017 at 06:55:56AM -0700, Olof Johansson wrote:
> Hi,
> 
> On Fri, Apr 07, 2017 at 02:14:07PM -0400, Simon Horman wrote:
> > Hi Olof, Hi Kevin, Hi Arnd,
> > 
> > Please consider these Renesas ARM based SoC sysc updates for v4.12.
> > 
> > This pull request is based on the soc-device-match-tag2 tag of
> > Geert Uytterhoeven's renesas-drivers tree which he has already
> > sent a pull-request for.
> 
> Geert's pull request wasn't cc:d to arm at kernel.org, so I had actually
> missed it when it was originally sent (since my inbox tends to get quite
> a few emails directly to it).
> 
> Merged now, thanks!

Thanks, sorry for not noticing the missing CC.

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

end of thread, other threads:[~2017-04-20  9:22 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-04-07 18:14 [GIT PULL] Renesas ARM Based SoC Sysc Updates for v4.12 Simon Horman
2017-04-07 18:14 ` [PATCH 1/3] soc: renesas: Register SoC device early Simon Horman
2017-04-07 18:14 ` [PATCH 2/3] soc: renesas: rcar-sysc: Add support for fixing up power area tables Simon Horman
2017-04-07 18:14 ` [PATCH 3/3] soc: renesas: rcar-sysc: Add support for R-Car H3 ES2.0 Simon Horman
2017-04-19 13:55 ` [GIT PULL] Renesas ARM Based SoC Sysc Updates for v4.12 Olof Johansson
2017-04-20  9:22   ` Simon Horman

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