Messages in this thread | | | Date | Wed, 16 Oct 2013 10:40:27 -0400 (EDT) | From | Alan Stern <> | Subject | Re: [PATCH v2] usb: hub: Clear Port Reset Change during init/resume |
| |
On Tue, 15 Oct 2013, Julius Werner wrote:
> This patch adds the Port Reset Change flag to the set of bits that are > preemptively cleared on init/resume of a hub. In theory this bit should > never be set unexpectedly... in practice it can still happen if BIOS, > SMM or ACPI code plays around with USB devices without cleaning up > correctly. This is especially dangerous for XHCI root hubs, which don't > generate any more Port Status Change Events until all change bits are > cleared, so this is a good precaution to have (similar to how it's > already done for the Warm Port Reset Change flag). > > Signed-off-by: Julius Werner <jwerner@chromium.org> > --- > drivers/usb/core/hub.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c > index e6b682c..c3dd64c 100644 > --- a/drivers/usb/core/hub.c > +++ b/drivers/usb/core/hub.c > @@ -1130,6 +1130,11 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type) > usb_clear_port_feature(hub->hdev, port1, > USB_PORT_FEAT_C_ENABLE); > } > + if (portchange & USB_PORT_STAT_C_RESET) { > + need_debounce_delay = true; > + usb_clear_port_feature(hub->hdev, port1, > + USB_PORT_FEAT_C_RESET); > + } > if ((portchange & USB_PORT_STAT_C_BH_RESET) && > hub_is_superspeed(hub->hdev)) { > need_debounce_delay = true;
Acked-by: Alan Stern <stern@rowland.harvard.edu>
| |