C4 - C6 CPU states and USB

New Intel CPUs support deeper Cx states and I’d like to know how an USB
device can influence if they can be entered or not. We see a strange
behaviour which occurs at XP only; at Vista everything works as expected
i.e when OS is idle, CPU usually enters C6 state.

At XP, idle OS is able to enter C6 state. When our device is connected
and suspended by driver, the deepest CPU state is C3. When disconnected,
system can go to C6. I wouldn’t be so surprised but there is another USB
device connected (to different port) and it doesn’t prevent C6 state.
The driver for this device is based on KMDF so I wondered if it isn’t
the culprit and installed for our device UMDF based driver. Nothing
changed, still the C3 but there is no kernel component from us.

In addition, it is influenced by Sx state transitions. The same way with
our kernel driver and UMDF/WinUsb based one. When system is suspended
and resumed:

  • if our device was connected during suspend, the deepest power state is
    C3. Even when disconnected and next suspends don’t change it. C3 until
    reboot.

  • if our device was not connected during suspend, the deepest power
    state is C6. Even when the device is connected later. C6 until reboot.

It is really crazy. Can anybody shed light on it?

Best regards,

Michal Vodicka
UPEK, Inc.
[xxxxx@upek.com, http://www.upek.com]