diff mbox

[1/5] ARM: shmobile: r8a7794 SYSC setup code

Message ID 54F50C56.5030605@bp.renesas.com (mailing list archive)
State Changes Requested
Delegated to: Simon Horman
Headers show

Commit Message

Gaku Inami March 3, 2015, 1:20 a.m. UTC
Add r8a7794 SYSC power management support.

Signed-off-by: Gaku Inami <gaku.inami.xw@bp.renesas.com>
---
 arch/arm/mach-shmobile/Makefile     |    2 +-
 arch/arm/mach-shmobile/pm-r8a7794.c |   44 +++++++++++++++++++++++++++++++++++
 arch/arm/mach-shmobile/r8a7794.h    |    6 +++++
 3 files changed, 51 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm/mach-shmobile/pm-r8a7794.c
 create mode 100644 arch/arm/mach-shmobile/r8a7794.h

Comments

Simon Horman March 4, 2015, 1:40 a.m. UTC | #1
Hi Inami-san,

On Tue, Mar 03, 2015 at 10:20:22AM +0900, Gaku Inami wrote:
> Add r8a7794 SYSC power management support.
> 
> Signed-off-by: Gaku Inami <gaku.inami.xw@bp.renesas.com>
> ---
>  arch/arm/mach-shmobile/Makefile     |    2 +-
>  arch/arm/mach-shmobile/pm-r8a7794.c |   44 +++++++++++++++++++++++++++++++++++
>  arch/arm/mach-shmobile/r8a7794.h    |    6 +++++
>  3 files changed, 51 insertions(+), 1 deletion(-)
>  create mode 100644 arch/arm/mach-shmobile/pm-r8a7794.c
>  create mode 100644 arch/arm/mach-shmobile/r8a7794.h
> 
> diff --git a/arch/arm/mach-shmobile/Makefile b/arch/arm/mach-shmobile/Makefile
> index d3aca07..cde95f8 100644
> --- a/arch/arm/mach-shmobile/Makefile
> +++ b/arch/arm/mach-shmobile/Makefile
> @@ -13,7 +13,7 @@ obj-$(CONFIG_ARCH_R8A7778)	+= setup-r8a7778.o
>  obj-$(CONFIG_ARCH_R8A7779)	+= setup-r8a7779.o pm-r8a7779.o
>  obj-$(CONFIG_ARCH_R8A7790)	+= setup-r8a7790.o pm-r8a7790.o
>  obj-$(CONFIG_ARCH_R8A7791)	+= setup-r8a7791.o pm-r8a7791.o
> -obj-$(CONFIG_ARCH_R8A7794)	+= setup-r8a7794.o
> +obj-$(CONFIG_ARCH_R8A7794)	+= setup-r8a7794.o pm-r8a7794.o
>  obj-$(CONFIG_ARCH_EMEV2)	+= setup-emev2.o
>  obj-$(CONFIG_ARCH_R7S72100)	+= setup-r7s72100.o
>  
> diff --git a/arch/arm/mach-shmobile/pm-r8a7794.c b/arch/arm/mach-shmobile/pm-r8a7794.c
> new file mode 100644
> index 0000000..a8a94cf
> --- /dev/null
> +++ b/arch/arm/mach-shmobile/pm-r8a7794.c
> @@ -0,0 +1,44 @@
> +/*
> + * r8a7794 Power management support
> + *
> + * Copyright (C) 2015  Renesas Electronics Corporation
> + *
> + * 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
> + * for more details.
> + */
> +
> +#include <asm/io.h>
> +#include "pm-rcar.h"
> +#include "r8a7794.h"
> +
> +/* SYSC */
> +#define SYSCIER 0x0c
> +#define SYSCIMR 0x10
> +
> +#if defined(CONFIG_SMP)
> +
> +static void __init r8a7794_sysc_init(void)
> +{
> +	void __iomem *base = rcar_sysc_init(0xe6180000);
> +
> +	/* enable all interrupt sources, but do not use interrupt handler */
> +	iowrite32(0x00310060, base + SYSCIER);

Is it intentional that 0x00310060 differs from
the value of 0x0131000e used on the r8a7790 and r8a7791?

Could we consolidate this function across the R-Car Gen2 SoCs that
use them?

> +	iowrite32(0, base + SYSCIMR);
> +}
> +
> +#else /* CONFIG_SMP */
> +
> +static inline void r8a7794_sysc_init(void) {}
> +
> +#endif /* CONFIG_SMP */
> +
> +void __init r8a7794_pm_init(void)
> +{
> +	static int once;
> +
> +	if (once++)
> +		return;
> +
> +	r8a7794_sysc_init();
> +}
> diff --git a/arch/arm/mach-shmobile/r8a7794.h b/arch/arm/mach-shmobile/r8a7794.h
> new file mode 100644
> index 0000000..b83d387
> --- /dev/null
> +++ b/arch/arm/mach-shmobile/r8a7794.h
> @@ -0,0 +1,6 @@
> +#ifndef __ASM_R8A7794_H__
> +#define __ASM_R8A7794_H__
> +
> +void r8a7794_pm_init(void);
> +
> +#endif /* __ASM_R8A7794_H__ */
> -- 
> 1.7.9.5
> 
--
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
Gaku Inami March 4, 2015, 4:46 a.m. UTC | #2
Hi Simon-san,

