|
@@ -644,39 +644,10 @@ static int __init intel_idle_cpuidle_driver_init(void)
|
|
|
*/
|
|
|
static int intel_idle_cpu_init(int cpu)
|
|
|
{
|
|
|
- int cstate;
|
|
|
struct cpuidle_device *dev;
|
|
|
|
|
|
dev = per_cpu_ptr(intel_idle_cpuidle_devices, cpu);
|
|
|
|
|
|
- dev->state_count = 1;
|
|
|
-
|
|
|
- for (cstate = 0; cstate < CPUIDLE_STATE_MAX; ++cstate) {
|
|
|
- int num_substates, mwait_hint, mwait_cstate, mwait_substate;
|
|
|
-
|
|
|
- if (cpuidle_state_table[cstate].enter == NULL)
|
|
|
- break;
|
|
|
-
|
|
|
- if (cstate + 1 > max_cstate) {
|
|
|
- printk(PREFIX "max_cstate %d reached\n", max_cstate);
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- mwait_hint = flg2MWAIT(cpuidle_state_table[cstate].flags);
|
|
|
- mwait_cstate = MWAIT_HINT2CSTATE(mwait_hint);
|
|
|
- mwait_substate = MWAIT_HINT2SUBSTATE(mwait_hint);
|
|
|
-
|
|
|
- /* does the state exist in CPUID.MWAIT? */
|
|
|
- num_substates = (mwait_substates >> ((mwait_cstate + 1) * 4))
|
|
|
- & MWAIT_SUBSTATE_MASK;
|
|
|
-
|
|
|
- /* if sub-state in table is not enumerated by CPUID */
|
|
|
- if ((mwait_substate + 1) > num_substates)
|
|
|
- continue;
|
|
|
-
|
|
|
- dev->state_count += 1;
|
|
|
- }
|
|
|
-
|
|
|
dev->cpu = cpu;
|
|
|
|
|
|
if (cpuidle_register_device(dev)) {
|