data->needs_update = 0;
        }
 
-       data->last_state_idx = CPUIDLE_DRIVER_STATE_START - 1;
-
        /* Special case when user has set very strict latency requirement */
        if (unlikely(latency_req == 0))
                return 0;
        if (latency_req > interactivity_req)
                latency_req = interactivity_req;
 
-       /*
-        * We want to default to C1 (hlt), not to busy polling
-        * unless the timer is happening really really soon.
-        */
-       if (interactivity_req > 20 &&
-           !drv->states[CPUIDLE_DRIVER_STATE_START].disabled &&
-               dev->states_usage[CPUIDLE_DRIVER_STATE_START].disable == 0)
+       if (CPUIDLE_DRIVER_STATE_START > 0) {
+               data->last_state_idx = CPUIDLE_DRIVER_STATE_START - 1;
+               /*
+                * We want to default to C1 (hlt), not to busy polling
+                * unless the timer is happening really really soon.
+                */
+               if (interactivity_req > 20 &&
+                   !drv->states[CPUIDLE_DRIVER_STATE_START].disabled &&
+                       dev->states_usage[CPUIDLE_DRIVER_STATE_START].disable == 0)
+                       data->last_state_idx = CPUIDLE_DRIVER_STATE_START;
+       } else {
                data->last_state_idx = CPUIDLE_DRIVER_STATE_START;
+       }
 
        /*
         * Find the idle state with the lowest power while satisfying