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

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

 



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.

-- 

Best Regards,
Peter Chen
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



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

  Powered by Linux