Thank you for your feedback.

On 2015/03/04 10:40, Simon Horman wrote:

> Hi Inami-san,
>
> On Tue, Mar 03, 2015 at 10:20:22AM +0900, Gaku Inami wrote:
>> Add r8a7794 SYSC power management support.
>>
>> Signed-off-by: Gaku Inami <gaku.inami.xw@bp.renesas.com>
>> ---
>>  arch/arm/mach-shmobile/Makefile     |    2 +-
>>  arch/arm/mach-shmobile/pm-r8a7794.c |   44 +++++++++++++++++++++++++++++++++++
>>  arch/arm/mach-shmobile/r8a7794.h    |    6 +++++
>>  3 files changed, 51 insertions(+), 1 deletion(-)
>>  create mode 100644 arch/arm/mach-shmobile/pm-r8a7794.c
>>  create mode 100644 arch/arm/mach-shmobile/r8a7794.h
>>
>> diff --git a/arch/arm/mach-shmobile/Makefile b/arch/arm/mach-shmobile/Makefile
>> index d3aca07..cde95f8 100644
>> --- a/arch/arm/mach-shmobile/Makefile
>> +++ b/arch/arm/mach-shmobile/Makefile
>> @@ -13,7 +13,7 @@ obj-$(CONFIG_ARCH_R8A7778)	+= setup-r8a7778.o
>>  obj-$(CONFIG_ARCH_R8A7779)	+= setup-r8a7779.o pm-r8a7779.o
>>  obj-$(CONFIG_ARCH_R8A7790)	+= setup-r8a7790.o pm-r8a7790.o
>>  obj-$(CONFIG_ARCH_R8A7791)	+= setup-r8a7791.o pm-r8a7791.o
>> -obj-$(CONFIG_ARCH_R8A7794)	+= setup-r8a7794.o
>> +obj-$(CONFIG_ARCH_R8A7794)	+= setup-r8a7794.o pm-r8a7794.o
>>  obj-$(CONFIG_ARCH_EMEV2)	+= setup-emev2.o
>>  obj-$(CONFIG_ARCH_R7S72100)	+= setup-r7s72100.o
>>  
>> diff --git a/arch/arm/mach-shmobile/pm-r8a7794.c b/arch/arm/mach-shmobile/pm-r8a7794.c
>> new file mode 100644
>> index 0000000..a8a94cf
>> --- /dev/null
>> +++ b/arch/arm/mach-shmobile/pm-r8a7794.c
>> @@ -0,0 +1,44 @@
>> +/*
>> + * r8a7794 Power management support
>> + *
>> + * Copyright (C) 2015  Renesas Electronics Corporation
>> + *
>> + * 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
>> + * for more details.
>> + */
>> +
>> +#include <asm/io.h>
>> +#include "pm-rcar.h"
>> +#include "r8a7794.h"
>> +
>> +/* SYSC */
>> +#define SYSCIER 0x0c
>> +#define SYSCIMR 0x10
>> +
>> +#if defined(CONFIG_SMP)
>> +
>> +static void __init r8a7794_sysc_init(void)
>> +{
>> +	void __iomem *base = rcar_sysc_init(0xe6180000);
>> +
>> +	/* enable all interrupt sources, but do not use interrupt handler */
>> +	iowrite32(0x00310060, base + SYSCIER);
> Is it intentional that 0x00310060 differs from
> the value of 0x0131000e used on the r8a7790 and r8a7791?

Yes. According to R-CAR Gen2 HW manual, interrupt bits are 
different in each SoC. Therefore, I think the setting value 
of SYSCIER should be set to a different value in each SoC.

*Setting value of SYSCIER
 r8a7790 : 0x013111EF
 r8a7791 : 0x00111003
 r8a7794 : 0x00310060

I don't know why the value of 0x0131000e is used on the r8a7790
and the r8a7791. (maybe wrong value)

> Could we consolidate this function across the R-Car Gen2 SoCs that
> use them?

I will consider to consolidate these functions into one.

Regards,
Inami

--
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 March 4, 2015, 8:41 a.m. UTC | #3
Hi Inami-san,

On Wed, Mar 4, 2015 at 5:46 AM, Gaku Inami <gaku.inami.xw@bp.renesas.com> wrote:
>>> +static void __init r8a7794_sysc_init(void)
>>> +{
>>> +    void __iomem *base = rcar_sysc_init(0xe6180000);
>>> +
>>> +    /* enable all interrupt sources, but do not use interrupt handler */
>>> +    iowrite32(0x00310060, base + SYSCIER);
>> Is it intentional that 0x00310060 differs from
>> the value of 0x0131000e used on the r8a7790 and r8a7791?
>
> Yes. According to R-CAR Gen2 HW manual, interrupt bits are
> different in each SoC. Therefore, I think the setting value
> of SYSCIER should be set to a different value in each SoC.
>
> *Setting value of SYSCIER
>  r8a7790 : 0x013111EF
>  r8a7791 : 0x00111003
>  r8a7794 : 0x00310060
>
> I don't know why the value of 0x0131000e is used on the r8a7790
> and the r8a7791. (maybe wrong value)

This value was most probably just copied from pm-r8a7779.c
R-Car H1 has 4 four ARM cores, but there's no interrupt bit for ARM0,
hence the 0xe value for the lowest nibble.

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
Gaku Inami March 5, 2015, 4:23 a.m. UTC | #4
Hi Geert-san,

On 2015/03/04 17:41, Geert Uytterhoeven wrote:
> Hi Inami-san,
>
> On Wed, Mar 4, 2015 at 5:46 AM, Gaku Inami <gaku.inami.xw@bp.renesas.com> wrote:
>>>> +static void __init r8a7794_sysc_init(void)
>>>> +{
>>>> +    void __iomem *base = rcar_sysc_init(0xe6180000);
>>>> +
>>>> +    /* enable all interrupt sources, but do not use interrupt handler */
>>>> +    iowrite32(0x00310060, base + SYSCIER);
>>> Is it intentional that 0x00310060 differs from
>>> the value of 0x0131000e used on the r8a7790 and r8a7791?
>> Yes. According to R-CAR Gen2 HW manual, interrupt bits are
>> different in each SoC. Therefore, I think the setting value
>> of SYSCIER should be set to a different value in each SoC.
>>
>> *Setting value of SYSCIER
>>  r8a7790 : 0x013111EF
>>  r8a7791 : 0x00111003
>>  r8a7794 : 0x00310060
>>
>> I don't know why the value of 0x0131000e is used on the r8a7790
>> and the r8a7791. (maybe wrong value)
> This value was most probably just copied from pm-r8a7779.c
> R-Car H1 has 4 four ARM cores, but there's no interrupt bit for ARM0,
> hence the 0xe value for the lowest nibble.
>
Thank you for your comment. That make sense.

Regards,
Inami

--
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 6, 2015, 11:27 a.m. UTC | #5
On Thu, Mar 05, 2015 at 01:23:15PM +0900, Gaku Inami wrote:
> Hi Geert-san,
> 
> On 2015/03/04 17:41, Geert Uytterhoeven wrote:
> > Hi Inami-san,
> >
> > On Wed, Mar 4, 2015 at 5:46 AM, Gaku Inami <gaku.inami.xw@bp.renesas.com> wrote:
> >>>> +static void __init r8a7794_sysc_init(void)
> >>>> +{
> >>>> +    void __iomem *base = rcar_sysc_init(0xe6180000);
> >>>> +
> >>>> +    /* enable all interrupt sources, but do not use interrupt handler */
> >>>> +    iowrite32(0x00310060, base + SYSCIER);
> >>> Is it intentional that 0x00310060 differs from
> >>> the value of 0x0131000e used on the r8a7790 and r8a7791?
> >> Yes. According to R-CAR Gen2 HW manual, interrupt bits are
> >> different in each SoC. Therefore, I think the setting value
> >> of SYSCIER should be set to a different value in each SoC.
> >>
> >> *Setting value of SYSCIER
> >>  r8a7790 : 0x013111EF
> >>  r8a7791 : 0x00111003
> >>  r8a7794 : 0x00310060
> >>
> >> I don't know why the value of 0x0131000e is used on the r8a7790
> >> and the r8a7791. (maybe wrong value)
> > This value was most probably just copied from pm-r8a7779.c
> > R-Car H1 has 4 four ARM cores, but there's no interrupt bit for ARM0,
> > hence the 0xe value for the lowest nibble.
> >
> Thank you for your comment. That make sense.

Lets get this fixed. I'm happy to create some patches if no one
else wants to take it.
--
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/Makefile b/arch/arm/mach-shmobile/Makefile
index d3aca07..cde95f8 100644
--- a/arch/arm/mach-shmobile/Makefile
+++ b/arch/arm/mach-shmobile/Makefile
@@ -13,7 +13,7 @@  obj-$(CONFIG_ARCH_R8A7778)	+= setup-r8a7778.o
 obj-$(CONFIG_ARCH_R8A7779)	+= setup-r8a7779.o pm-r8a7779.o
 obj-$(CONFIG_ARCH_R8A7790)	+= setup-r8a7790.o pm-r8a7790.o
 obj-$(CONFIG_ARCH_R8A7791)	+= setup-r8a7791.o pm-r8a7791.o
-obj-$(CONFIG_ARCH_R8A7794)	+= setup-r8a7794.o
+obj-$(CONFIG_ARCH_R8A7794)	+= setup-r8a7794.o pm-r8a7794.o
 obj-$(CONFIG_ARCH_EMEV2)	+= setup-emev2.o
 obj-$(CONFIG_ARCH_R7S72100)	+= setup-r7s72100.o
 
diff --git a/arch/arm/mach-shmobile/pm-r8a7794.c b/arch/arm/mach-shmobile/pm-r8a7794.c
new file mode 100644
index 0000000..a8a94cf
--- /dev/null
+++ b/arch/arm/mach-shmobile/pm-r8a7794.c
@@ -0,0 +1,44 @@ 
+/*
+ * r8a7794 Power management support
+ *
+ * Copyright (C) 2015  Renesas Electronics Corporation
+ *
+ * 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
+ * for more details.
+ */
+
+#include <asm/io.h>
+#include "pm-rcar.h"
+#include "r8a7794.h"
+
+/* SYSC */
+#define SYSCIER 0x0c
+#define SYSCIMR 0x10
+
+#if defined(CONFIG_SMP)
+
+static void __init r8a7794_sysc_init(void)
+{
+	void __iomem *base = rcar_sysc_init(0xe6180000);
+
+	/* enable all interrupt sources, but do not use interrupt handler */
+	iowrite32(0x00310060, base + SYSCIER);
+	iowrite32(0, base + SYSCIMR);
+}
+
+#else /* CONFIG_SMP */
+
+static inline void r8a7794_sysc_init(void) {}
+
+#endif /* CONFIG_SMP */
+
+void __init r8a7794_pm_init(void)
+{
+	static int once;
+
+	if (once++)
+		return;
+
+	r8a7794_sysc_init();
+}
diff --git a/arch/arm/mach-shmobile/r8a7794.h b/arch/arm/mach-shmobile/r8a7794.h
new file mode 100644
index 0000000..b83d387
--- /dev/null
+++ b/arch/arm/mach-shmobile/r8a7794.h
@@ -0,0 +1,6 @@ 
+#ifndef __ASM_R8A7794_H__
+#define __ASM_R8A7794_H__
+
+void r8a7794_pm_init(void);
+
+#endif /* __ASM_R8A7794_H__ */