diff mbox series

[1/2] usb: gadget: aspeed: Don't set port enable change bit on reset

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

Commit Message

Herrenschmidt, Benjamin July 2, 2019, 11:17 a.m. UTC
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(-)

Comments

Benjamin Herrenschmidt July 6, 2019, 12:44 a.m. UTC | #1
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 mbox series

Patch

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);
 	}
 }