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