diff mbox

[4/5] ARM: shmobile: Add support SOC_BUS to R-Car Gen2

Message ID 3a8e2822e1351c0ef8f9dd1c3e81cd5bfeb319e5.1424931398.git.horms+renesas@verge.net.au (mailing list archive)
State Accepted
Commit 3a8e2822e1351c0ef8f9dd1c3e81cd5bfeb319e5
Headers show

Commit Message

Simon Horman Feb. 26, 2015, 6:22 a.m. UTC
From: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>

This provides information through SOC_BUS to sysfs.
And this moves all on-SoC devices from /sys/devices/platform to
/sys/devices/socX/.

Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
---
 arch/arm/mach-shmobile/Kconfig           |  1 +
 arch/arm/mach-shmobile/setup-rcar-gen2.c | 38 ++++++++++++++++++++++++++++----
 2 files changed, 35 insertions(+), 4 deletions(-)

Comments

Arnd Bergmann Feb. 26, 2015, 3:53 p.m. UTC | #1
On Thursday 26 February 2015 15:22:44 Simon Horman wrote:
> From: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
> 
> This provides information through SOC_BUS to sysfs.
> And this moves all on-SoC devices from /sys/devices/platform to
> /sys/devices/socX/.
> 
> Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
> Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
> Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
> ---
>  arch/arm/mach-shmobile/Kconfig           |  1 +
>  arch/arm/mach-shmobile/setup-rcar-gen2.c | 38 ++++++++++++++++++++++++++++----
>  2 files changed, 35 insertions(+), 4 deletions(-)

I think this would be better done as a standalone driver in drivers/soc,
to avoid having to add the init_machine callbacks in patch 3.


