diff mbox

[RESUBMIT,RFC,v2,3/3] drivers: mfd: Add support for Exynos PMU driver

Message ID 1398687607-4554-4-git-send-email-pankaj.dubey@samsung.com (mailing list archive)
State New, archived
Headers show

Commit Message

Pankaj Dubey April 28, 2014, 12:20 p.m. UTC
This patch moves Exynos PMU driver implementation from
"arm/mach-exynos" to "drivers/mfd".
This driver is mainly used for setting misc bits of register from PMU IP
of Exynos SoC which will be required to configure before Suspend/Resume.
Currently all these settings are done in "arch/arm/mach-exynos/pmu.c" but
moving ahead for ARM64 based SoC support, there is a need of DT based
implementation of PMU driver.
This driver uses already existing DT binding information.

CC: Sangbeom Kim <sbkim73@samsung.com>
CC: Samuel Ortiz <sameo@linux.intel.com>
CC: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Pankaj Dubey <pankaj.dubey@samsung.com>
---
 arch/arm/mach-exynos/Kconfig                           |    2 ++
 arch/arm/mach-exynos/Makefile                          |    2 --
 drivers/mfd/Kconfig                                    |    9 +++++++++
 drivers/mfd/Makefile                                   |    1 +
 arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c |    0
 5 files changed, 12 insertions(+), 2 deletions(-)
 rename arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c (100%)

diff --git a/arch/arm/mach-exynos/pmu.c b/drivers/mfd/exynos-pmu.c
similarity index 100%
rename from arch/arm/mach-exynos/pmu.c
rename to drivers/mfd/exynos-pmu.c

Comments

Lee Jones April 28, 2014, 12:18 p.m. UTC | #1
> This patch moves Exynos PMU driver implementation from
> "arm/mach-exynos" to "drivers/mfd".
> This driver is mainly used for setting misc bits of register from PMU IP
> of Exynos SoC which will be required to configure before Suspend/Resume.
> Currently all these settings are done in "arch/arm/mach-exynos/pmu.c" but
> moving ahead for ARM64 based SoC support, there is a need of DT based
> implementation of PMU driver.
> This driver uses already existing DT binding information.
> 
> CC: Sangbeom Kim <sbkim73@samsung.com>
> CC: Samuel Ortiz <sameo@linux.intel.com>
> CC: Lee Jones <lee.jones@linaro.org>
> Signed-off-by: Pankaj Dubey <pankaj.dubey@samsung.com>
> ---
>  arch/arm/mach-exynos/Kconfig                           |    2 ++
>  arch/arm/mach-exynos/Makefile                          |    2 --
>  drivers/mfd/Kconfig                                    |    9 +++++++++
>  drivers/mfd/Makefile                                   |    1 +
>  arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c |    0
>  5 files changed, 12 insertions(+), 2 deletions(-)
>  rename arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c (100%)

[...]

> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index 3383412..fd48870 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -1203,6 +1203,15 @@ config MFD_STW481X
>  	  in various ST Microelectronics and ST-Ericsson embedded
>  	  Nomadik series.
>  
> +config MFD_EXYNOS_PMU
> +	tristate "Support Exynos Power Managment Unit"
> +	depends on ARM || ARM64
> +	help
> +	Exynos SoC have Power Management Unit (PMU) which controls power and
> +	operation state of Exynos SoC in two different ways. This driver
> +	provides impmentation of PMU driver and provides basic functionality
> +	required during these operation state.
> +

The help should be indented. Take a look at the other entries.
Lee Jones April 28, 2014, 12:26 p.m. UTC | #2
> This patch moves Exynos PMU driver implementation from
> "arm/mach-exynos" to "drivers/mfd".
> This driver is mainly used for setting misc bits of register from PMU IP
> of Exynos SoC which will be required to configure before Suspend/Resume.
> Currently all these settings are done in "arch/arm/mach-exynos/pmu.c" but
> moving ahead for ARM64 based SoC support, there is a need of DT based
> implementation of PMU driver.
> This driver uses already existing DT binding information.
> 
> CC: Sangbeom Kim <sbkim73@samsung.com>
> CC: Samuel Ortiz <sameo@linux.intel.com>
> CC: Lee Jones <lee.jones@linaro.org>
> Signed-off-by: Pankaj Dubey <pankaj.dubey@samsung.com>
> ---
>  arch/arm/mach-exynos/Kconfig                           |    2 ++
>  arch/arm/mach-exynos/Makefile                          |    2 --
>  drivers/mfd/Kconfig                                    |    9 +++++++++
>  drivers/mfd/Makefile                                   |    1 +
>  arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c |    0
>  5 files changed, 12 insertions(+), 2 deletions(-)
>  rename arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c (100%)

