linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: daniel.lezcano@linaro.org (Daniel Lezcano)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 13/17][V2] ARM: OMAP3: cpuidle - use omap3_idle_data directly
Date: Wed,  4 Apr 2012 22:12:47 +0200	[thread overview]
Message-ID: <1333570371-1389-14-git-send-email-daniel.lezcano@linaro.org> (raw)
In-Reply-To: <1333570371-1389-1-git-send-email-daniel.lezcano@linaro.org>

We are storing the 'omap3_idle_data' in the private data field
of the cpuidle device. As we are using this variable only in this file,
that does not really make sense. Let's use the global variable directly
instead dereferencing pointers in an idle critical loop.

As the table is initialized statically, let's remove the initialization at
startup too.

Also, that simplfies the code.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Jean Pihet <j-pihet@ti.com>
---
 arch/arm/mach-omap2/cpuidle34xx.c |   65 ++++--------------------------------
 1 files changed, 8 insertions(+), 57 deletions(-)

diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c
index 332b636..e4738eb 100644
--- a/arch/arm/mach-omap2/cpuidle34xx.c
+++ b/arch/arm/mach-omap2/cpuidle34xx.c
@@ -97,8 +97,7 @@ static int __omap3_enter_idle(struct cpuidle_device *dev,
 				struct cpuidle_driver *drv,
 				int index)
 {
-	struct omap3_idle_statedata *cx =
-			cpuidle_get_statedata(&dev->states_usage[index]);
+	struct omap3_idle_statedata *cx = &omap3_idle_data[index];
 	u32 mpu_state = cx->mpu_state, core_state = cx->core_state;
 
 	local_fiq_disable();
@@ -178,9 +177,8 @@ static int next_valid_state(struct cpuidle_device *dev,
 			struct cpuidle_driver *drv,
 				int index)
 {
-	struct cpuidle_state_usage *curr_usage = &dev->states_usage[index];
 	struct cpuidle_state *curr = &drv->states[index];
-	struct omap3_idle_statedata *cx = cpuidle_get_statedata(curr_usage);
+	struct omap3_idle_statedata *cx = &omap3_idle_data[index];
 	u32 mpu_deepest_state = PWRDM_POWER_RET;
 	u32 core_deepest_state = PWRDM_POWER_RET;
 	int next_index = -1;
@@ -220,7 +218,7 @@ static int next_valid_state(struct cpuidle_device *dev,
 		 */
 		idx--;
 		for (; idx >= 0; idx--) {
-			cx = cpuidle_get_statedata(&dev->states_usage[idx]);
+			cx =  &omap3_idle_data[idx];
 			if ((cx->mpu_state >= mpu_deepest_state) &&
 			    (cx->core_state >= core_deepest_state)) {
 				next_index = idx;
@@ -277,7 +275,7 @@ static int omap3_enter_idle_bm(struct cpuidle_device *dev,
 	 * Prevent PER off if CORE is not in retention or off as this
 	 * would disable PER wakeups completely.
 	 */
-	cx = cpuidle_get_statedata(&dev->states_usage[index]);
+	cx = &omap3_idle_data[index];
 	core_next_state = cx->core_state;
 	per_next_state = per_saved_state = pwrdm_read_next_pwrst(per_pd);
 	if ((per_next_state == PWRDM_POWER_OFF) &&
@@ -367,19 +365,6 @@ struct cpuidle_driver omap3_idle_driver = {
 	.safe_state_index = 0,
 };
 
-/* Helper to register the driver_data */
-static inline struct omap3_idle_statedata *_fill_cstate_usage(
-					struct cpuidle_device *dev,
-					int idx)
-{
-	struct omap3_idle_statedata *cx = &omap3_idle_data[idx];
-	struct cpuidle_state_usage *state_usage = &dev->states_usage[idx];
-
-	cpuidle_set_statedata(state_usage, cx);
-
-	return cx;
-}
-
 /**
  * omap3_idle_init - Init routine for OMAP3 idle
  *
@@ -390,48 +375,12 @@ int __init omap3_idle_init(void)
 {
 	struct cpuidle_device *dev;
 	struct cpuidle_driver *drv = &omap3_idle_driver;
-	struct omap3_idle_statedata *cx;
 
 	mpu_pd = pwrdm_lookup("mpu_pwrdm");
 	core_pd = pwrdm_lookup("core_pwrdm");
 	per_pd = pwrdm_lookup("per_pwrdm");
 	cam_pd = pwrdm_lookup("cam_pwrdm");
 
-
-	dev = &per_cpu(omap3_idle_dev, smp_processor_id());
-
-	/* C1 . MPU WFI + Core active */
-	cx = _fill_cstate_usage(dev, 0);
-	cx->mpu_state = PWRDM_POWER_ON;
-	cx->core_state = PWRDM_POWER_ON;
-
-	/* C2 . MPU WFI + Core inactive */
-	cx = _fill_cstate_usage(dev, 1);
-	cx->mpu_state = PWRDM_POWER_ON;
-	cx->core_state = PWRDM_POWER_ON;
-
-	/* C3 . MPU CSWR + Core inactive */
-	cx = _fill_cstate_usage(dev, 2);
-	cx->mpu_state = PWRDM_POWER_RET;
-	cx->core_state = PWRDM_POWER_ON;
-
-	/* C4 . MPU OFF + Core inactive */
-	cx = _fill_cstate_usage(dev, 3);
-	cx->mpu_state = PWRDM_POWER_OFF;
-	cx->core_state = PWRDM_POWER_ON;
-
-	/* C5 . MPU RET + Core RET */
-	cx = _fill_cstate_usage(dev, 4);
-	cx->mpu_state = PWRDM_POWER_RET;
-	cx->core_state = PWRDM_POWER_RET;
-
-	/* C6 . MPU OFF + Core RET */
-	cx = _fill_cstate_usage(dev, 5);
-	cx->mpu_state = PWRDM_POWER_OFF;
-	cx->core_state = PWRDM_POWER_RET;
-
-	/* C7 . MPU OFF + Core OFF */
-	cx = _fill_cstate_usage(dev, 6);
 	/*
 	 * Erratum i583: implementation for ES rev < Es1.2 on 3630. We cannot
 	 * enable OFF mode in a stable form for previous revisions.
@@ -442,11 +391,13 @@ int __init omap3_idle_init(void)
 		pr_warn("%s: core off state C7 disabled due to i583\n",
 			__func__);
 	}
-	cx->mpu_state = PWRDM_POWER_OFF;
-	cx->core_state = PWRDM_POWER_OFF;
 
 	cpuidle_register_driver(&omap3_idle_driver);
 
+	dev = &per_cpu(omap3_idle_dev, smp_processor_id());
+	dev->cpu = 0;
+	dev->state_count = drv->state_count;
+
 	if (cpuidle_register_device(dev)) {
 		printk(KERN_ERR "%s: CPUidle register device failed\n",
 		       __func__);
-- 
1.7.5.4

  parent reply	other threads:[~2012-04-04 20:12 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-04 20:12 [PATCH 00/17][V2] ARM: OMAP3/4 : cpuidle34xx and cpuidle44xx cleanups Daniel Lezcano
2012-04-04 20:12 ` [PATCH 01/17][V2] ARM: OMAP4: cpuidle - Remove unused valid field Daniel Lezcano
2012-04-04 20:12 ` [PATCH 02/17][V2] ARM: OMAP4: cpuidle - Declare the states with the driver declaration Daniel Lezcano
2012-04-09 22:37   ` Kevin Hilman
2012-04-19 13:58     ` Daniel Lezcano
2012-04-23 14:06       ` Daniel Lezcano
2012-04-23 17:08         ` Kevin Hilman
2012-04-23 22:11           ` Daniel Lezcano
2012-04-24  0:27             ` Kevin Hilman
2012-04-04 20:12 ` [PATCH 03/17][V2] ARM: OMAP4: cpuidle - Remove the cpuidle_params_table table Daniel Lezcano
2012-04-04 20:12 ` [PATCH 04/17][V2] ARM: OMAP4: cpuidle - fix static omap4_idle_data declaration Daniel Lezcano
2012-04-09 22:38   ` Kevin Hilman
2012-04-04 20:12 ` [PATCH 05/17][V2] ARM: OMAP4: cpuidle - Initialize omap4_idle_data at compile time Daniel Lezcano
2012-04-04 20:12 ` [PATCH 06/17][V2] ARM: OMAP4: cpuidle - use the omap4_idle_data variable directly Daniel Lezcano
2012-04-09 22:56   ` Kevin Hilman
2012-04-19 14:49     ` Daniel Lezcano
2012-04-04 20:12 ` [PATCH 07/17][V2] ARM: OMAP4: cpuidle - remove omap4_idle_data initialization at boot time Daniel Lezcano
2012-04-09 22:40   ` Kevin Hilman
2012-04-04 20:12 ` [PATCH 08/17][V2] ARM: OMAP3: cpuidle - remove rx51 cpuidle parameters table Daniel Lezcano
2012-04-04 20:12 ` [PATCH 09/17][V2] ARM: OMAP3: define cpuidle statically Daniel Lezcano
2012-04-04 20:12 ` [PATCH 10/17][V2] ARM: OMAP3: cpuidle - remove the 'valid' field Daniel Lezcano
2012-04-09 23:13   ` Kevin Hilman
2012-04-19 14:02     ` Daniel Lezcano
2012-04-04 20:12 ` [PATCH 11/17][V2] ARM: OMAP3: cpuidle - remove cpuidle_params_table Daniel Lezcano
2012-04-09 23:12   ` Kevin Hilman
2012-04-04 20:12 ` [PATCH 12/17][V2] ARM: OMAP3: define statically the omap3_idle_data Daniel Lezcano
2012-04-04 20:12 ` Daniel Lezcano [this message]
2012-04-04 20:12 ` [PATCH 14/17][V2] ARM: OMAP3 : cpuidle - simplify next_valid_state Daniel Lezcano
2012-04-04 20:12 ` [PATCH 15/17][V2] ARM: OMAP3: set omap3_idle_data as static Daniel Lezcano
2012-04-04 20:12 ` [PATCH 16/17][V2] ARM: OMAP3/4: consolidate cpuidle Makefile Daniel Lezcano
2012-04-04 20:12 ` [PATCH 17/17][V2] ARM: OMAP3: cpuidle - set global variables static Daniel Lezcano
2012-04-09 23:23 ` [PATCH 00/17][V2] ARM: OMAP3/4 : cpuidle34xx and cpuidle44xx cleanups Kevin Hilman
2012-04-19 14:03   ` 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=1333570371-1389-14-git-send-email-daniel.lezcano@linaro.org \
    --to=daniel.lezcano@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).