From ad3f6b5b188c572bd07cc5929e844138c2d95915 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 13 Nov 2015 13:32:34 +0100 Subject: [PATCH 1/6] ehci: clear suspend bit on detach Message-id: <1447421554-28366-2-git-send-email-kraxel@redhat.com> Patchwork-id: 68349 O-Subject: [RHEL-7.3 qemu-kvm PATCH 1/1] ehci: clear suspend bit on detach Bugzilla: 1268879 RH-Acked-by: Markus Armbruster RH-Acked-by: John Snow RH-Acked-by: Laszlo Ersek When a device is detached, clear the suspend bit (PORTSC_SUSPEND) in the port status register. The specs are not *that* clear what is supposed to happen in case a suspended device is unplugged. But the enable bit (PORTSC_PED) is cleared, and the specs mention setting suspend with enable being unset is undefined behavior. So clearing them both looks reasonable, and it actually fixes the reported bug. Cc: Hans de Goede Signed-off-by: Gerd Hoffmann Reviewed-by: Hans de Goede Message-id: 1445413462-18004-1-git-send-email-kraxel@redhat.com (cherry picked from commit cbf82fa01e6fd4ecb234b235b10ffce548154a95) Signed-off-by: Miroslav Rezanina --- hw/usb/hcd-ehci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c index 02d2ab7..3429c77 100644 --- a/hw/usb/hcd-ehci.c +++ b/hw/usb/hcd-ehci.c @@ -802,7 +802,7 @@ static void ehci_detach(USBPort *port) ehci_queues_rip_device(s, port->dev, 0); ehci_queues_rip_device(s, port->dev, 1); - *portsc &= ~(PORTSC_CONNECT|PORTSC_PED); + *portsc &= ~(PORTSC_CONNECT|PORTSC_PED|PORTSC_SUSPEND); *portsc |= PORTSC_CSC; ehci_raise_irq(s, USBSTS_PCD); -- 1.8.3.1