So I just took a look at the code as zero changes looks suspicious to
me. The driver can not simply be copied and pasted into the MFD
subsystem in its current state.

The fundamental question is; is this chip actually an MFD? What does
it do besides Power Management?

> diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
> index 2f60c90..79559b4 100644
> --- a/arch/arm/mach-exynos/Kconfig
> +++ b/arch/arm/mach-exynos/Kconfig
> @@ -27,6 +27,7 @@ config ARCH_EXYNOS4
>  	select PM_GENERIC_DOMAINS if PM_RUNTIME
>  	select S5P_DEV_MFC
>  	select MFD_SYSCON
> +	select MFD_EXYNOS_PMU
>  	help
>  	  Samsung EXYNOS4 SoCs based systems
>  
> @@ -38,6 +39,7 @@ config ARCH_EXYNOS5
>  	select HAVE_SMP
>  	select PINCTRL
>  	select MFD_SYSCON
> +	select MFD_EXYNOS_PMU
>  	help
>  	  Samsung EXYNOS5 (Cortex-A15) SoC based systems
>  
> diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile
> index a656dbe..19fdf17 100644
> --- a/arch/arm/mach-exynos/Makefile
> +++ b/arch/arm/mach-exynos/Makefile
> @@ -18,8 +18,6 @@ obj-$(CONFIG_PM_SLEEP)		+= pm.o sleep.o
>  obj-$(CONFIG_PM_GENERIC_DOMAINS) += pm_domains.o
>  obj-$(CONFIG_CPU_IDLE)		+= cpuidle.o
>  
> -obj-$(CONFIG_ARCH_EXYNOS)	+= pmu.o
> -
>  obj-$(CONFIG_SMP)		+= platsmp.o headsmp.o
>  
>  obj-$(CONFIG_HOTPLUG_CPU)	+= hotplug.o
> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index 3383412..fd48870 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -1203,6 +1203,15 @@ config MFD_STW481X
>  	  in various ST Microelectronics and ST-Ericsson embedded
>  	  Nomadik series.
>  
> +config MFD_EXYNOS_PMU
> +	tristate "Support Exynos Power Managment Unit"
> +	depends on ARM || ARM64
> +	help
> +	Exynos SoC have Power Management Unit (PMU) which controls power and
> +	operation state of Exynos SoC in two different ways. This driver
> +	provides impmentation of PMU driver and provides basic functionality
> +	required during these operation state.
> +
>  menu "Multimedia Capabilities Port drivers"
>  	depends on ARCH_SA1100
>  
> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> index 2851275..7c43d07 100644
> --- a/drivers/mfd/Makefile
> +++ b/drivers/mfd/Makefile
> @@ -166,3 +166,4 @@ obj-$(CONFIG_MFD_RETU)		+= retu-mfd.o
>  obj-$(CONFIG_MFD_AS3711)	+= as3711.o
>  obj-$(CONFIG_MFD_AS3722)	+= as3722.o
>  obj-$(CONFIG_MFD_STW481X)	+= stw481x.o
> +obj-$(CONFIG_MFD_EXYNOS_PMU)	+= exynos-pmu.o
> diff --git a/arch/arm/mach-exynos/pmu.c b/drivers/mfd/exynos-pmu.c
> similarity index 100%
> rename from arch/arm/mach-exynos/pmu.c
> rename to drivers/mfd/exynos-pmu.c
Catalin Marinas April 28, 2014, 5:37 p.m. UTC | #3
On Mon, Apr 28, 2014 at 01:26:46PM +0100, Lee Jones wrote:
> > This patch moves Exynos PMU driver implementation from
> > "arm/mach-exynos" to "drivers/mfd".
> > This driver is mainly used for setting misc bits of register from PMU IP
> > of Exynos SoC which will be required to configure before Suspend/Resume.
> > Currently all these settings are done in "arch/arm/mach-exynos/pmu.c" but
> > moving ahead for ARM64 based SoC support, there is a need of DT based
> > implementation of PMU driver.
> > This driver uses already existing DT binding information.
> > 
> > CC: Sangbeom Kim <sbkim73@samsung.com>
> > CC: Samuel Ortiz <sameo@linux.intel.com>
> > CC: Lee Jones <lee.jones@linaro.org>
> > Signed-off-by: Pankaj Dubey <pankaj.dubey@samsung.com>
> > ---
> >  arch/arm/mach-exynos/Kconfig                           |    2 ++
> >  arch/arm/mach-exynos/Makefile                          |    2 --
> >  drivers/mfd/Kconfig                                    |    9 +++++++++
> >  drivers/mfd/Makefile                                   |    1 +
> >  arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c |    0
> >  5 files changed, 12 insertions(+), 2 deletions(-)
> >  rename arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c (100%)
> 
> So I just took a look at the code as zero changes looks suspicious to
> me. The driver can not simply be copied and pasted into the MFD
> subsystem in its current state.
> 
> The fundamental question is; is this chip actually an MFD? What does
> it do besides Power Management?

