Re: What are Shared HCD and Companion Controller(HCD?)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Peter Chen <hzpeterchen@xxxxxxxxx> writes:
> On Tue, Apr 19, 2016 at 10:20:33AM -0400, Alan Stern wrote:
>> On Tue, 19 Apr 2016, Felipe Balbi wrote:
>> 
>> > Hi,
>> > 
>> > Peter Chen <hzpeterchen@xxxxxxxxx> writes:
>> > > Hi all,
>> > >
>> > > When I review the patch [1] for adding companion controller support for
>> > > OTG framework, I am puzzled several concepts, like shared hcd and
>> > > companion controller, companion hcd, companion port, would someone
>> > > please explain them? And why EHCI/OHCI do not use shared hcd, but
>> > > xHCI uses it? Thanks.
>> > 
>> > xHCI is modeled as two separate buses (High-speed and Super-speed) which
>> > *share* the same IP block. In the case of EHCI/OHCI, there is a port
>> > being handed over to the a completely separate IP. OHCI is EHCI's
>> > companion for non-HS signalling.
>> 
>> That's right.  In more detail:
>> 
>> Companion controller and companion hcd are the same thing.  They exist
>> because EHCI can only handle high speed connections; it can't handle
>> full speed or low speed.  When a USB-1.1 device is plugged into an EHCI
>> controller, the EHCI controller can't handle it and so the connection
>> is handed over to the companion controller, which is either OHCI or
>> UHCI.
>> 
>> xHCI doesn't have that problem; it can handle all speeds.  However the 
>> hardware design (not just the software design!) uses two separate 
>> buses: one for SuperSpeed and one for high/full/low speed.  There 
>> actually are two separate sets of wires in a USB-3 cable.
>> 
>> If the USB core were designed better, we would have used a single 
>> usb_hcd structure for xHCI, with two usb_bus structures inside it.  But 
>> the structures were designed long before USB-3 was announced, and it 
>> would have taken a lot of changes to make that approach work.  Instead, 
>> xhci-hcd uses two usb_hcd structures, each containing a single usb_bus.  
>> The structure for the high/full/low-speed bus is called the primary_hcd 
>> and the structure for the SuperSpeed bus is called the shared_hcd.
>> 
>> As a result of xHCI's design, the same physical port on the computer
>> will show up as two different ports in the kernel: one attached to the
>> SuperSpeed hcd and one attached to the high/full/low-speed hcd.  The
>> peer pointer (not companion!) in struct usb_port connects these two
>> logical ports.
>> 
>
> Thanks, Alan, Felipe, Oliver.
>
> After reading the beginning content of EHCI spec, I understand what is
> companion controller. At chipidea USB2 design, it handles FS/LS by
> internal, so I have no knowledge about it.
>
> Integrated Transaction Translator (Multi Port implementations) supports
> directly connected USB legacy (USB 1.1) Full and Low speed devices
> without a companion USB 1.1 host controller or host controller driver
> software.
>
> Embedded Transaction Translator - Allows direct attachment of FS and LS
> devices in host mode without the need for a companion controller.

TT is only required for hubs, not for roothubs. Some roothubs will
implement it to save silicon area, but regular EHCIs don't ;-)

-- 
balbi

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux