All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Lezcano <daniel.lezcano@linaro.org>
To: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: linux@maxim.org.za, nicolas.ferre@atmel.com,
	linux-arm-kernel@lists.infradead.org, patches@linaro.org,
	linaro-kernel@lists.linaro.org, linux-pm@vger.kernel.org
Subject: Re: [PATCH 1/2] ARM: at91: cpuidle: convert to platform driver
Date: Mon, 14 Oct 2013 16:18:25 +0200	[thread overview]
Message-ID: <525BFD31.3020406@linaro.org> (raw)
In-Reply-To: <20131014140406.GH11420@ns203013.ovh.net>

On 10/14/2013 04:04 PM, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 17:51 Sat 12 Oct     , Daniel Lezcano wrote:
>> Use the platform driver model to separate the cpuidle specific code from
>> the low level pm code. It allows to remove the dependency between
>> these two components.
>>
>> Tested-on usb-a9263 (at91sam9263)
>>
>> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>> ---
>>   arch/arm/mach-at91/cpuidle.c |   29 +++++++++++++++--------------
>>   arch/arm/mach-at91/pm.c      |   16 +++++++++++++++-
>>   2 files changed, 30 insertions(+), 15 deletions(-)
>>
>> diff --git a/arch/arm/mach-at91/cpuidle.c b/arch/arm/mach-at91/cpuidle.c
>> index 4ec6a6d..6cdc76d 100644
>> --- a/arch/arm/mach-at91/cpuidle.c
>> +++ b/arch/arm/mach-at91/cpuidle.c
>> @@ -21,26 +21,17 @@
>>   #include <linux/export.h>
>>   #include <asm/proc-fns.h>
>>   #include <asm/cpuidle.h>
>> -#include <mach/cpu.h>
>> -
>> -#include "pm.h"
>>
>>   #define AT91_MAX_STATES	2
>>
>> +static void (*at91_standby)(void);
>> +
>>   /* Actual code that puts the SoC in different idle states */
>>   static int at91_enter_idle(struct cpuidle_device *dev,
>>   			struct cpuidle_driver *drv,
>>   			       int index)
>>   {
>> -	if (cpu_is_at91rm9200())
>> -		at91rm9200_standby();
>> -	else if (cpu_is_at91sam9g45())
>> -		at91sam9g45_standby();
>> -	else if (cpu_is_at91sam9263())
>> -		at91sam9263_standby();
>> -	else
>> -		at91sam9_standby();
>> -
>> +	at91_standby();
>>   	return index;
>>   }
>>
>> @@ -60,9 +51,19 @@ static struct cpuidle_driver at91_idle_driver = {
>>   };
>>
>>   /* Initialize CPU idle by registering the idle states */
>> -static int __init at91_init_cpuidle(void)
>> +static int __init at91_cpuidle_probe(struct platform_device *dev)
>>   {
>> +	at91_standby = (void *)(dev->dev.platform_data);
>> +	
>>   	return cpuidle_register(&at91_idle_driver, NULL);
>>   }
>>
>> -device_initcall(at91_init_cpuidle);
>> +static struct platform_driver at91_cpuidle_driver = {
>> +	.driver = {
>> +		.name = "cpuidle-at91",
>> +		.owner = THIS_MODULE,
>> +	},
>> +	.probe = at91_cpuidle_probe,
>> +};
>> +
>> +module_platform_driver(at91_cpuidle_driver);
>> diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
>> index 15afb5d..debdbf8 100644
>> --- a/arch/arm/mach-at91/pm.c
>> +++ b/arch/arm/mach-at91/pm.c
>> @@ -314,6 +314,10 @@ static const struct platform_suspend_ops at91_pm_ops = {
>>   	.end	= at91_pm_end,
>>   };
>>
>> +static struct platform_device at91_cpuidle_device = {
>> +	.name = "cpuidle-at91",
>> +};
>> +
>>   static int __init at91_pm_init(void)
>>   {
>>   #ifdef CONFIG_AT91_SLOW_CLOCK
>> @@ -323,8 +327,18 @@ static int __init at91_pm_init(void)
>>   	pr_info("AT91: Power Management%s\n", (slow_clock ? " (with slow clock mode)" : ""));
>>
>>   	/* AT91RM9200 SDRAM low-power mode cannot be used with self-refresh. */
>> -	if (cpu_is_at91rm9200())
>> +	if (cpu_is_at91rm9200()) {
>> +		at91_cpuidle_device.dev.platform_data = at91rm9200_standby;
>>   		at91_ramc_write(0, AT91RM9200_SDRAMC_LPR, 0);
>> +	} else if (cpu_is_at91sam9g45()) {
>> +		at91_cpuidle_device.dev.platform_data = at91sam9g45_standby;
>> +	} else if (cpu_is_at91sam9263()) {
>> +		at91_cpuidle_device.dev.platform_data = at91sam9263_standby;
>> +	} else {
>> +		at91_cpuidle_device.dev.platform_data = at91sam9_standby;
> no this is too dangerous when adding new SoC
>
> you must list the supported SoC
>
> and I prefer to move this code to the SoC init structure

Do you mean register the platform_device in eg. at91rm9200_initialize 
with the right platform data ?


> so we can drop the if/else if/elsee
>
> and drop the issue of adding new and the arch_initcall
>
> Best Regards,
> J.
>> +	}
>> +	
>> +	platform_device_register(&at91_cpuidle_device);
>>
>>   	suspend_set_ops(&at91_pm_ops);
>>
>> --
>> 1.7.9.5
>>


-- 
  <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog


WARNING: multiple messages have this Message-ID (diff)
From: daniel.lezcano@linaro.org (Daniel Lezcano)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/2] ARM: at91: cpuidle: convert to platform driver
Date: Mon, 14 Oct 2013 16:18:25 +0200	[thread overview]
Message-ID: <525BFD31.3020406@linaro.org> (raw)
In-Reply-To: <20131014140406.GH11420@ns203013.ovh.net>

