diff mbox

[U-Boot,v5,04/15] usb: Stop reset procedure when a dev is handed over to a companion hcd

Message ID 1431259827-8109-5-git-send-email-hdegoede@redhat.com
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Hans de Goede May 10, 2015, 12:10 p.m. UTC
Short circuit the retry loop in legacy_hub_port_reset() by returning an
error from usb_control_msg() when a device was handed over to a companion
by the ehci code. This avoids trying to reset low / fullspeed devices 5
times needlessly. Also do not print an error when a device has been handed
over.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 common/usb_hub.c            | 3 ++-
 drivers/usb/host/ehci-hcd.c | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

Comments

Marek Vasut May 10, 2015, 4:13 p.m. UTC | #1
On Sunday, May 10, 2015 at 02:10:16 PM, Hans de Goede wrote:
> Short circuit the retry loop in legacy_hub_port_reset() by returning an
> error from usb_control_msg() when a device was handed over to a companion
> by the ehci code. This avoids trying to reset low / fullspeed devices 5
> times needlessly. Also do not print an error when a device has been handed
> over.
> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

Acked-by: Marek Vasut <marex@denx.de>

Best regards,
Marek Vasut
Simon Glass May 11, 2015, 10:37 p.m. UTC | #2
On 10 May 2015 at 10:13, Marek Vasut <marex@denx.de> wrote:
> On Sunday, May 10, 2015 at 02:10:16 PM, Hans de Goede wrote:
>> Short circuit the retry loop in legacy_hub_port_reset() by returning an
>> error from usb_control_msg() when a device was handed over to a companion
>> by the ehci code. This avoids trying to reset low / fullspeed devices 5
>> times needlessly. Also do not print an error when a device has been handed
>> over.
>>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>
> Acked-by: Marek Vasut <marex@denx.de>

Applied to u-boot-dm, thanks!
diff mbox

Patch

diff --git a/common/usb_hub.c b/common/usb_hub.c
index 7aac220..af39c76 100644
--- a/common/usb_hub.c
+++ b/common/usb_hub.c
@@ -271,7 +271,8 @@  int usb_hub_port_connect_change(struct usb_device *dev, int port)
 	/* Reset the port */
 	ret = legacy_hub_port_reset(dev, port, &portstatus);
 	if (ret < 0) {
-		printf("cannot reset port %i!?\n", port + 1);
+		if (ret != -ENXIO)
+			printf("cannot reset port %i!?\n", port + 1);
 		return ret;
 	}
 
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index ce760d0..e4c462f 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -875,7 +875,7 @@  static int ehci_submit_root(struct usb_device *dev, unsigned long pipe,
 				      port - 1);
 				reg |= EHCI_PS_PO;
 				ehci_writel(status_reg, reg);
-				break;
+				return -ENXIO;
 			} else {
 				int ret;
 
@@ -905,6 +905,7 @@  static int ehci_submit_root(struct usb_device *dev, unsigned long pipe,
 						reg &= ~EHCI_PS_CLEAR;
 						reg |= EHCI_PS_PO;
 						ehci_writel(status_reg, reg);
+						return -ENXIO;
 					} else {
 						ctrl->portreset |= 1 << port;
 					}