• Benjamin Tisssoires's avatar
    HID: logitech-dj: Fix USB 3.0 issue · 42c22dbf
    Benjamin Tisssoires authored
    This fix (not very clean though) should fix the long time USB3
    issue that was spotted last year. The rational has been given by
    Hans de Goede:
    
     ----
    
    I think the most likely cause for this is a firmware bug
    in the unifying receiver, likely a race condition.
    
    The most prominent difference between having a USB-2 device
    plugged into an EHCI (so USB-2 only) port versus an XHCI
    port will be inter packet timing. Specifically if you
    send packets (ie hid reports) one at a time, then with
    the EHCI controller their will be a significant pause
    between them, where with XHCI they will be very close
    together in time.
    
    The reason for this is the difference in EHCI / XHCI
    controller OS <-> driver interfaces.
    
    For non periodic endpoints (control, bulk) the EHCI uses a
    circular linked-list of commands in dma-memory, which it
    follows to execute commands, if the list is empty, it
    will go into an idle state and re-check periodically.
    
    The XHCI uses a ring of commands per endpoint, and if the OS
    places anything new on the ring it will do an ioport write,
    waking up the XHCI making it send the new packet immediately.
    
    For periodic transfers (isoc, interrupt) the delay between
    packets when sending one at a time (rather then queuing them
    up) will be even larger, because they need to be inserted into
    the EHCI schedule 2 ms in the future so the OS driver can be
    sure that the EHCI driver does not try to start executing the
    time slot in question before the insertion has completed.
    
    So a possible fix may be to insert a delay between packets
    being send to the receiver.
    
     ----
    
    I tested this on a buggy Haswell USB 3.0 motherboard, and I always
    get the notification after adding the msleep.
    Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
    Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
    42c22dbf
hid-logitech-dj.c 30.4 KB