>  void __init rcar_gen2_init_machine(void)
>  {
> -	system_rev = rcar_gen2_get_cut();
> +	struct soc_device_attribute *soc_dev_attr;
> +	struct soc_device *soc_dev;
> +	struct device *parent = NULL;
> +	u32 prr;
> +
> +	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
> +	if (!soc_dev_attr)
> +		goto out;
> +
> +	prr = rcar_gen2_get_prr();
> +	system_rev = (prr & 0xFF) + 0x10;
> +
> +	soc_dev_attr->machine = of_flat_dt_get_machine_name();

I would not duplicate that information here. Can you find out the SoC
name from registers and put it here?

	ARnd
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Simon Horman Feb. 27, 2015, 12:52 a.m. UTC | #2
Hi Arnd,

On Thu, Feb 26, 2015 at 04:53:39PM +0100, Arnd Bergmann wrote:
> On Thursday 26 February 2015 15:22:44 Simon Horman wrote:
> > From: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
> > 
> > This provides information through SOC_BUS to sysfs.
> > And this moves all on-SoC devices from /sys/devices/platform to
> > /sys/devices/socX/.
> > 
> > Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
> > Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
> > Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
> > ---
> >  arch/arm/mach-shmobile/Kconfig           |  1 +
> >  arch/arm/mach-shmobile/setup-rcar-gen2.c | 38 ++++++++++++++++++++++++++++----
> >  2 files changed, 35 insertions(+), 4 deletions(-)
> 
> I think this would be better done as a standalone driver in drivers/soc,
> to avoid having to add the init_machine callbacks in patch 3.

Could we handle this as follow-up work?

> >  void __init rcar_gen2_init_machine(void)
> >  {
> > -	system_rev = rcar_gen2_get_cut();
> > +	struct soc_device_attribute *soc_dev_attr;
> > +	struct soc_device *soc_dev;
> > +	struct device *parent = NULL;
> > +	u32 prr;
> > +
> > +	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
> > +	if (!soc_dev_attr)
> > +		goto out;
> > +
> > +	prr = rcar_gen2_get_prr();
> > +	system_rev = (prr & 0xFF) + 0x10;
> > +
> > +	soc_dev_attr->machine = of_flat_dt_get_machine_name();
> 
> I would not duplicate that information here. Can you find out the SoC
> name from registers and put it here?
> 
> 	ARnd
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Arnd Bergmann Feb. 27, 2015, 9 a.m. UTC | #3
On Friday 27 February 2015 09:52:23 Simon Horman wrote:
> 
> On Thu, Feb 26, 2015 at 04:53:39PM +0100, Arnd Bergmann wrote:
> > On Thursday 26 February 2015 15:22:44 Simon Horman wrote:
> > > From: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
> > > 
> > > This provides information through SOC_BUS to sysfs.
> > > And this moves all on-SoC devices from /sys/devices/platform to
> > > /sys/devices/socX/.
> > > 
> > > Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
> > > Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
> > > Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
> > > ---
> > >  arch/arm/mach-shmobile/Kconfig           |  1 +
> > >  arch/arm/mach-shmobile/setup-rcar-gen2.c | 38 ++++++++++++++++++++++++++++----
> > >  2 files changed, 35 insertions(+), 4 deletions(-)
> > 
> > I think this would be better done as a standalone driver in drivers/soc,
> > to avoid having to add the init_machine callbacks in patch 3.
> 
> Could we handle this as follow-up work?

That was my first idea when I looked at patch 3, but then I had the other
comment below:

> I would not duplicate that information here. Can you find out the SoC
> name from registers and put it here?

We must not introduce the user interface in one kernel and then change
it in the next one, so I'm cautious about taking the pull request in
the current form. Once we have agreed on what the contents of the sysfs
files should be, I can take the patches, and then we are free to move
the implementation later.

	Arnd
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Geert Uytterhoeven Feb. 27, 2015, 10:41 a.m. UTC | #4
Hi Arnd,

On Fri, Feb 27, 2015 at 10:00 AM, Arnd Bergmann <arnd@arndb.de> wrote:
> On Friday 27 February 2015 09:52:23 Simon Horman wrote:
>>
>> On Thu, Feb 26, 2015 at 04:53:39PM +0100, Arnd Bergmann wrote:
>> > On Thursday 26 February 2015 15:22:44 Simon Horman wrote:
>> > > From: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
>> > >
>> > > This provides information through SOC_BUS to sysfs.
>> > > And this moves all on-SoC devices from /sys/devices/platform to
>> > > /sys/devices/socX/.
>> > >
>> > > Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
>> > > Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
>> > > Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
>> > > ---
>> > >  arch/arm/mach-shmobile/Kconfig           |  1 +
>> > >  arch/arm/mach-shmobile/setup-rcar-gen2.c | 38 ++++++++++++++++++++++++++++----
>> > >  2 files changed, 35 insertions(+), 4 deletions(-)
>> >
>> > I think this would be better done as a standalone driver in drivers/soc,
>> > to avoid having to add the init_machine callbacks in patch 3.
>>
>> Could we handle this as follow-up work?
>
> That was my first idea when I looked at patch 3, but then I had the other
> comment below:
>

>> > > +     soc_dev_attr->machine = of_flat_dt_get_machine_name();

>> I would not duplicate that information here. Can you find out the SoC
>> name from registers and put it here?
>
> We must not introduce the user interface in one kernel and then change
> it in the next one, so I'm cautious about taking the pull request in
> the current form. Once we have agreed on what the contents of the sysfs
> files should be, I can take the patches, and then we are free to move
> the implementation later.

Currently machine contains e.g. "Koelsch", which is the name of the board,
not of the SoC.

We can derive the SoC name from soc_id, e.g. 0x47 = "R-Car M2-W".

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Arnd Bergmann Feb. 27, 2015, 1:44 p.m. UTC | #5
On Friday 27 February 2015 11:41:04 Geert Uytterhoeven wrote:
> > We must not introduce the user interface in one kernel and then change
> > it in the next one, so I'm cautious about taking the pull request in
> > the current form. Once we have agreed on what the contents of the sysfs
> > files should be, I can take the patches, and then we are free to move
> > the implementation later.
> 
> Currently machine contains e.g. "Koelsch", which is the name of the board,
> not of the SoC.
> 
> We can derive the SoC name from soc_id, e.g. 0x47 = "R-Car M2-W".
> 

Yes, I think that would be best.

	Arnd
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Simon Horman March 1, 2015, 1:52 a.m. UTC | #6
On Fri, Feb 27, 2015 at 10:00:04AM +0100, Arnd Bergmann wrote:
> On Friday 27 February 2015 09:52:23 Simon Horman wrote:
> > 
> > On Thu, Feb 26, 2015 at 04:53:39PM +0100, Arnd Bergmann wrote:
> > > On Thursday 26 February 2015 15:22:44 Simon Horman wrote:
> > > > From: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
> > > > 
> > > > This provides information through SOC_BUS to sysfs.
> > > > And this moves all on-SoC devices from /sys/devices/platform to
> > > > /sys/devices/socX/.
> > > > 
> > > > Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
> > > > Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
> > > > Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
> > > > ---
> > > >  arch/arm/mach-shmobile/Kconfig           |  1 +
> > > >  arch/arm/mach-shmobile/setup-rcar-gen2.c | 38 ++++++++++++++++++++++++++++----
> > > >  2 files changed, 35 insertions(+), 4 deletions(-)
> > > 
> > > I think this would be better done as a standalone driver in drivers/soc,
> > > to avoid having to add the init_machine callbacks in patch 3.
> > 
> > Could we handle this as follow-up work?
> 
> That was my first idea when I looked at patch 3, but then I had the other
> comment below:
> 
> > I would not duplicate that information here. Can you find out the SoC
> > name from registers and put it here?
> 
> We must not introduce the user interface in one kernel and then change
> it in the next one, so I'm cautious about taking the pull request in
> the current form. Once we have agreed on what the contents of the sysfs
> files should be, I can take the patches, and then we are free to move
> the implementation later.

Thanks for the clarification. Accordingly I'd like to withdraw this pull
request: I will drop these patches.
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig
index 2f36c85..a7f5ab5 100644
--- a/arch/arm/mach-shmobile/Kconfig
+++ b/arch/arm/mach-shmobile/Kconfig
@@ -19,6 +19,7 @@  config ARCH_RCAR_GEN2
 	bool
 	select PM_RCAR if PM || SMP
 	select RENESAS_IRQC
+	select SOC_BUS
 	select SYS_SUPPORTS_SH_CMT
 	select PCI_DOMAINS if PCI
 
diff --git a/arch/arm/mach-shmobile/setup-rcar-gen2.c b/arch/arm/mach-shmobile/setup-rcar-gen2.c
index 6f290a8..9cc2a90 100644
--- a/arch/arm/mach-shmobile/setup-rcar-gen2.c
+++ b/arch/arm/mach-shmobile/setup-rcar-gen2.c
@@ -26,6 +26,8 @@ 
 #include <linux/of.h>
 #include <linux/of_fdt.h>
 #include <linux/of_platform.h>
+#include <linux/slab.h>
+#include <linux/sys_soc.h>
 #include <asm/system_info.h>
 #include <asm/mach/arch.h>
 #include "common.h"
@@ -206,19 +208,47 @@  void __init rcar_gen2_reserve(void)
 }
 
 #define PRR 0xFF000044
-static unsigned int __init rcar_gen2_get_cut(void)
+static u32 __init rcar_gen2_get_prr(void)
 {
 	void __iomem *addr = ioremap_nocache(PRR, 4);
 	u32 data = ioread32(addr);
 
 	iounmap(addr);
 
-	return (data & 0xFF) + 0x10;
+	return data;
 }
 
 void __init rcar_gen2_init_machine(void)
 {
-	system_rev = rcar_gen2_get_cut();
+	struct soc_device_attribute *soc_dev_attr;
+	struct soc_device *soc_dev;
+	struct device *parent = NULL;
+	u32 prr;
+
+	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+	if (!soc_dev_attr)
+		goto out;
+
+	prr = rcar_gen2_get_prr();
+	system_rev = (prr & 0xFF) + 0x10;
+
+	soc_dev_attr->machine = of_flat_dt_get_machine_name();
+	soc_dev_attr->family = kasprintf(GFP_KERNEL, "Renesas R-Car Gen2");
+	soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%u.%u",
+					   system_rev >> 4, system_rev & 0xF);
+	soc_dev_attr->soc_id = kasprintf(GFP_KERNEL, "%04x",
+					 (prr & 0x7F00) >> 8);
+
+	soc_dev = soc_device_register(soc_dev_attr);
+	if (IS_ERR(soc_dev)) {
+		kfree(soc_dev_attr->family);
+		kfree(soc_dev_attr->revision);
+		kfree(soc_dev_attr->soc_id);
+		kfree(soc_dev_attr);
+		goto out;
+	}
 
-	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+	parent = soc_device_to_device(soc_dev);
+out:
+	of_platform_populate(NULL, of_default_bus_match_table, NULL, parent);
 }