[U-Boot] USB: relax usbcore reset timings

Submitted by Wolfgang Grandegger on Dec. 21, 2011, 10:01 a.m.

Details

Message ID 4EF1AE65.2070208@grandegger.com
State Accepted
Delegated to: Marek Vasut
Headers show

Commit Message

Wolfgang Grandegger Dec. 21, 2011, 10:01 a.m.
From: Wolfgang Grandegger <wg@denx.de>

Following the corresponding Linux code, this patch relaxes reset timings
waiting at least 100ms after power to the ports. There are some reports
that it helps make enumeration work better on some high speed devices.
Furthermore, the wait is only done once after power has been enabled
on all ports.

CC: Remy Bohmer <linux@bohmer.net>
CC: Vincent Palatin <vpalatin@chromium.org>
Signed-off-by: Wolfgang Grandegger <wg@denx.de>
---
 common/usb.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

Comments

Remy Bohmer Jan. 15, 2012, 7:49 p.m.
Hi,

2011/12/21 Wolfgang Grandegger <wg@grandegger.com>:
> From: Wolfgang Grandegger <wg@denx.de>
>
> Following the corresponding Linux code, this patch relaxes reset timings
> waiting at least 100ms after power to the ports. There are some reports
> that it helps make enumeration work better on some high speed devices.
> Furthermore, the wait is only done once after power has been enabled
> on all ports.
>
> CC: Remy Bohmer <linux@bohmer.net>
> CC: Vincent Palatin <vpalatin@chromium.org>
> Signed-off-by: Wolfgang Grandegger <wg@denx.de>
> ---
>  common/usb.c |    5 ++++-
>  1 files changed, 4 insertions(+), 1 deletions(-)

Applied to u-boot-usb.
Thanks.

Kind regards,

Remy
Marek Vasut Feb. 26, 2012, 11:10 p.m.
> From: Wolfgang Grandegger <wg@denx.de>
> 
> Following the corresponding Linux code, this patch relaxes reset timings
> waiting at least 100ms after power to the ports. There are some reports
> that it helps make enumeration work better on some high speed devices.
> Furthermore, the wait is only done once after power has been enabled
> on all ports.
> 
> CC: Remy Bohmer <linux@bohmer.net>
> CC: Vincent Palatin <vpalatin@chromium.org>
> Signed-off-by: Wolfgang Grandegger <wg@denx.de>
> ---

Hi,

what's the status of this patch/patchset?

Thanks
M
Wolfgang Grandegger Feb. 27, 2012, 8:09 a.m.
On 02/27/2012 12:10 AM, Marek Vasut wrote:
>> From: Wolfgang Grandegger <wg@denx.de>
>>
>> Following the corresponding Linux code, this patch relaxes reset timings
>> waiting at least 100ms after power to the ports. There are some reports
>> that it helps make enumeration work better on some high speed devices.
>> Furthermore, the wait is only done once after power has been enabled
>> on all ports.
>>
>> CC: Remy Bohmer <linux@bohmer.net>
>> CC: Vincent Palatin <vpalatin@chromium.org>
>> Signed-off-by: Wolfgang Grandegger <wg@denx.de>
>> ---
> 
> Hi,
> 
> what's the status of this patch/patchset?

Already a while ago Remy wrote "Applied to u-boot-usb" but I can't find
it yet in mainline. Remy?

Wolfgang
Marek Vasut Feb. 27, 2012, 1:41 p.m.
> On 02/27/2012 12:10 AM, Marek Vasut wrote:
> >> From: Wolfgang Grandegger <wg@denx.de>
> >> 
> >> Following the corresponding Linux code, this patch relaxes reset timings
> >> waiting at least 100ms after power to the ports. There are some reports
> >> that it helps make enumeration work better on some high speed devices.
> >> Furthermore, the wait is only done once after power has been enabled
> >> on all ports.
> >> 
> >> CC: Remy Bohmer <linux@bohmer.net>
> >> CC: Vincent Palatin <vpalatin@chromium.org>
> >> Signed-off-by: Wolfgang Grandegger <wg@denx.de>
> >> ---
> > 
> > Hi,
> > 
> > what's the status of this patch/patchset?
> 
> Already a while ago Remy wrote "Applied to u-boot-usb" but I can't find
> it yet in mainline. Remy?
> 
> Wolfgang

Well, Remy seems N/A recently, I'll apply these on my tree and send pull RQ 
after EW. Ok with you ?

M

Patch hide | download patch | download mbox

diff --git a/common/usb.c b/common/usb.c
index 63a11c8..d13dab8 100644
--- a/common/usb.c
+++ b/common/usb.c
@@ -1035,6 +1035,7 @@  static void usb_hub_power_on(struct usb_hub_device *hub)
 {
 	int i;
 	struct usb_device *dev;
+	unsigned pgood_delay = hub->desc.bPwrOn2PwrGood * 2;
 
 	dev = hub->pusb_dev;
 	/* Enable power to the ports */
@@ -1042,8 +1043,10 @@  static void usb_hub_power_on(struct usb_hub_device *hub)
 	for (i = 0; i < dev->maxchild; i++) {
 		usb_set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER);
 		USB_HUB_PRINTF("port %d returns %lX\n", i + 1, dev->status);
-		wait_ms(hub->desc.bPwrOn2PwrGood * 2);
 	}
+
+	/* Wait at least 100 msec for power to become stable */
+	wait_ms(max(pgood_delay, (unsigned)100));
 }
 
 void usb_hub_reset(void)