I looked at the code briefly as well and I don't think it matches the
mfd idea. Maybe it could be merged together with
arch/arm/mach-exynos/pm.c and moved to drivers/power/ or a more
appropriate directory for platform_suspend_ops.
Pankaj Dubey April 29, 2014, 7:54 a.m. UTC | #4
On 04/28/2014 09:26 PM, Lee Jones wrote:
>> This patch moves Exynos PMU driver implementation from
>> "arm/mach-exynos" to "drivers/mfd".
>> This driver is mainly used for setting misc bits of register from PMU IP
>> of Exynos SoC which will be required to configure before Suspend/Resume.
>> Currently all these settings are done in "arch/arm/mach-exynos/pmu.c" but
>> moving ahead for ARM64 based SoC support, there is a need of DT based
>> implementation of PMU driver.
>> This driver uses already existing DT binding information.
>>
>> CC: Sangbeom Kim <sbkim73@samsung.com>
>> CC: Samuel Ortiz <sameo@linux.intel.com>
>> CC: Lee Jones <lee.jones@linaro.org>
>> Signed-off-by: Pankaj Dubey <pankaj.dubey@samsung.com>
>> ---
>>   arch/arm/mach-exynos/Kconfig                           |    2 ++
>>   arch/arm/mach-exynos/Makefile                          |    2 --
>>   drivers/mfd/Kconfig                                    |    9 +++++++++
>>   drivers/mfd/Makefile                                   |    1 +
>>   arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c |    0
>>   5 files changed, 12 insertions(+), 2 deletions(-)
>>   rename arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c (100%)
> So I just took a look at the code as zero changes looks suspicious to
> me. The driver can not simply be copied and pasted into the MFD
> subsystem in its current state.
>
> The fundamental question is; is this chip actually an MFD? What does
> it do besides Power Management?

Exynos PMU chip controls different power states of Exynos, so mainly it
does power management related stuff. Apart from this it has few registers
which controls PHY of various IP blocks of Exynos such as USB, HDMI,
ADC etc. But these phy controlling register are currently being accessed
via "syscon" driver provided regmap APIs. For same the same reason
Exynos PMU has second compatibility string as "syscon".

>> diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
>> index 2f60c90..79559b4 100644
>> --- a/arch/arm/mach-exynos/Kconfig
>> +++ b/arch/arm/mach-exynos/Kconfig
>> @@ -27,6 +27,7 @@ config ARCH_EXYNOS4
>>   	select PM_GENERIC_DOMAINS if PM_RUNTIME
>>   	select S5P_DEV_MFC
>>   	select MFD_SYSCON
>> +	select MFD_EXYNOS_PMU
>>   	help
>>   	  Samsung EXYNOS4 SoCs based systems
>>   
>> @@ -38,6 +39,7 @@ config ARCH_EXYNOS5
>>   	select HAVE_SMP
>>   	select PINCTRL
>>   	select MFD_SYSCON
>> +	select MFD_EXYNOS_PMU
>>   	help
>>   	  Samsung EXYNOS5 (Cortex-A15) SoC based systems
>>   
>> diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile
>> index a656dbe..19fdf17 100644
>> --- a/arch/arm/mach-exynos/Makefile
>> +++ b/arch/arm/mach-exynos/Makefile
>> @@ -18,8 +18,6 @@ obj-$(CONFIG_PM_SLEEP)		+= pm.o sleep.o
>>   obj-$(CONFIG_PM_GENERIC_DOMAINS) += pm_domains.o
>>   obj-$(CONFIG_CPU_IDLE)		+= cpuidle.o
>>   
>> -obj-$(CONFIG_ARCH_EXYNOS)	+= pmu.o
>> -
>>   obj-$(CONFIG_SMP)		+= platsmp.o headsmp.o
>>   
>>   obj-$(CONFIG_HOTPLUG_CPU)	+= hotplug.o
>> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
>> index 3383412..fd48870 100644
>> --- a/drivers/mfd/Kconfig
>> +++ b/drivers/mfd/Kconfig
>> @@ -1203,6 +1203,15 @@ config MFD_STW481X
>>   	  in various ST Microelectronics and ST-Ericsson embedded
>>   	  Nomadik series.
>>   
>> +config MFD_EXYNOS_PMU
>> +	tristate "Support Exynos Power Managment Unit"
>> +	depends on ARM || ARM64
>> +	help
>> +	Exynos SoC have Power Management Unit (PMU) which controls power and
>> +	operation state of Exynos SoC in two different ways. This driver
>> +	provides impmentation of PMU driver and provides basic functionality
>> +	required during these operation state.
>> +
>>   menu "Multimedia Capabilities Port drivers"
>>   	depends on ARCH_SA1100
>>   
>> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
>> index 2851275..7c43d07 100644
>> --- a/drivers/mfd/Makefile
>> +++ b/drivers/mfd/Makefile
>> @@ -166,3 +166,4 @@ obj-$(CONFIG_MFD_RETU)		+= retu-mfd.o
>>   obj-$(CONFIG_MFD_AS3711)	+= as3711.o
>>   obj-$(CONFIG_MFD_AS3722)	+= as3722.o
>>   obj-$(CONFIG_MFD_STW481X)	+= stw481x.o
>> +obj-$(CONFIG_MFD_EXYNOS_PMU)	+= exynos-pmu.o
>> diff --git a/arch/arm/mach-exynos/pmu.c b/drivers/mfd/exynos-pmu.c
>> similarity index 100%
>> rename from arch/arm/mach-exynos/pmu.c
>> rename to drivers/mfd/exynos-pmu.c
Pankaj Dubey April 29, 2014, 8:05 a.m. UTC | #5
On 04/29/2014 02:37 AM, Catalin Marinas wrote:
> On Mon, Apr 28, 2014 at 01:26:46PM +0100, Lee Jones wrote:
>>> This patch moves Exynos PMU driver implementation from
>>> "arm/mach-exynos" to "drivers/mfd".
>>> This driver is mainly used for setting misc bits of register from PMU IP
>>> of Exynos SoC which will be required to configure before Suspend/Resume.
>>> Currently all these settings are done in "arch/arm/mach-exynos/pmu.c" but
>>> moving ahead for ARM64 based SoC support, there is a need of DT based
>>> implementation of PMU driver.
>>> This driver uses already existing DT binding information.
>>>
>>> CC: Sangbeom Kim <sbkim73@samsung.com>
>>> CC: Samuel Ortiz <sameo@linux.intel.com>
>>> CC: Lee Jones <lee.jones@linaro.org>
>>> Signed-off-by: Pankaj Dubey <pankaj.dubey@samsung.com>
>>> ---
>>>   arch/arm/mach-exynos/Kconfig                           |    2 ++
>>>   arch/arm/mach-exynos/Makefile                          |    2 --
>>>   drivers/mfd/Kconfig                                    |    9 +++++++++
>>>   drivers/mfd/Makefile                                   |    1 +
>>>   arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c |    0
>>>   5 files changed, 12 insertions(+), 2 deletions(-)
>>>   rename arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c (100%)
>> So I just took a look at the code as zero changes looks suspicious to
>> me. The driver can not simply be copied and pasted into the MFD
>> subsystem in its current state.
>>
>> The fundamental question is; is this chip actually an MFD? What does
>> it do besides Power Management?
> I looked at the code briefly as well and I don't think it matches the
> mfd idea. Maybe it could be merged together with
> arch/arm/mach-exynos/pm.c and moved to drivers/power/ or a more
> appropriate directory for platform_suspend_ops.

Well I was also not quite sure about if "drivers/mfd" is proper place
for Exynos PMU, so I posted this patch as RFC.

If it does not seems matching with "drivers/mfd" idea, will it be suitable
for "drivers/power/" or should I go for something like "drivers/soc/samsung"?

