• O
    ath9k_htc: do not use bulk on EP3 and EP4 · 2b721118
    Oleksij Rempel 提交于
    If usb auto suspend is enabled or system run in to suspend/resume
    cycle, ath9k-htc adapter will stop to response. It is reproducible on xhci HCs.
    
    Host part of problem:
    XHCI do timing calculation based on Transfer Type and bInterval,
    immediately after device was detected. Ath9k-htc try to overwrite
    this parameters on module probe and some changes in FW,
    since we do not initiate usb reset from the driver this changes
    are not took to account. So, before any kind of suspend or reset,
    host controller will operate with old parameters. Only after suspend/resume
    and if interface id stay unchanged, new parameters will by applied. Host
    will send bulk data with no intervals (?), which will cause
    overflow on FIFO of EP4.
    
    Firmware part of problem:
    By default, ath9k-htc adapters configured with EP3 and EP4
    as interrupt endpoints. Current firmware will try to overwrite
    ConfigDescriptor to make EP3 and EP4 bulk. FIFO for this endpoints
    stay not reconfigured, so under the hood it is still Int EP.
    
    This patch is revert of 4a0e8ecc commit which trying to
    reduce CPU usage on some systems. Since it will produce more bug
    as fixes, we will need to find other way to fix it.
    
    here is comment from kernel source which has some more explanation:
    * Some buggy high speed devices have bulk endpoints using
    * maxpacket sizes other than 512.  High speed HCDs may not
    * be able to handle that particular bug, so let's warn...
    
    in our case EP3 and EP4 have maxpacket sizes = 64!!!
    Signed-off-by: NOleksij Rempel <linux@rempel-privat.de>
    Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
    2b721118
hif_usb.c 30.6 KB