Microsoft KB Archive/324226

= INFO: Resume Time Concerns with USB 2.0 Host Controllers =

PSS ID Number: 324226

Article Last Modified on 7/21/2004

-

The information in this article applies to:


 * Microsoft Windows XP Professional
 * Microsoft Windows XP 64-Bit Edition Version 2003

-



This article was previously published under Q324226



SUMMARY
A USB 2.0 stack must include synchronization between the USB 1.1 companion controllers and the USB 2.0 for EHCI to work properly. This is because the EHCI controller has to start first and then the companion controllers. If not, high speed devices partly (or fully) enumerate on a companion and then reenumerate on EHCI, which leads to a very poor experience on resumes from suspend and hibernate, enable/disable of EHCI, and the rest.

The addition of the USB 2.0 stack adds an average of 200-300 ms of delay to resume from standby, but close to nothing on resume from hiber or boot.



MORE INFORMATION
The tables below show the resume times on VIA motherboard EHCI implementation. The rather high resume time with XP Gold is caused by a poor BIOS that adds about 1.8 sec on Resume from Suspend.

VIA
NOTE: Tests were conducted on a VIA motherboard with USB 2.0 on south bridge (Device ID:0x3104, Rev ID: 0x51).

NEC USB 2.0 controller
In NEC USB 2.0, actually the problem exists because of a bPowerOnToPowerGood value (register setting of FF) that is on the OHCI controllers and not only on EHCI. This value influences the resume time of the controllers.

The controller with the EHCI hardware ID of: &quot;PCI\VEN_1033&DEV_00E0&quot; exhibits this issue.

NEC has promised that their next controller (coming out later this year) will not exhibit this issue. Bioses can override the bPowerOnToPowerGood register value on motherboard integrated controllers. It is not easy for the BIOS to change the bPowerOnToPowerGood value on a PCI card or a CardBus Solution, but if a bios really wanted to do it, they can.

The earlier table shows the details.

If you want to programmatically find out the value of this register using KD, do the following. kd> !devstack 0x809d38c8 (this is one of the two USB 1.1 root hub PDOs) !DevObj  !DrvObj            !DevExt   ObjectName 809cf030 \Driver\usbhub     809cf0e8  0000006b 80a4cd80 \Driver\ACPI       80b447c0  0000006a > 809d38c8 \Driver\usbohci    809d3980  USBPDO-0 !DevNode 80a09ee8 : DeviceInst is &quot;USB\ROOT_HUB\4&31f9e26a&0&quot; ServiceName is &quot;usbhub&quot; kd> dt usbhub!_DEVICE_EXTENSION_HUB 809cf0e8 +0x000 ExtensionType   : 0x20425548 +0x004 FunctionalDeviceObject : 0x809cf030 +0x008 PhysicalDeviceObject : 0x809d38c8 +0x00c TopOfStackDeviceObject : 0x80a4cd80 +0x010 PnpStartEvent   : _KEVENT +0x020 PowerIrp        : (null) +0x024 WmiLibInfo      : _WMILIB_CONTEXT +0x044 RootHubPdo      : 0x809d38c8 +0x048 TopOfHcdStackDeviceObject : 0x809d38c8 +0x04c HubFlags        : 0x1895 +0x050 PendingRequestCount : 3 +0x054 ErrorCount      : 1 +0x058 HubState        : _HUB_STATE +0x05c Irp             : 0x80a03888 +0x060 PendingWakeIrp  : 0x809fdbe0 +0x064 NumberPortWakeIrps : 0 +0x068 TransferBuffer  : 0x80b02330 &quot;&quot; +0x06c TransferBufferLength : 8 +0x070 Event           : (null) +0x074 HubDescriptor   : 0x80a97660 +0x078 PortData        : 0x80a18108 +0x07c Configuration   : 0x80a65848 +0x080 ConfigurationDescriptor : 0x80a0a4c8 +0x084 DeviceState     : [7] 0 ( PowerDeviceUnspecified ) +0x0a0 SystemWake      : 1 ( PowerSystemWorking ) +0x0a4 DeviceWake      : 3 ( PowerDeviceD2 ) +0x0a8 CurrentPowerState : 3 ( PowerDeviceD2 ) +0x0ac MaximumPowerPerPort : 500 +0x0b0 PortStateBuffer : _PORT_STATE +0x0b4 ResetPortNumber : 0 +0x0b8 WorkItemToQueue : (null) +0x0bc AbortEvent      : _KEVENT +0x0cc PendingRequestEvent : _KEVENT +0x0dc HubMutex        : _KSEMAPHORE +0x0f0 HubPortResetMutex : _KSEMAPHORE +0x104 ResetDeviceMutex : _KSEMAPHORE +0x118 DeviceDescriptor : _USB_DEVICE_DESCRIPTOR +0x12c PipeInformation : _USBD_PIPE_INFORMATION +0x140 Urb             : _URB +0x1a0 InESDRecovery   : 0 +0x1a4 BusIf           : _USB_BUS_INTERFACE_HUB_V2 +0x1e8 UsbdiBusIf      : _USB_BUS_INTERFACE_USBDI_V0 +0x208 PendingIdleIrp  : 0x80a32e70 +0x20c IdleCallbackInfo : _USB_IDLE_CALLBACK_INFO +0x214 SubmitIdleEvent : _KEVENT +0x224 ChangeIndicationWorkitemPending : 0 +0x228 WaitWakeIrpCancelFlag : 0 +0x22c IdleIrpCancelFlag : 0 +0x230 CWKEvent        : _KEVENT +0x240 CurrentSystemPowerState : 1 ( PowerSystemWorking ) kd> dt usbhub!_USB_HUB_DESCRIPTOR 0x80a97660 +0x000 bDescriptorLength : 0x9 '' +0x001 bDescriptorType : 0x29 ')'   +0x002 bNumberOfPorts   : 0x3    +0x003 wHubCharacteristics : 9   +0x005 bPowerOnToPowerGood : 0xff    +0x006 bHubControlCurrent : 0 ''   +0x007 bRemoveAndPowerMask : [64]  &quot;&quot;

NEC:

 * 1) OEMs have a BIOS override value for motherboard-based designs of the NEC USB 2.0 controller.
 * 2) OEMs that use PCI add-in cards have no easy solution.
 * 3) Future NEC cards (mass production in Q3 2002) have this issue fixed.

Intel/VIA/SiS:

 * Systems with ICH4 exhibit no major issues, other than that additional time added to each usbhub instance (~300ms) for USB 2.0 synchronization.

Additional query words: USB 2.0, NEC, VIA, INTEL, USB2, USB2 Resume Time, Performance

Keywords: kbinfo KB324226

Technology: kbWinXPPro kbWinXPPro64bit kbWinXPPro64bit2003 kbWinXPPro64bit2003Search kbWinXPPro64bitSearch kbWinXPProSearch kbWinXPSearch

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.