ehci.rst 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. ===========
  2. EHCI driver
  3. ===========
  4. 27-Dec-2002
  5. The EHCI driver is used to talk to high speed USB 2.0 devices using
  6. USB 2.0-capable host controller hardware. The USB 2.0 standard is
  7. compatible with the USB 1.1 standard. It defines three transfer speeds:
  8. - "High Speed" 480 Mbit/sec (60 MByte/sec)
  9. - "Full Speed" 12 Mbit/sec (1.5 MByte/sec)
  10. - "Low Speed" 1.5 Mbit/sec
  11. USB 1.1 only addressed full speed and low speed. High speed devices
  12. can be used on USB 1.1 systems, but they slow down to USB 1.1 speeds.
  13. USB 1.1 devices may also be used on USB 2.0 systems. When plugged
  14. into an EHCI controller, they are given to a USB 1.1 "companion"
  15. controller, which is a OHCI or UHCI controller as normally used with
  16. such devices. When USB 1.1 devices plug into USB 2.0 hubs, they
  17. interact with the EHCI controller through a "Transaction Translator"
  18. (TT) in the hub, which turns low or full speed transactions into
  19. high speed "split transactions" that don't waste transfer bandwidth.
  20. At this writing, this driver has been seen to work with implementations
  21. of EHCI from (in alphabetical order): Intel, NEC, Philips, and VIA.
  22. Other EHCI implementations are becoming available from other vendors;
  23. you should expect this driver to work with them too.
  24. While usb-storage devices have been available since mid-2001 (working
  25. quite speedily on the 2.4 version of this driver), hubs have only
  26. been available since late 2001, and other kinds of high speed devices
  27. appear to be on hold until more systems come with USB 2.0 built-in.
  28. Such new systems have been available since early 2002, and became much
  29. more typical in the second half of 2002.
  30. Note that USB 2.0 support involves more than just EHCI. It requires
  31. other changes to the Linux-USB core APIs, including the hub driver,
  32. but those changes haven't needed to really change the basic "usbcore"
  33. APIs exposed to USB device drivers.
  34. - David Brownell
  35. <dbrownell@users.sourceforge.net>
  36. Functionality
  37. =============
  38. This driver is regularly tested on x86 hardware, and has also been
  39. used on PPC hardware so big/little endianness issues should be gone.
  40. It's believed to do all the right PCI magic so that I/O works even on
  41. systems with interesting DMA mapping issues.
  42. Transfer Types
  43. --------------
  44. At this writing the driver should comfortably handle all control, bulk,
  45. and interrupt transfers, including requests to USB 1.1 devices through
  46. transaction translators (TTs) in USB 2.0 hubs. But you may find bugs.
  47. High Speed Isochronous (ISO) transfer support is also functional, but
  48. at this writing no Linux drivers have been using that support.
  49. Full Speed Isochronous transfer support, through transaction translators,
  50. is not yet available. Note that split transaction support for ISO
  51. transfers can't share much code with the code for high speed ISO transfers,
  52. since EHCI represents these with a different data structure. So for now,
  53. most USB audio and video devices can't be connected to high speed buses.
  54. Driver Behavior
  55. ---------------
  56. Transfers of all types can be queued. This means that control transfers
  57. from a driver on one interface (or through usbfs) won't interfere with
  58. ones from another driver, and that interrupt transfers can use periods
  59. of one frame without risking data loss due to interrupt processing costs.
  60. The EHCI root hub code hands off USB 1.1 devices to its companion
  61. controller. This driver doesn't need to know anything about those
  62. drivers; a OHCI or UHCI driver that works already doesn't need to change
  63. just because the EHCI driver is also present.
  64. There are some issues with power management; suspend/resume doesn't
  65. behave quite right at the moment.
  66. Also, some shortcuts have been taken with the scheduling periodic
  67. transactions (interrupt and isochronous transfers). These place some
  68. limits on the number of periodic transactions that can be scheduled,
  69. and prevent use of polling intervals of less than one frame.
  70. Use by
  71. ======
  72. Assuming you have an EHCI controller (on a PCI card or motherboard)
  73. and have compiled this driver as a module, load this like::
  74. # modprobe ehci-hcd
  75. and remove it by::
  76. # rmmod ehci-hcd
  77. You should also have a driver for a "companion controller", such as
  78. "ohci-hcd" or "uhci-hcd". In case of any trouble with the EHCI driver,
  79. remove its module and then the driver for that companion controller will
  80. take over (at lower speed) all the devices that were previously handled
  81. by the EHCI driver.
  82. Module parameters (pass to "modprobe") include:
  83. log2_irq_thresh (default 0):
  84. Log2 of default interrupt delay, in microframes. The default
  85. value is 0, indicating 1 microframe (125 usec). Maximum value
  86. is 6, indicating 2^6 = 64 microframes. This controls how often
  87. the EHCI controller can issue interrupts.
  88. If you're using this driver on a 2.5 kernel, and you've enabled USB
  89. debugging support, you'll see three files in the "sysfs" directory for
  90. any EHCI controller:
  91. "async"
  92. dumps the asynchronous schedule, used for control
  93. and bulk transfers. Shows each active qh and the qtds
  94. pending, usually one qtd per urb. (Look at it with
  95. usb-storage doing disk I/O; watch the request queues!)
  96. "periodic"
  97. dumps the periodic schedule, used for interrupt
  98. and isochronous transfers. Doesn't show qtds.
  99. "registers"
  100. show controller register state, and
  101. The contents of those files can help identify driver problems.
  102. Device drivers shouldn't care whether they're running over EHCI or not,
  103. but they may want to check for "usb_device->speed == USB_SPEED_HIGH".
  104. High speed devices can do things that full speed (or low speed) ones
  105. can't, such as "high bandwidth" periodic (interrupt or ISO) transfers.
  106. Also, some values in device descriptors (such as polling intervals for
  107. periodic transfers) use different encodings when operating at high speed.
  108. However, do make a point of testing device drivers through USB 2.0 hubs.
  109. Those hubs report some failures, such as disconnections, differently when
  110. transaction translators are in use; some drivers have been seen to behave
  111. badly when they see different faults than OHCI or UHCI report.
  112. Performance
  113. ===========
  114. USB 2.0 throughput is gated by two main factors: how fast the host
  115. controller can process requests, and how fast devices can respond to
  116. them. The 480 Mbit/sec "raw transfer rate" is obeyed by all devices,
  117. but aggregate throughput is also affected by issues like delays between
  118. individual high speed packets, driver intelligence, and of course the
  119. overall system load. Latency is also a performance concern.
  120. Bulk transfers are most often used where throughput is an issue. It's
  121. good to keep in mind that bulk transfers are always in 512 byte packets,
  122. and at most 13 of those fit into one USB 2.0 microframe. Eight USB 2.0
  123. microframes fit in a USB 1.1 frame; a microframe is 1 msec/8 = 125 usec.
  124. So more than 50 MByte/sec is available for bulk transfers, when both
  125. hardware and device driver software allow it. Periodic transfer modes
  126. (isochronous and interrupt) allow the larger packet sizes which let you
  127. approach the quoted 480 MBit/sec transfer rate.
  128. Hardware Performance
  129. --------------------
  130. At this writing, individual USB 2.0 devices tend to max out at around
  131. 20 MByte/sec transfer rates. This is of course subject to change;
  132. and some devices now go faster, while others go slower.
  133. The first NEC implementation of EHCI seems to have a hardware bottleneck
  134. at around 28 MByte/sec aggregate transfer rate. While this is clearly
  135. enough for a single device at 20 MByte/sec, putting three such devices
  136. onto one bus does not get you 60 MByte/sec. The issue appears to be
  137. that the controller hardware won't do concurrent USB and PCI access,
  138. so that it's only trying six (or maybe seven) USB transactions each
  139. microframe rather than thirteen. (Seems like a reasonable trade off
  140. for a product that beat all the others to market by over a year!)
  141. It's expected that newer implementations will better this, throwing
  142. more silicon real estate at the problem so that new motherboard chip
  143. sets will get closer to that 60 MByte/sec target. That includes an
  144. updated implementation from NEC, as well as other vendors' silicon.
  145. There's a minimum latency of one microframe (125 usec) for the host
  146. to receive interrupts from the EHCI controller indicating completion
  147. of requests. That latency is tunable; there's a module option. By
  148. default ehci-hcd driver uses the minimum latency, which means that if
  149. you issue a control or bulk request you can often expect to learn that
  150. it completed in less than 250 usec (depending on transfer size).
  151. Software Performance
  152. --------------------
  153. To get even 20 MByte/sec transfer rates, Linux-USB device drivers will
  154. need to keep the EHCI queue full. That means issuing large requests,
  155. or using bulk queuing if a series of small requests needs to be issued.
  156. When drivers don't do that, their performance results will show it.
  157. In typical situations, a usb_bulk_msg() loop writing out 4 KB chunks is
  158. going to waste more than half the USB 2.0 bandwidth. Delays between the
  159. I/O completion and the driver issuing the next request will take longer
  160. than the I/O. If that same loop used 16 KB chunks, it'd be better; a
  161. sequence of 128 KB chunks would waste a lot less.
  162. But rather than depending on such large I/O buffers to make synchronous
  163. I/O be efficient, it's better to just queue up several (bulk) requests
  164. to the HC, and wait for them all to complete (or be canceled on error).
  165. Such URB queuing should work with all the USB 1.1 HC drivers too.
  166. In the Linux 2.5 kernels, new usb_sg_*() api calls have been defined; they
  167. queue all the buffers from a scatterlist. They also use scatterlist DMA
  168. mapping (which might apply an IOMMU) and IRQ reduction, all of which will
  169. help make high speed transfers run as fast as they can.
  170. TBD:
  171. Interrupt and ISO transfer performance issues. Those periodic
  172. transfers are fully scheduled, so the main issue is likely to be how
  173. to trigger "high bandwidth" modes.
  174. TBD:
  175. More than standard 80% periodic bandwidth allocation is possible
  176. through sysfs uframe_periodic_max parameter. Describe that.