• Peter Chen's avatar
    usb: chipidea: add ttctrl.ttha control interface · 28362673
    Peter Chen authored
    The register of ttctrl.ttha describes like below:
    - Internal TT Hub Address Representation
    - RW
    - Default = 0000000b
    This field is used to match against the Hub Address field in QH & siTD
    to determine if the packet is routed to the internal TT for directly
    attached FS/LS devices. If the Hub Address in the QH or siTD does not
    match this address then the packet will be broadcast on the High Speed
    ports destined for a downstream High Speed hub with the address in the QH/siTD.
    
    In silicon RTL, this entry only affects QH and siTD, and the hub.addr at
    both QH and siTD are 0 in ehci core for chipidea (with hcd->has_tt = 1).
    
    So, for QH, if the "usage_tt" flag at RTL is 0, set CI_HDRC_SET_NON_ZERO_TTHA
    will not affect QH (with non-hs device); for siTD, set this flag
    will change remaining space requirement for the last transaction from 1023
    bytes to 188 bytes, it can increase the number of transactions within one
    frame, ehci periodic schedule code will not queue the packet if the frame space
    is full, so it is safe to set this flag for siTD.
    
    With this flag, it can fix the problem Alan Stern reported below:
    http://www.spinics.net/lists/linux-usb/msg123125.html
    And may fix Michael Tessier's problem too.
    http://www.spinics.net/lists/linux-usb/msg118679.html
    
    CC: stern@rowland.harvard.edu
    CC: michael.tessier@axiontech.ca
    Signed-off-by: default avatarPeter Chen <peter.chen@freescale.com>
    28362673
core.c 23.7 KB