On 10/14/2013 04:04 PM, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 17:51 Sat 12 Oct     , Daniel Lezcano wrote:
>> Use the platform driver model to separate the cpuidle specific code from
>> the low level pm code. It allows to remove the dependency between
>> these two components.
>>
>> Tested-on usb-a9263 (at91sam9263)
>>
>> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>> ---
>>   arch/arm/mach-at91/cpuidle.c |   29 +++++++++++++++--------------
>>   arch/arm/mach-at91/pm.c      |   16 +++++++++++++++-
>>   2 files changed, 30 insertions(+), 15 deletions(-)
>>
>> diff --git a/arch/arm/mach-at91/cpuidle.c b/arch/arm/mach-at91/cpuidle.c
>> index 4ec6a6d..6cdc76d 100644
>> --- a/arch/arm/mach-at91/cpuidle.c
>> +++ b/arch/arm/mach-at91/cpuidle.c
>> @@ -21,26 +21,17 @@
>>   #include <linux/export.h>
>>   #include <asm/proc-fns.h>
>>   #include <asm/cpuidle.h>
>> -#include <mach/cpu.h>
>> -
>> -#include "pm.h"
>>
>>   #define AT91_MAX_STATES	2
>>
>> +static void (*at91_standby)(void);
>> +
>>   /* Actual code that puts the SoC in different idle states */
>>   static int at91_enter_idle(struct cpuidle_device *dev,
>>   			struct cpuidle_driver *drv,
>>   			       int index)
>>   {
>> -	if (cpu_is_at91rm9200())
>> -		at91rm9200_standby();
>> -	else if (cpu_is_at91sam9g45())
>> -		at91sam9g45_standby();
>> -	else if (cpu_is_at91sam9263())
>> -		at91sam9263_standby();
>> -	else
>> -		at91sam9_standby();
>> -
>> +	at91_standby();
>>   	return index;
>>   }
>>
>> @@ -60,9 +51,19 @@ static struct cpuidle_driver at91_idle_driver = {
>>   };
>>
>>   /* Initialize CPU idle by registering the idle states */
>> -static int __init at91_init_cpuidle(void)
>> +static int __init at91_cpuidle_probe(struct platform_device *dev)
>>   {
>> +	at91_standby = (void *)(dev->dev.platform_data);
>> +	
>>   	return cpuidle_register(&at91_idle_driver, NULL);
>>   }
>>
>> -device_initcall(at91_init_cpuidle);
>> +static struct platform_driver at91_cpuidle_driver = {
>> +	.driver = {
>> +		.name = "cpuidle-at91",
>> +		.owner = THIS_MODULE,
>> +	},
>> +	.probe = at91_cpuidle_probe,
>> +};
>> +
>> +module_platform_driver(at91_cpuidle_driver);
>> diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
>> index 15afb5d..debdbf8 100644
>> --- a/arch/arm/mach-at91/pm.c
>> +++ b/arch/arm/mach-at91/pm.c
>> @@ -314,6 +314,10 @@ static const struct platform_suspend_ops at91_pm_ops = {
>>   	.end	= at91_pm_end,
>>   };
>>
>> +static struct platform_device at91_cpuidle_device = {
>> +	.name = "cpuidle-at91",
>> +};
>> +
>>   static int __init at91_pm_init(void)
>>   {
>>   #ifdef CONFIG_AT91_SLOW_CLOCK
>> @@ -323,8 +327,18 @@ static int __init at91_pm_init(void)
>>   	pr_info("AT91: Power Management%s\n", (slow_clock ? " (with slow clock mode)" : ""));
>>
>>   	/* AT91RM9200 SDRAM low-power mode cannot be used with self-refresh. */
>> -	if (cpu_is_at91rm9200())
>> +	if (cpu_is_at91rm9200()) {
>> +		at91_cpuidle_device.dev.platform_data = at91rm9200_standby;
>>   		at91_ramc_write(0, AT91RM9200_SDRAMC_LPR, 0);
>> +	} else if (cpu_is_at91sam9g45()) {
>> +		at91_cpuidle_device.dev.platform_data = at91sam9g45_standby;
>> +	} else if (cpu_is_at91sam9263()) {
>> +		at91_cpuidle_device.dev.platform_data = at91sam9263_standby;
>> +	} else {
>> +		at91_cpuidle_device.dev.platform_data = at91sam9_standby;
> no this is too dangerous when adding new SoC
>
> you must list the supported SoC
>
> and I prefer to move this code to the SoC init structure

Do you mean register the platform_device in eg. at91rm9200_initialize 
with the right platform data ?


> so we can drop the if/else if/elsee
>
> and drop the issue of adding new and the arch_initcall
>
> Best Regards,
> J.
>> +	}
>> +	
>> +	platform_device_register(&at91_cpuidle_device);
>>
>>   	suspend_set_ops(&at91_pm_ops);
>>
>> --
>> 1.7.9.5
>>


-- 
  <http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

  reply	other threads:[~2013-10-14 14:18 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-12 15:51 [PATCH 1/2] ARM: at91: cpuidle: convert to platform driver Daniel Lezcano
2013-10-12 15:51 ` Daniel Lezcano
2013-10-12 15:51 ` [PATCH 2/2] ARM: at91: cpuidle: Move driver to drivers/cpuidle Daniel Lezcano
2013-10-12 15:51   ` Daniel Lezcano
2013-10-13  9:19   ` Thomas Petazzoni
2013-10-13  9:19     ` Thomas Petazzoni
2013-10-13 10:17     ` Daniel Lezcano
2013-10-13 10:17       ` Daniel Lezcano
2013-10-14 10:20       ` Bartlomiej Zolnierkiewicz
2013-10-14 10:20         ` Bartlomiej Zolnierkiewicz
2013-10-14 10:53         ` Daniel Lezcano
2013-10-14 10:53           ` Daniel Lezcano
2013-10-14 14:04 ` [PATCH 1/2] ARM: at91: cpuidle: convert to platform driver Jean-Christophe PLAGNIOL-VILLARD
2013-10-14 14:04   ` Jean-Christophe PLAGNIOL-VILLARD
2013-10-14 14:18   ` Daniel Lezcano [this message]
2013-10-14 14:18     ` Daniel Lezcano
2013-10-14 14:27     ` Jean-Christophe PLAGNIOL-VILLARD
2013-10-14 14:27       ` Jean-Christophe PLAGNIOL-VILLARD
2013-10-14 16:30       ` Daniel Lezcano
2013-10-14 16:30         ` Daniel Lezcano
2013-10-14 17:18         ` Jean-Christophe PLAGNIOL-VILLARD
2013-10-14 17:18           ` Jean-Christophe PLAGNIOL-VILLARD
2013-10-14 17:59           ` Daniel Lezcano
2013-10-14 17:59             ` Daniel Lezcano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=525BFD31.3020406@linaro.org \
    --to=daniel.lezcano@linaro.org \
    --cc=linaro-kernel@lists.linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux@maxim.org.za \
    --cc=nicolas.ferre@atmel.com \
    --cc=patches@linaro.org \
    --cc=plagnioj@jcrosoft.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.