• Sarah Sharp's avatar
    xhci: Handle HS bulk/ctrl endpoints that don't NAK. · 55c1945e
    Sarah Sharp authored
    A high speed control or bulk endpoint may have bInterval set to zero,
    which means it does not NAK.  If bInterval is non-zero, it means the
    endpoint NAKs at a rate of 2^(bInterval - 1).
    
    The xHCI code to compute the NAK interval does not handle the special
    case of zero properly.  The current code unconditionally subtracts one
    from bInterval and uses it as an exponent.  This causes a very large
    bInterval to be used, and warning messages like these will be printed:
    
    usb 1-1: ep 0x1 - rounding interval to 32768 microframes, ep desc says 0 microframes
    
    This may cause the xHCI host hardware to reject the Configure Endpoint
    command, which means the HS device will be unusable under xHCI ports.
    
    This patch should be backported to kernels as old as 2.6.31, that contain
    commit dfa49c4a "USB: xhci - fix math in
    xhci_get_endpoint_interval()".
    Reported-by: default avatarVincent Pelletier <plr.vincent@gmail.com>
    Suggested-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
    Cc: stable@vger.kernel.org
    55c1945e
xhci-mem.c 74.4 KB