Regarding your second point about merging this code with "mach-exynos/pm.c"
We have plan for this but, I would like to get it done via a separate patch 
series
as "mach-exynos/pm.c" has a lot of dependencies and requires significant
modifications. So this work can be treated as a first step towards that 
direction.
Lee Jones April 29, 2014, 9:27 a.m. UTC | #6
> >>This patch moves Exynos PMU driver implementation from
> >>"arm/mach-exynos" to "drivers/mfd".
> >>This driver is mainly used for setting misc bits of register from PMU IP
> >>of Exynos SoC which will be required to configure before Suspend/Resume.
> >>Currently all these settings are done in "arch/arm/mach-exynos/pmu.c" but
> >>moving ahead for ARM64 based SoC support, there is a need of DT based
> >>implementation of PMU driver.
> >>This driver uses already existing DT binding information.
> >>
> >>CC: Sangbeom Kim <sbkim73@samsung.com>
> >>CC: Samuel Ortiz <sameo@linux.intel.com>
> >>CC: Lee Jones <lee.jones@linaro.org>
> >>Signed-off-by: Pankaj Dubey <pankaj.dubey@samsung.com>
> >>---
> >>  arch/arm/mach-exynos/Kconfig                           |    2 ++
> >>  arch/arm/mach-exynos/Makefile                          |    2 --
> >>  drivers/mfd/Kconfig                                    |    9 +++++++++
> >>  drivers/mfd/Makefile                                   |    1 +
> >>  arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c |    0
> >>  5 files changed, 12 insertions(+), 2 deletions(-)
> >>  rename arch/arm/mach-exynos/pmu.c => drivers/mfd/exynos-pmu.c (100%)
> >So I just took a look at the code as zero changes looks suspicious to
> >me. The driver can not simply be copied and pasted into the MFD
> >subsystem in its current state.
> >
> >The fundamental question is; is this chip actually an MFD? What does
> >it do besides Power Management?
> 
> Exynos PMU chip controls different power states of Exynos, so mainly it
> does power management related stuff. Apart from this it has few registers
> which controls PHY of various IP blocks of Exynos such as USB, HDMI,
> ADC etc. But these phy controlling register are currently being accessed
> via "syscon" driver provided regmap APIs. For same the same reason
> Exynos PMU has second compatibility string as "syscon".

I suggest that this is not suitable for the MFD subsystem then.

Try drivers/power.
diff mbox

Patch

diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
index 2f60c90..79559b4 100644
--- a/arch/arm/mach-exynos/Kconfig
+++ b/arch/arm/mach-exynos/Kconfig
@@ -27,6 +27,7 @@  config ARCH_EXYNOS4
 	select PM_GENERIC_DOMAINS if PM_RUNTIME
 	select S5P_DEV_MFC
 	select MFD_SYSCON
+	select MFD_EXYNOS_PMU
 	help
 	  Samsung EXYNOS4 SoCs based systems
 
@@ -38,6 +39,7 @@  config ARCH_EXYNOS5
 	select HAVE_SMP
 	select PINCTRL
 	select MFD_SYSCON
+	select MFD_EXYNOS_PMU
 	help
 	  Samsung EXYNOS5 (Cortex-A15) SoC based systems
 
diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile
index a656dbe..19fdf17 100644
--- a/arch/arm/mach-exynos/Makefile
+++ b/arch/arm/mach-exynos/Makefile
@@ -18,8 +18,6 @@  obj-$(CONFIG_PM_SLEEP)		+= pm.o sleep.o
 obj-$(CONFIG_PM_GENERIC_DOMAINS) += pm_domains.o
 obj-$(CONFIG_CPU_IDLE)		+= cpuidle.o
 
-obj-$(CONFIG_ARCH_EXYNOS)	+= pmu.o
-
 obj-$(CONFIG_SMP)		+= platsmp.o headsmp.o
 
 obj-$(CONFIG_HOTPLUG_CPU)	+= hotplug.o
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 3383412..fd48870 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -1203,6 +1203,15 @@  config MFD_STW481X
 	  in various ST Microelectronics and ST-Ericsson embedded
 	  Nomadik series.
 
+config MFD_EXYNOS_PMU
+	tristate "Support Exynos Power Managment Unit"
+	depends on ARM || ARM64
+	help
+	Exynos SoC have Power Management Unit (PMU) which controls power and
+	operation state of Exynos SoC in two different ways. This driver
+	provides impmentation of PMU driver and provides basic functionality
+	required during these operation state.
+
 menu "Multimedia Capabilities Port drivers"
 	depends on ARCH_SA1100
 
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 2851275..7c43d07 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -166,3 +166,4 @@  obj-$(CONFIG_MFD_RETU)		+= retu-mfd.o
 obj-$(CONFIG_MFD_AS3711)	+= as3711.o
 obj-$(CONFIG_MFD_AS3722)	+= as3722.o
 obj-$(CONFIG_MFD_STW481X)	+= stw481x.o
+obj-$(CONFIG_MFD_EXYNOS_PMU)	+= exynos-pmu.o