• Lu Baolu's avatar
    usb: xhci: clear EINT bit in status correctly · d1001ab4
    Lu Baolu authored
    EINT(Event Interrupt) is a write-1-to-clear type of bit in xhci
    status register. It should be cleared by writing a 1. Writing 0
    to this bit has no effect.
    
    Xhci driver tries to clear this bit by writing 0 to it. This is
    not the right way to go. This patch corrects this by reading the
    register first, then clearing all RO/RW1C/RsvZ bits and setting
    the clearing bit, and writing back the new value at last.
    
    Xhci spec requires that software that uses EINT shall clear it
    prior to clearing any IP flags in section 5.4.2. This is the
    reason why this patch is CC'ed stable as well.
    
    [old way didn't cause any issues, skip stable, send to next -Mathias]
    
    Cc: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
    Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    d1001ab4
xhci.c 149 KB