ARM: mach-shmobile: r8a7779 power domain support
Magnus Damm
maintainerPATCH 1/1 ARM: mach-shmobile: r8a7779 power domain support
From: Magnus Damm <[email protected]>
Add power domain control support for the r8a7779 SoC.
This adds support for 4 power domains for I/O Devices together with code that can be used for CPU cores as well.
The only out of the ordinary experience is the need for ioremap() of SYSC registers. Because of that we need to execute some init function before setting up the domains.
---
Built on top of linux-3.2-rc + r8a7779 patches for now. Needs to be reworked to fit on top of the linux-pm tree.
arch/arm/mach-shmobile/Makefile | 1 arch/arm/mach-shmobile/include/mach/common.h | 1 arch/arm/mach-shmobile/include/mach/r8a7779.h | 35 +++ arch/arm/mach-shmobile/pm-r8a7779.c | 235 +++++++++++++++++++++++++ arch/arm/mach-shmobile/setup-r8a7779.c | 8 5 files changed, 280 insertions(+)
arch/arm/mach-shmobile/Makefile +1 -0
@@ -37,6 +37,7 @@ obj-$(CONFIG_ARCH_R8A7779) += entry-gic. obj-$(CONFIG_SUSPEND) += suspend.o obj-$(CONFIG_CPU_IDLE) += cpuidle.o obj-$(CONFIG_ARCH_SH7372) += pm-sh7372.o sleep-sh7372.o +obj-$(CONFIG_ARCH_R8A7779) += pm-r8a7779.o # Board objects obj-$(CONFIG_MACH_G3EVM) += board-g3evm.o
arch/arm/mach-shmobile/include/mach/common.h +1 -0
@@ -58,5 +58,6 @@ extern void r8a7779_add_early_devices(voextern void r8a7779_add_standard_devices (void );extern void r8a7779_clock_init (void );extern void r8a7779_pinmux_init (void ); +extern void r8a7779_pm_init (void );#endif /* __ARCH_MACH_COMMON_H */
arch/arm/mach-shmobile/include/mach/r8a7779.h +35 -0
@@ -1,6 +1,9 @@#ifndef __ASM_R8A7779_H__#define __ASM_R8A7779_H__ +#include <linux/sh_clk.h> +#include <linux/pm_domain.h> +/* Pin Function Controller: * GPIO_FN_xx - GPIO used to select pin function * GPIO_GP_x_x - GPIO mapped to real I/O pin on CPU
@@ -322,4 +325,36 @@ enum { GPIO_FN_GPS_MAG, GPIO_FN_FCE, GPIO_FN_SCK4_B, }; +struct platform_device ; + +struct r8a7779_pm_ch { +unsigned long chan_offs; +unsigned int chan_bit; +unsigned int isr_bit; +}; + +struct r8a7779_pm_domain { +struct generic_pm_domain genpd; +struct r8a7779_pm_ch ch; +}; + +static inline struct r8a7779_pm_ch *to_r8a7779_ch (struct generic_pm_domain *d) +{ + return &container_of(d, struct r8a7779_pm_domain, genpd)->ch; +} + +#ifdef CONFIG_PM +extern struct r8a7779_pm_domain r8a7779_sh4a; +extern struct r8a7779_pm_domain r8a7779_sgx; +extern struct r8a7779_pm_domain r8a7779_vdp1; +extern struct r8a7779_pm_domain r8a7779_impx3; + +extern void r8a7779_init_pm_domain (struct r8a7779_pm_domain *r8a7779_pd); +extern void r8a7779_add_device_to_domain (struct r8a7779_pm_domain *r8a7779_pd, +struct platform_device *pdev); +#else +#define r8a7779_init_pm_domain (pd) do { } while (0) +#define r8a7779_add_device_to_domain (pd, pdev) do { } while (0) +#endif /* CONFIG_PM */ +#endif /* __ASM_R8A7779_H__ */
arch/arm/mach-shmobile/pm-r8a7779.c new file +235 -0
235 lines not on this page · raw message
arch/arm/mach-shmobile/setup-r8a7779.c +8 -0
@@ -30,6 +30,7 @@#include <linux/sh_timer.h> #include <mach/hardware.h> #include <mach/r8a7779.h> +#include <mach/common.h> #include <asm/mach-types.h> #include <asm/mach/arch.h>
@@ -218,6 +219,13 @@ static struct platform_device *r8a7779_lvoid __init r8a7779_add_standard_devices (void ) { +r8a7779_pm_init (); + +r8a7779_init_pm_domain (&r8a7779_sh4a); +r8a7779_init_pm_domain (&r8a7779_sgx); +r8a7779_init_pm_domain (&r8a7779_vdp1); +r8a7779_init_pm_domain (&r8a7779_impx3); +platform_add_devices (r8a7779_early_devices,ARRAY_SIZE (r8a7779_early_devices)); platform_add_devices(r8a7779_late_devices,
Magnus Damm
maintainerPATCH 1/1 ARM: mach-shmobile: r8a7779 power domain support V2
From: Magnus Damm <[email protected]>
Add power domain control support for the r8a7779 SoC V2.
This adds support for 4 power domains for I/O Devices together with code that can be used for CPU cores as well.
The only out of the ordinary experience is the need for ioremap() of SYSC registers. Because of that we need to execute some init function before setting up the domains.
---
Built on top of linux-sh git rmobile/marzen branch.
Changes since V1:
- updated to fit on top of linux-pm changes already pulled by Linus
Suitable for merge through the linux-sh git tree.
arch/arm/mach-shmobile/Makefile | 1 arch/arm/mach-shmobile/include/mach/common.h | 1 arch/arm/mach-shmobile/include/mach/r8a7779.h | 35 +++ arch/arm/mach-shmobile/pm-r8a7779.c | 235 +++++++++++++++++++++++++ arch/arm/mach-shmobile/setup-r8a7779.c | 8 5 files changed, 280 insertions(+)
arch/arm/mach-shmobile/Makefile +1 -0
@@ -38,6 +38,7 @@ obj-$(CONFIG_ARCH_R8A7740) += entry-intc obj-$(CONFIG_SUSPEND) += suspend.o obj-$(CONFIG_CPU_IDLE) += cpuidle.o obj-$(CONFIG_ARCH_SH7372) += pm-sh7372.o sleep-sh7372.o +obj-$(CONFIG_ARCH_R8A7779) += pm-r8a7779.o # Board objects obj-$(CONFIG_MACH_G3EVM) += board-g3evm.o
arch/arm/mach-shmobile/include/mach/common.h +1 -0
@@ -66,5 +66,6 @@ extern void r8a7779_add_early_devices(voextern void r8a7779_add_standard_devices (void );extern void r8a7779_clock_init (void );extern void r8a7779_pinmux_init (void ); +extern void r8a7779_pm_init (void );#endif /* __ARCH_MACH_COMMON_H */
arch/arm/mach-shmobile/include/mach/r8a7779.h +35 -0
@@ -1,6 +1,9 @@#ifndef __ASM_R8A7779_H__#define __ASM_R8A7779_H__ +#include <linux/sh_clk.h> +#include <linux/pm_domain.h> +/* Pin Function Controller: * GPIO_FN_xx - GPIO used to select pin function * GPIO_GP_x_x - GPIO mapped to real I/O pin on CPU
@@ -322,4 +325,36 @@ enum { GPIO_FN_GPS_MAG, GPIO_FN_FCE, GPIO_FN_SCK4_B, }; +struct platform_device ; + +struct r8a7779_pm_ch { +unsigned long chan_offs; +unsigned int chan_bit; +unsigned int isr_bit; +}; + +struct r8a7779_pm_domain { +struct generic_pm_domain genpd; +struct r8a7779_pm_ch ch; +}; + +static inline struct r8a7779_pm_ch *to_r8a7779_ch (struct generic_pm_domain *d) +{ + return &container_of(d, struct r8a7779_pm_domain, genpd)->ch; +} + +#ifdef CONFIG_PM +extern struct r8a7779_pm_domain r8a7779_sh4a; +extern struct r8a7779_pm_domain r8a7779_sgx; +extern struct r8a7779_pm_domain r8a7779_vdp1; +extern struct r8a7779_pm_domain r8a7779_impx3; + +extern void r8a7779_init_pm_domain (struct r8a7779_pm_domain *r8a7779_pd); +extern void r8a7779_add_device_to_domain (struct r8a7779_pm_domain *r8a7779_pd, +struct platform_device *pdev); +#else +#define r8a7779_init_pm_domain (pd) do { } while (0) +#define r8a7779_add_device_to_domain (pd, pdev) do { } while (0) +#endif /* CONFIG_PM */ +#endif /* __ASM_R8A7779_H__ */
arch/arm/mach-shmobile/pm-r8a7779.c new file +235 -0
235 lines not on this page · raw message
arch/arm/mach-shmobile/setup-r8a7779.c +8 -0
@@ -30,6 +30,7 @@#include <linux/sh_timer.h> #include <mach/hardware.h> #include <mach/r8a7779.h> +#include <mach/common.h> #include <asm/mach-types.h> #include <asm/mach/arch.h>
@@ -218,6 +219,13 @@ static struct platform_device *r8a7779_lvoid __init r8a7779_add_standard_devices (void ) { +r8a7779_pm_init (); + +r8a7779_init_pm_domain (&r8a7779_sh4a); +r8a7779_init_pm_domain (&r8a7779_sgx); +r8a7779_init_pm_domain (&r8a7779_vdp1); +r8a7779_init_pm_domain (&r8a7779_impx3); +platform_add_devices (r8a7779_early_devices,ARRAY_SIZE (r8a7779_early_devices)); platform_add_devices(r8a7779_late_devices,
Paul Mundt
AppliedRe: [PATCH] ARM: mach-shmobile: r8a7779 power domain support V2
In reply to Magnus DammQuoted 8 lines · Magnus Damm
Add power domain control support for the r8a7779 SoC V2.
This adds support for 4 power domains for I/O Devices together with code that can be used for CPU cores as well.
The only out of the ordinary experience is the need for
ioremap()of SYSC registers. Because of that we need to execute some init function before setting up the domains.
Applied, thanks.
Quoted 2 lines
Built on top of linux-sh git rmobile/marzen branch.
I've now merged rmobile/marzen in to rmobile-latest, so hopefully that will be it for the merge window.