ARM: omap: Consolidate OMAP3 time keeping and irq enable
Use core cpuidle timekeeping and irqen wrapper and remove that handling from this code. Signed-off-by: Robert Lee <rob.lee@linaro.org> Reviewed-by: Kevin Hilman <khilman@ti.com> Reviewed-by: Daniel Lezcano <daniel.lezcano@linaro.org> Tested-by: Jean Pihet <j-pihet@ti.com> Acked-by: Jean Pihet <j-pihet@ti.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
@@ -87,29 +87,14 @@ static int _cpuidle_deny_idle(struct powerdomain *pwrdm,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static int __omap3_enter_idle(struct cpuidle_device *dev,
|
||||||
* omap3_enter_idle - Programs OMAP3 to enter the specified state
|
|
||||||
* @dev: cpuidle device
|
|
||||||
* @drv: cpuidle driver
|
|
||||||
* @index: the index of state to be entered
|
|
||||||
*
|
|
||||||
* Called from the CPUidle framework to program the device to the
|
|
||||||
* specified target state selected by the governor.
|
|
||||||
*/
|
|
||||||
static int omap3_enter_idle(struct cpuidle_device *dev,
|
|
||||||
struct cpuidle_driver *drv,
|
struct cpuidle_driver *drv,
|
||||||
int index)
|
int index)
|
||||||
{
|
{
|
||||||
struct omap3_idle_statedata *cx =
|
struct omap3_idle_statedata *cx =
|
||||||
cpuidle_get_statedata(&dev->states_usage[index]);
|
cpuidle_get_statedata(&dev->states_usage[index]);
|
||||||
struct timespec ts_preidle, ts_postidle, ts_idle;
|
|
||||||
u32 mpu_state = cx->mpu_state, core_state = cx->core_state;
|
u32 mpu_state = cx->mpu_state, core_state = cx->core_state;
|
||||||
int idle_time;
|
|
||||||
|
|
||||||
/* Used to keep track of the total time in idle */
|
|
||||||
getnstimeofday(&ts_preidle);
|
|
||||||
|
|
||||||
local_irq_disable();
|
|
||||||
local_fiq_disable();
|
local_fiq_disable();
|
||||||
|
|
||||||
pwrdm_set_next_pwrst(mpu_pd, mpu_state);
|
pwrdm_set_next_pwrst(mpu_pd, mpu_state);
|
||||||
@@ -148,21 +133,28 @@ static int omap3_enter_idle(struct cpuidle_device *dev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
return_sleep_time:
|
return_sleep_time:
|
||||||
getnstimeofday(&ts_postidle);
|
|
||||||
ts_idle = timespec_sub(ts_postidle, ts_preidle);
|
|
||||||
|
|
||||||
local_irq_enable();
|
|
||||||
local_fiq_enable();
|
local_fiq_enable();
|
||||||
|
|
||||||
idle_time = ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * \
|
|
||||||
USEC_PER_SEC;
|
|
||||||
|
|
||||||
/* Update cpuidle counters */
|
|
||||||
dev->last_residency = idle_time;
|
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* omap3_enter_idle - Programs OMAP3 to enter the specified state
|
||||||
|
* @dev: cpuidle device
|
||||||
|
* @drv: cpuidle driver
|
||||||
|
* @index: the index of state to be entered
|
||||||
|
*
|
||||||
|
* Called from the CPUidle framework to program the device to the
|
||||||
|
* specified target state selected by the governor.
|
||||||
|
*/
|
||||||
|
static inline int omap3_enter_idle(struct cpuidle_device *dev,
|
||||||
|
struct cpuidle_driver *drv,
|
||||||
|
int index)
|
||||||
|
{
|
||||||
|
return cpuidle_wrap_enter(dev, drv, index, __omap3_enter_idle);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* next_valid_state - Find next valid C-state
|
* next_valid_state - Find next valid C-state
|
||||||
* @dev: cpuidle device
|
* @dev: cpuidle device
|
||||||
|
Reference in New Issue
Block a user