public inbox for linux-arm-kernel@lists.infradead.org 
 help / color / mirror / Atom feed
From: andrew@lunn•ch (Andrew Lunn)
To: linux-arm-kernel@lists•infradead.org
Subject: [PATCH 07/15] ARM: cpuidle: add init/exit routine
Date: Mon, 25 Mar 2013 19:10:38 +0100	[thread overview]
Message-ID: <20130325181038.GA631@lunn.ch> (raw)
In-Reply-To: <1364234140-514-8-git-send-email-daniel.lezcano@linaro.org>

On Mon, Mar 25, 2013 at 06:55:32PM +0100, Daniel Lezcano wrote:
> The init and exit routine for most of the drivers are the same,
> that is register the driver and register the device.
> 
> Provide a common function to do that in the cpuidle driver for ARM,
> so we can get rid of a lot of code duplication in the different SOC
> cpuidle drivers.

Hi Daniel

Please could you add a comment in the code about which piece is
specific to ARM, because its not obvious to me. Its not like there is
a reference to WFI for example. It looks like this code could go in
drivers/cpuidle/cpuidle.c

  Thanks
	Andrew

> 
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro•org>
> ---
>  arch/arm/include/asm/cpuidle.h |    4 +++
>  arch/arm/kernel/cpuidle.c      |   57 +++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 60 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/include/asm/cpuidle.h b/arch/arm/include/asm/cpuidle.h
> index 7367787..83a38ac 100644
> --- a/arch/arm/include/asm/cpuidle.h
> +++ b/arch/arm/include/asm/cpuidle.h
> @@ -4,6 +4,10 @@
>  extern int arm_cpuidle_simple_enter(struct cpuidle_device *dev,
>  				    struct cpuidle_driver *drv, int index);
>  
> +extern int arm_cpuidle_init(struct cpuidle_driver *drv);
> +
> +extern void arm_cpuidle_exit(struct cpuidle_driver *drv);
> +
>  /* Common ARM WFI state */
>  #define ARM_CPUIDLE_WFI_STATE_PWR(p) {\
>  	.enter                  = arm_cpuidle_simple_enter,\
> diff --git a/arch/arm/kernel/cpuidle.c b/arch/arm/kernel/cpuidle.c
> index 89545f6..13cfe3e 100644
> --- a/arch/arm/kernel/cpuidle.c
> +++ b/arch/arm/kernel/cpuidle.c
> @@ -9,13 +9,68 @@
>   * http://www.gnu.org/copyleft/gpl.html
>   */
>  
> +#include <linux/module.h>
>  #include <linux/cpuidle.h>
>  #include <asm/proc-fns.h>
>  
> +static DEFINE_PER_CPU(struct cpuidle_device, cpuidle_device);
> +
>  int arm_cpuidle_simple_enter(struct cpuidle_device *dev,
> -		struct cpuidle_driver *drv, int index)
> +			     struct cpuidle_driver *drv, int index)
>  {
>  	cpu_do_idle();
>  
>  	return index;
>  }
> +
> +int __init arm_cpuidle_init(struct cpuidle_driver *drv)
> +{
> +       int ret, cpu;
> +       struct cpuidle_device *device;
> +
> +       ret = cpuidle_register_driver(drv);
> +       if (ret) {
> +               printk(KERN_ERR "failed to register idle driver '%s'\n",
> +                       drv->name);
> +               return ret;
> +       }
> +
> +       for_each_online_cpu(cpu) {
> +
> +               device = &per_cpu(cpuidle_device, cpu);
> +               device->cpu = cpu;
> +               ret = cpuidle_register_device(device);
> +               if (ret) {
> +                       printk(KERN_ERR "Failed to register cpuidle "
> +                              "device for cpu%d\n", cpu);
> +                       goto out_unregister;
> +               }
> +       }
> +
> +out:
> +       return ret;
> +
> +out_unregister:
> +       for_each_online_cpu(cpu) {
> +               device = &per_cpu(cpuidle_device, cpu);
> +               cpuidle_unregister_device(device);
> +       }
> +
> +       cpuidle_unregister_driver(drv);
> +       goto out;
> +}
> +EXPORT_SYMBOL_GPL(arm_cpuidle_init);
> +
> +void __exit arm_cpuidle_exit(struct cpuidle_driver *drv)
> +{
> +	int cpu;
> +	struct cpuidle_device *device;
> +
> +	for_each_online_cpu(cpu) {
> +		device = &per_cpu(cpuidle_device, cpu);
> +		cpuidle_unregister_device(device);
> +	}
> +
> +	cpuidle_unregister_driver(drv);
> +}
> +EXPORT_SYMBOL_GPL(arm_cpuidle_exit);
> -- 
> 1.7.9.5
> 

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

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-25 17:55 [PATCH 00/15] ARM: cpuidle: code consolidation Daniel Lezcano
2013-03-25 17:55 ` [PATCH 01/15] timer: move enum definition out of ifdef section Daniel Lezcano
2013-03-26  4:36   ` Santosh Shilimkar
2013-03-26  9:55     ` Daniel Lezcano
2013-03-25 17:55 ` [PATCH 02/15] cpuidle: initialize the broadcast timer framework Daniel Lezcano
2013-03-26  4:39   ` Santosh Shilimkar
2013-03-25 17:55 ` [PATCH 03/15] cpuidle: ux500: remove timer broadcast initialization Daniel Lezcano
2013-03-27 14:46   ` Linus Walleij
2013-03-25 17:55 ` [PATCH 04/15] cpuidle: OMAP4: " Daniel Lezcano
2013-03-26  4:41   ` Santosh Shilimkar
2013-03-25 17:55 ` [PATCH 05/15] cpuidle: imx6: " Daniel Lezcano
2013-03-26  7:25   ` Shawn Guo
2013-03-26  9:43     ` Daniel Lezcano
2013-03-26 12:40       ` Shawn Guo
2013-03-26 12:53         ` Daniel Lezcano
2013-03-26 13:06           ` Rafael J. Wysocki
2013-03-26 14:28   ` Shawn Guo
2013-03-25 17:55 ` [PATCH 06/15] ARM: cpuidle: remove useless declaration Daniel Lezcano
2013-03-25 17:55 ` [PATCH 07/15] ARM: cpuidle: add init/exit routine Daniel Lezcano
2013-03-25 18:10   ` Andrew Lunn [this message]
2013-03-25 18:33     ` Daniel Lezcano
2013-03-25 19:09       ` Andrew Lunn
2013-03-25 19:20         ` Daniel Lezcano
2013-03-25 19:31           ` Amit Kucheria
2013-03-25 19:46             ` Daniel Lezcano
2013-03-25 21:42           ` Andrew Lunn
2013-03-25 22:09             ` Daniel Lezcano
2013-03-25 20:28       ` Nicolas Pitre
2013-03-25 21:53         ` Daniel Lezcano
2013-03-25 21:57           ` Nicolas Pitre
2013-03-25 17:55 ` [PATCH 08/15] ARM: ux500: cpuidle: use init/exit common routine Daniel Lezcano
2013-03-27 14:47   ` Linus Walleij
2013-03-25 17:55 ` [PATCH 09/15] ARM: at91: " Daniel Lezcano
2013-03-26  8:48   ` Nicolas Ferre
2013-03-25 17:55 ` [PATCH 10/15] ARM: OMAP3: " Daniel Lezcano
2013-03-25 17:55 ` [PATCH 11/15] ARM: s3c64xx: " Daniel Lezcano
2013-03-25 17:55 ` [PATCH 12/15] ARM: tegra1: " Daniel Lezcano
2013-03-25 17:55 ` [PATCH 13/15] ARM: shmobile: pm: fix init sections Daniel Lezcano
2013-03-27 14:09   ` Simon Horman
2013-03-25 17:55 ` [PATCH 14/15] ARM: shmobile: cpuidle: remove useless WFI function Daniel Lezcano
2013-03-27 14:09   ` Simon Horman
2013-03-25 17:55 ` [PATCH 15/15] ARM: shmobile: cpuidle: use init/exit common routine Daniel Lezcano
2013-03-27 14:10   ` Simon Horman
2013-03-25 20:27 ` [PATCH 00/15] ARM: cpuidle: code consolidation Rob Herring
2013-03-25 21:55   ` 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=20130325181038.GA631@lunn.ch \
    --to=andrew@lunn$(echo .)ch \
    --cc=linux-arm-kernel@lists$(echo .)infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox