Message ID | e4d9881ac8f05550ba52a2a9d8682efd91a514ab.camel@amazon.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | 9fbbeb4eff076859891c022c151ad20eda83d983 |
Headers | show |
Series | [1/2] usb: gadget: aspeed: Don't set port enable change bit on reset | expand |
On Tue, 2019-07-02 at 21:17 +1000, Benjamin Herrenschmidt wrote: > This bit should be only set when the port enable goes down, for > example, on errors. Not when it gets set after a port reset. MacOS > seems sensitive to this and fails enumeration. > > Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Note: I don't know if you already applied those two, so I'll add them to a new series I'm about to post with more fixes to that driver, feel free to drop the first two from the series if you have as they are identical to these. > --- > drivers/usb/gadget/udc/aspeed-vhub/hub.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/gadget/udc/aspeed-vhub/hub.c > b/drivers/usb/gadget/udc/aspeed-vhub/hub.c > index 7c040f56100e..0755115fd90d 100644 > --- a/drivers/usb/gadget/udc/aspeed-vhub/hub.c > +++ b/drivers/usb/gadget/udc/aspeed-vhub/hub.c > @@ -449,8 +449,15 @@ static void ast_vhub_change_port_stat(struct > ast_vhub *vhub, > USB_PORT_STAT_C_OVERCURRENT | > USB_PORT_STAT_C_RESET | > USB_PORT_STAT_C_L1; > - p->change |= chg; > > + /* > + * We only set USB_PORT_STAT_C_ENABLE if we are > disabling > + * the port as per USB spec, otherwise MacOS gets upset > + */ > + if (p->status & USB_PORT_STAT_ENABLE) > + chg &= ~USB_PORT_STAT_C_ENABLE; > + > + p->change = chg; > ast_vhub_update_hub_ep1(vhub, port); > } > } >
diff --git a/drivers/usb/gadget/udc/aspeed-vhub/hub.c b/drivers/usb/gadget/udc/aspeed-vhub/hub.c index 7c040f56100e..0755115fd90d 100644 --- a/drivers/usb/gadget/udc/aspeed-vhub/hub.c +++ b/drivers/usb/gadget/udc/aspeed-vhub/hub.c @@ -449,8 +449,15 @@ static void ast_vhub_change_port_stat(struct ast_vhub *vhub, USB_PORT_STAT_C_OVERCURRENT | USB_PORT_STAT_C_RESET | USB_PORT_STAT_C_L1; - p->change |= chg; + /* + * We only set USB_PORT_STAT_C_ENABLE if we are disabling + * the port as per USB spec, otherwise MacOS gets upset + */ + if (p->status & USB_PORT_STAT_ENABLE) + chg &= ~USB_PORT_STAT_C_ENABLE; + + p->change = chg; ast_vhub_update_hub_ep1(vhub, port); } }
This bit should be only set when the port enable goes down, for example, on errors. Not when it gets set after a port reset. MacOS seems sensitive to this and fails enumeration. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> --- drivers/usb/gadget/udc/aspeed-vhub/hub.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)