OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [Documentation/] [usb/] [ehci.txt] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
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
12
can be used on USB 1.1 systems, but they slow down to USB 1.1 speeds.
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
  
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
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.