diff mbox

[U-Boot] Regression due to 020bbcb "usb: hub: Power-cycle on root-hub ports"

Message ID CAFp+6iF_9zAi1htWyJWnSrFom-=yYQfCJjtN63wHa+n=ieYGbw@mail.gmail.com
State Superseded
Delegated to: Marek Vasut
Headers show

Commit Message

Vivek Gautam July 1, 2013, 1:49 p.m. UTC
Hi Marek,


On Sun, Jun 30, 2013 at 10:08 PM, Marek Vasut <marex@denx.de> wrote:
> Dear Stephen Warren,
>
>> (Sorry to those on to/cc; I'm resending this so it goes to the correct
>> mailing list)

Dear Stephen,
sorry for the delay in responding to this.

>>
>> Commit 020bbcb "usb: hub: Power-cycle on root-hub ports" causes a
>> regression on Tegra systems.
>>
>> The first time "usb start" is executed, it appears to work correctly.
>> However, any subsequent time it is executed, it takes a long time, and
>> eventually fails to find any USB devices.
>>
>> This situation can happen quite often; for example, if the user forgets
>> to plug in a USB device before booting, runs "usb start", realizes that,
>> then plugs it in and runs "usb start" again. This is compounded on at
>> least one of the Tegra boards, since CONFIG_PREBOOT is set to "usb
>> start" on systems (laptops/clamshells) which have built-in USB keyboards.
>>
>> If I simply revert this patch, then everything works again. (Yes,
>> reverting requires fixing a small merge conflict.)
>>
>> Do you have any idea what the problem can be? I'm tempted to simply ask
>> for the patch to be reverted since it causes a regression.
>>
>> Thanks for any idea how to fix this!
>
> BUMP? Vivek, any ideas? Otherwise I'm reverting this.

Tried this at my end on smdk5250 board, and since we have 3 ports on
EHCI (which we haven't defined in 5250's config --
CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS);
the issue was very much reproducible.

For this following commits should be under scan:
0bf796f usb: hub: Parallelize power-cycling of root-hub ports
020bbcb usb: hub: Power-cycle on root-hub ports

There's one BUG that i could see in " 0bf796f " commit.
Now that we parallelized the sequence to power cycle ports, so if
get_port_status for any port failed,
it returns from hub_power_on() and not power-on any of the port.

Below is the change i suggest.



Dear Stephen,

can you please confirm if you problem is related to this BUG in the
sequence of power-cycling the ports.

With this change i can see that USB 2.0 does not detect attached
device for the first time we give 'usb start',
but subsequently every time it comes and detects the device.
But similar behavior is observed when i revert both of above mentioned
commits, so this i should look into.

Comments

Stephen Warren July 1, 2013, 4:41 p.m. UTC | #1
On 07/01/2013 07:49 AM, Vivek Gautam wrote:
> Hi Marek,
> 
> 
> On Sun, Jun 30, 2013 at 10:08 PM, Marek Vasut <marex@denx.de> wrote:
>> Dear Stephen Warren,
>>
>>> (Sorry to those on to/cc; I'm resending this so it goes to the correct
>>> mailing list)
> 
> Dear Stephen,
> sorry for the delay in responding to this.
> 
>>>
>>> Commit 020bbcb "usb: hub: Power-cycle on root-hub ports" causes a
>>> regression on Tegra systems.
>>>
>>> The first time "usb start" is executed, it appears to work correctly.
>>> However, any subsequent time it is executed, it takes a long time, and
>>> eventually fails to find any USB devices.
>>>
>>> This situation can happen quite often; for example, if the user forgets
>>> to plug in a USB device before booting, runs "usb start", realizes that,
>>> then plugs it in and runs "usb start" again. This is compounded on at
>>> least one of the Tegra boards, since CONFIG_PREBOOT is set to "usb
>>> start" on systems (laptops/clamshells) which have built-in USB keyboards.
>>>
>>> If I simply revert this patch, then everything works again. (Yes,
>>> reverting requires fixing a small merge conflict.)
>>>
>>> Do you have any idea what the problem can be? I'm tempted to simply ask
>>> for the patch to be reverted since it causes a regression.
>>>
>>> Thanks for any idea how to fix this!
>>
>> BUMP? Vivek, any ideas? Otherwise I'm reverting this.
...
> There's one BUG that i could see in " 0bf796f " commit.
> Now that we parallelized the sequence to power cycle ports, so if
> get_port_status for any port failed,
> it returns from hub_power_on() and not power-on any of the port.
> 
> Below is the change i suggest.
...
> can you please confirm if you problem is related to this BUG in the
> sequence of power-cycling the ports.

I applied that change, and it does not solve the problem on Tegra, nor
do I see any of the messages that were changed from debug to printf.
Below is the log:

U-Boot 2013.04-00281-g0e8ef51 (Jul 01 2013 - 10:33:36)

TEGRA20
Board: NVIDIA Seaboard
DRAM:  1 GiB
NAND:  512 MiB
MMC:   Tegra SD/MMC: 0, Tegra SD/MMC: 1
In:    tegra-kbc
Out:   lcd
Err:   lcd
Net:   Net Initialization Skipped
No ethernet found.
(Re)start USB...
USB0:   USB EHCI 1.00
scanning bus 0 for devices... 2 USB Device(s) found
USB1:   USB EHCI 1.00
scanning bus 1 for devices... 2 USB Device(s) found
USB2:   lowlevel init failed
       scanning usb for storage devices... 0 Storage Device(s) found
       scanning usb for ethernet devices...
Warning: asx0 using MAC address from net device
1 Ethernet Device(s) found
Hit any key to stop autoboot:  0


Tegra20 (SeaBoard) # usb start
(Re)start USB...
USB0:   USB EHCI 1.00
scanning bus 0 for devices... 2 USB Device(s) found
USB1:   USB EHCI 1.00
scanning bus 1 for devices... 1 USB Device(s) found

(there's a much longer pause when scanning this bus every time except
the very first)

USB2:   lowlevel init failed
       scanning usb for storage devices... 0 Storage Device(s) found
       scanning usb for ethernet devices... 0 Ethernet Device(s) found


Tegra20 (SeaBoard) # usb start
(Re)start USB...
USB0:   USB EHCI 1.00
scanning bus 0 for devices... 2 USB Device(s) found
USB1:   USB EHCI 1.00
scanning bus 1 for devices... 1 USB Device(s) found
USB2:   lowlevel init failed
       scanning usb for storage devices... 0 Storage Device(s) found
       scanning usb for ethernet devices... 0 Ethernet Device(s) found
Vivek Gautam July 2, 2013, 5:01 p.m. UTC | #2
On Mon, Jul 1, 2013 at 10:11 PM, Stephen Warren <swarren@wwwdotorg.org> wrote:
> On 07/01/2013 07:49 AM, Vivek Gautam wrote:
>> Hi Marek,
>>
>>
>> On Sun, Jun 30, 2013 at 10:08 PM, Marek Vasut <marex@denx.de> wrote:
>>> Dear Stephen Warren,
>>>
>>>> (Sorry to those on to/cc; I'm resending this so it goes to the correct
>>>> mailing list)
>>
>> Dear Stephen,
>> sorry for the delay in responding to this.
>>
>>>>
>>>> Commit 020bbcb "usb: hub: Power-cycle on root-hub ports" causes a
>>>> regression on Tegra systems.
>>>>
>>>> The first time "usb start" is executed, it appears to work correctly.
>>>> However, any subsequent time it is executed, it takes a long time, and
>>>> eventually fails to find any USB devices.
>>>>
>>>> This situation can happen quite often; for example, if the user forgets
>>>> to plug in a USB device before booting, runs "usb start", realizes that,
>>>> then plugs it in and runs "usb start" again. This is compounded on at
>>>> least one of the Tegra boards, since CONFIG_PREBOOT is set to "usb
>>>> start" on systems (laptops/clamshells) which have built-in USB keyboards.
>>>>
>>>> If I simply revert this patch, then everything works again. (Yes,
>>>> reverting requires fixing a small merge conflict.)
>>>>
>>>> Do you have any idea what the problem can be? I'm tempted to simply ask
>>>> for the patch to be reverted since it causes a regression.
>>>>
>>>> Thanks for any idea how to fix this!
>>>
>>> BUMP? Vivek, any ideas? Otherwise I'm reverting this.
> ...
>> There's one BUG that i could see in " 0bf796f " commit.
>> Now that we parallelized the sequence to power cycle ports, so if
>> get_port_status for any port failed,
>> it returns from hub_power_on() and not power-on any of the port.
>>
>> Below is the change i suggest.
> ...
>> can you please confirm if you problem is related to this BUG in the
>> sequence of power-cycling the ports.
>
> I applied that change, and it does not solve the problem on Tegra, nor
> do I see any of the messages that were changed from debug to printf.
> Below is the log:
>
> U-Boot 2013.04-00281-g0e8ef51 (Jul 01 2013 - 10:33:36)
>
> TEGRA20
> Board: NVIDIA Seaboard
> DRAM:  1 GiB
> NAND:  512 MiB
> MMC:   Tegra SD/MMC: 0, Tegra SD/MMC: 1
> In:    tegra-kbc
> Out:   lcd
> Err:   lcd
> Net:   Net Initialization Skipped
> No ethernet found.
> (Re)start USB...
> USB0:   USB EHCI 1.00
> scanning bus 0 for devices... 2 USB Device(s) found
> USB1:   USB EHCI 1.00
> scanning bus 1 for devices... 2 USB Device(s) found
> USB2:   lowlevel init failed
>        scanning usb for storage devices... 0 Storage Device(s) found
>        scanning usb for ethernet devices...
> Warning: asx0 using MAC address from net device
> 1 Ethernet Device(s) found
> Hit any key to stop autoboot:  0
>
>
> Tegra20 (SeaBoard) # usb start
> (Re)start USB...
> USB0:   USB EHCI 1.00
> scanning bus 0 for devices... 2 USB Device(s) found
> USB1:   USB EHCI 1.00
> scanning bus 1 for devices... 1 USB Device(s) found
>
> (there's a much longer pause when scanning this bus every time except
> the very first)

This long pause could be from the 10sec delay present in
common/usb_hub.c: usb_hub_configure(): line 475
(the do-while loop present to check Current Connect Status and Connect
Status Change bits)

I could actually see somewhat similar issue of long pause on xHCI
port, if we didn't apply patches:
0bf796f usb: hub: Parallelize power-cycling of root-hub ports
020bbcb usb: hub: Power-cycle on root-hub ports

This was because, once usb_hub_power_on() was called, Connect Status
Change bit of xHC port was
getting cleared though Current Connect Status was still asserted, even
untill that no code handles that bit.

For xHC, setting the Port_power bit, in case that bit was initially
asserted clears CSC bit.

>
> USB2:   lowlevel init failed
>        scanning usb for storage devices... 0 Storage Device(s) found
>        scanning usb for ethernet devices... 0 Ethernet Device(s) found
>
>
> Tegra20 (SeaBoard) # usb start
> (Re)start USB...
> USB0:   USB EHCI 1.00
> scanning bus 0 for devices... 2 USB Device(s) found
> USB1:   USB EHCI 1.00
> scanning bus 1 for devices... 1 USB Device(s) found
> USB2:   lowlevel init failed
>        scanning usb for storage devices... 0 Storage Device(s) found
>        scanning usb for ethernet devices... 0 Ethernet Device(s) found

I think we should be checking EHCI registers now, PORTSC register to
be specific to see how the
port power is getting affected.
On smdk5250 i am unable see this behavior, which is having only one
controller unlike
seaboard which i can see has 3 controllers.
Marek Vasut July 8, 2013, 1:03 p.m. UTC | #3
Hi guys,

> On Mon, Jul 1, 2013 at 10:11 PM, Stephen Warren <swarren@wwwdotorg.org> wrote:
> > On 07/01/2013 07:49 AM, Vivek Gautam wrote:
> >> Hi Marek,
> >> 
> >> On Sun, Jun 30, 2013 at 10:08 PM, Marek Vasut <marex@denx.de> wrote:
> >>> Dear Stephen Warren,
> >>> 
> >>>> (Sorry to those on to/cc; I'm resending this so it goes to the correct
> >>>> mailing list)
> >> 
> >> Dear Stephen,
> >> sorry for the delay in responding to this.
> >> 
> >>>> Commit 020bbcb "usb: hub: Power-cycle on root-hub ports" causes a
> >>>> regression on Tegra systems.
> >>>> 
> >>>> The first time "usb start" is executed, it appears to work correctly.
> >>>> However, any subsequent time it is executed, it takes a long time, and
> >>>> eventually fails to find any USB devices.
> >>>> 
> >>>> This situation can happen quite often; for example, if the user
> >>>> forgets to plug in a USB device before booting, runs "usb start",
> >>>> realizes that, then plugs it in and runs "usb start" again. This is
> >>>> compounded on at least one of the Tegra boards, since CONFIG_PREBOOT
> >>>> is set to "usb start" on systems (laptops/clamshells) which have
> >>>> built-in USB keyboards.
> >>>> 
> >>>> If I simply revert this patch, then everything works again. (Yes,
> >>>> reverting requires fixing a small merge conflict.)
> >>>> 
> >>>> Do you have any idea what the problem can be? I'm tempted to simply
> >>>> ask for the patch to be reverted since it causes a regression.
> >>>> 
> >>>> Thanks for any idea how to fix this!
> >>> 
> >>> BUMP? Vivek, any ideas? Otherwise I'm reverting this.
> > 
> > ...
> > 
> >> There's one BUG that i could see in " 0bf796f " commit.
> >> Now that we parallelized the sequence to power cycle ports, so if
> >> get_port_status for any port failed,
> >> it returns from hub_power_on() and not power-on any of the port.
> >> 
> >> Below is the change i suggest.
> > 
> > ...
> > 
> >> can you please confirm if you problem is related to this BUG in the
> >> sequence of power-cycling the ports.
> > 
> > I applied that change, and it does not solve the problem on Tegra, nor
> > do I see any of the messages that were changed from debug to printf.
> > Below is the log:
> > 
> > U-Boot 2013.04-00281-g0e8ef51 (Jul 01 2013 - 10:33:36)
> > 
> > TEGRA20
> > Board: NVIDIA Seaboard
> > DRAM:  1 GiB
> > NAND:  512 MiB
> > MMC:   Tegra SD/MMC: 0, Tegra SD/MMC: 1
> > In:    tegra-kbc
> > Out:   lcd
> > Err:   lcd
> > Net:   Net Initialization Skipped
> > No ethernet found.
> > (Re)start USB...
> > USB0:   USB EHCI 1.00
> > scanning bus 0 for devices... 2 USB Device(s) found
> > USB1:   USB EHCI 1.00
> > scanning bus 1 for devices... 2 USB Device(s) found
> > USB2:   lowlevel init failed
> > 
> >        scanning usb for storage devices... 0 Storage Device(s) found
> >        scanning usb for ethernet devices...
> > 
> > Warning: asx0 using MAC address from net device
> > 1 Ethernet Device(s) found
> > Hit any key to stop autoboot:  0
> > 
> > 
> > Tegra20 (SeaBoard) # usb start
> > (Re)start USB...
> > USB0:   USB EHCI 1.00
> > scanning bus 0 for devices... 2 USB Device(s) found
> > USB1:   USB EHCI 1.00
> > scanning bus 1 for devices... 1 USB Device(s) found
> > 
> > (there's a much longer pause when scanning this bus every time except
> > the very first)
> 
> This long pause could be from the 10sec delay present in
> common/usb_hub.c: usb_hub_configure(): line 475
> (the do-while loop present to check Current Connect Status and Connect
> Status Change bits)
> 
> I could actually see somewhat similar issue of long pause on xHCI
> port, if we didn't apply patches:
> 0bf796f usb: hub: Parallelize power-cycling of root-hub ports
> 020bbcb usb: hub: Power-cycle on root-hub ports
> 
> This was because, once usb_hub_power_on() was called, Connect Status
> Change bit of xHC port was
> getting cleared though Current Connect Status was still asserted, even
> untill that no code handles that bit.
> 
> For xHC, setting the Port_power bit, in case that bit was initially
> asserted clears CSC bit.
> 
> > USB2:   lowlevel init failed
> > 
> >        scanning usb for storage devices... 0 Storage Device(s) found
> >        scanning usb for ethernet devices... 0 Ethernet Device(s) found
> > 
> > Tegra20 (SeaBoard) # usb start
> > (Re)start USB...
> > USB0:   USB EHCI 1.00
> > scanning bus 0 for devices... 2 USB Device(s) found
> > USB1:   USB EHCI 1.00
> > scanning bus 1 for devices... 1 USB Device(s) found
> > USB2:   lowlevel init failed
> > 
> >        scanning usb for storage devices... 0 Storage Device(s) found
> >        scanning usb for ethernet devices... 0 Ethernet Device(s) found
> 
> I think we should be checking EHCI registers now, PORTSC register to
> be specific to see how the
> port power is getting affected.
> On smdk5250 i am unable see this behavior, which is having only one
> controller unlike
> seaboard which i can see has 3 controllers.

Vivek, what do I have to revert to fix this flub? I will do that now, since this 
discussion is stalled.

Best regards,
Marek Vasut
Vivek Gautam July 8, 2013, 1:25 p.m. UTC | #4
Hi Marek,


On Mon, Jul 8, 2013 at 6:33 PM, Marek Vasut <marex@denx.de> wrote:
> Hi guys,
>
>> On Mon, Jul 1, 2013 at 10:11 PM, Stephen Warren <swarren@wwwdotorg.org> wrote:
>> > On 07/01/2013 07:49 AM, Vivek Gautam wrote:
>> >> Hi Marek,
>> >>
>> >> On Sun, Jun 30, 2013 at 10:08 PM, Marek Vasut <marex@denx.de> wrote:
>> >>> Dear Stephen Warren,
>> >>>
>> >>>> (Sorry to those on to/cc; I'm resending this so it goes to the correct
>> >>>> mailing list)
>> >>
>> >> Dear Stephen,
>> >> sorry for the delay in responding to this.
>> >>
>> >>>> Commit 020bbcb "usb: hub: Power-cycle on root-hub ports" causes a
>> >>>> regression on Tegra systems.
>> >>>>
>> >>>> The first time "usb start" is executed, it appears to work correctly.
>> >>>> However, any subsequent time it is executed, it takes a long time, and
>> >>>> eventually fails to find any USB devices.
>> >>>>
>> >>>> This situation can happen quite often; for example, if the user
>> >>>> forgets to plug in a USB device before booting, runs "usb start",
>> >>>> realizes that, then plugs it in and runs "usb start" again. This is
>> >>>> compounded on at least one of the Tegra boards, since CONFIG_PREBOOT
>> >>>> is set to "usb start" on systems (laptops/clamshells) which have
>> >>>> built-in USB keyboards.
>> >>>>
>> >>>> If I simply revert this patch, then everything works again. (Yes,
>> >>>> reverting requires fixing a small merge conflict.)
>> >>>>
>> >>>> Do you have any idea what the problem can be? I'm tempted to simply
>> >>>> ask for the patch to be reverted since it causes a regression.
>> >>>>
>> >>>> Thanks for any idea how to fix this!
>> >>>
>> >>> BUMP? Vivek, any ideas? Otherwise I'm reverting this.
>> >
>> > ...
>> >
>> >> There's one BUG that i could see in " 0bf796f " commit.
>> >> Now that we parallelized the sequence to power cycle ports, so if
>> >> get_port_status for any port failed,
>> >> it returns from hub_power_on() and not power-on any of the port.
>> >>
>> >> Below is the change i suggest.
>> >
>> > ...
>> >
>> >> can you please confirm if you problem is related to this BUG in the
>> >> sequence of power-cycling the ports.
>> >
>> > I applied that change, and it does not solve the problem on Tegra, nor
>> > do I see any of the messages that were changed from debug to printf.
>> > Below is the log:
>> >
>> > U-Boot 2013.04-00281-g0e8ef51 (Jul 01 2013 - 10:33:36)
>> >
>> > TEGRA20
>> > Board: NVIDIA Seaboard
>> > DRAM:  1 GiB
>> > NAND:  512 MiB
>> > MMC:   Tegra SD/MMC: 0, Tegra SD/MMC: 1
>> > In:    tegra-kbc
>> > Out:   lcd
>> > Err:   lcd
>> > Net:   Net Initialization Skipped
>> > No ethernet found.
>> > (Re)start USB...
>> > USB0:   USB EHCI 1.00
>> > scanning bus 0 for devices... 2 USB Device(s) found
>> > USB1:   USB EHCI 1.00
>> > scanning bus 1 for devices... 2 USB Device(s) found
>> > USB2:   lowlevel init failed
>> >
>> >        scanning usb for storage devices... 0 Storage Device(s) found
>> >        scanning usb for ethernet devices...
>> >
>> > Warning: asx0 using MAC address from net device
>> > 1 Ethernet Device(s) found
>> > Hit any key to stop autoboot:  0
>> >
>> >
>> > Tegra20 (SeaBoard) # usb start
>> > (Re)start USB...
>> > USB0:   USB EHCI 1.00
>> > scanning bus 0 for devices... 2 USB Device(s) found
>> > USB1:   USB EHCI 1.00
>> > scanning bus 1 for devices... 1 USB Device(s) found
>> >
>> > (there's a much longer pause when scanning this bus every time except
>> > the very first)
>>
>> This long pause could be from the 10sec delay present in
>> common/usb_hub.c: usb_hub_configure(): line 475
>> (the do-while loop present to check Current Connect Status and Connect
>> Status Change bits)
>>
>> I could actually see somewhat similar issue of long pause on xHCI
>> port, if we didn't apply patches:
>> 0bf796f usb: hub: Parallelize power-cycling of root-hub ports
>> 020bbcb usb: hub: Power-cycle on root-hub ports
>>
>> This was because, once usb_hub_power_on() was called, Connect Status
>> Change bit of xHC port was
>> getting cleared though Current Connect Status was still asserted, even
>> untill that no code handles that bit.
>>
>> For xHC, setting the Port_power bit, in case that bit was initially
>> asserted clears CSC bit.
>>
>> > USB2:   lowlevel init failed
>> >
>> >        scanning usb for storage devices... 0 Storage Device(s) found
>> >        scanning usb for ethernet devices... 0 Ethernet Device(s) found
>> >
>> > Tegra20 (SeaBoard) # usb start
>> > (Re)start USB...
>> > USB0:   USB EHCI 1.00
>> > scanning bus 0 for devices... 2 USB Device(s) found
>> > USB1:   USB EHCI 1.00
>> > scanning bus 1 for devices... 1 USB Device(s) found
>> > USB2:   lowlevel init failed
>> >
>> >        scanning usb for storage devices... 0 Storage Device(s) found
>> >        scanning usb for ethernet devices... 0 Ethernet Device(s) found
>>
>> I think we should be checking EHCI registers now, PORTSC register to
>> be specific to see how the
>> port power is getting affected.
>> On smdk5250 i am unable see this behavior, which is having only one
>> controller unlike
>> seaboard which i can see has 3 controllers.
>
> Vivek, what do I have to revert to fix this flub? I will do that now, since this
> discussion is stalled.

0bf796f usb: hub: Parallelize power-cycling of root-hub ports
020bbcb usb: hub: Power-cycle on root-hub ports

Above two patches are the one which changed the hub_power_on() functionality.
If Stephen can confirm that reverting these patches really solves the
problem on Tegra,
we can revert them.

I will have to figure out some other way to handle xHC ports. ;-)
Stephen Warren July 8, 2013, 3:58 p.m. UTC | #5
On 07/08/2013 07:25 AM, Vivek Gautam wrote:
> On Mon, Jul 8, 2013 at 6:33 PM, Marek Vasut <marex@denx.de> wrote:
>>> On Mon, Jul 1, 2013 at 10:11 PM, Stephen Warren <swarren@wwwdotorg.org> wrote:
>>>> On 07/01/2013 07:49 AM, Vivek Gautam wrote:
>>>>> On Sun, Jun 30, 2013 at 10:08 PM, Marek Vasut <marex@denx.de> wrote:
>>>>>>> (Sorry to those on to/cc; I'm resending this so it goes to the correct
>>>>>>> mailing list)
>>>>>
>>>>> Dear Stephen,
>>>>> sorry for the delay in responding to this.
>>>>>
>>>>>>> Commit 020bbcb "usb: hub: Power-cycle on root-hub ports" causes a
>>>>>>> regression on Tegra systems.
>>>>>>>
>>>>>>> The first time "usb start" is executed, it appears to work correctly.
>>>>>>> However, any subsequent time it is executed, it takes a long time, and
>>>>>>> eventually fails to find any USB devices.
...
>>>>>> BUMP? Vivek, any ideas? Otherwise I'm reverting this.
...
>>>>> There's one BUG that i could see in " 0bf796f " commit.
>>>>> Now that we parallelized the sequence to power cycle ports, so if
>>>>> get_port_status for any port failed,
>>>>> it returns from hub_power_on() and not power-on any of the port.
>>>>>
>>>>> Below is the change i suggest.
...
>>>>> can you please confirm if you problem is related to this BUG in the
>>>>> sequence of power-cycling the ports.
>>>>
>>>> I applied that change, and it does not solve the problem on Tegra, nor
>>>> do I see any of the messages that were changed from debug to printf.
...
>>> seaboard which i can see has 3 controllers.
>>
>> Vivek, what do I have to revert to fix this flub? I will do that now, since this
>> discussion is stalled.
> 
> 0bf796f usb: hub: Parallelize power-cycling of root-hub ports
> 020bbcb usb: hub: Power-cycle on root-hub ports
> 
> Above two patches are the one which changed the hub_power_on() functionality.
> If Stephen can confirm that reverting these patches really solves the
> problem on Tegra,
> we can revert them.

Yes, I have been reverting those two commits locally for a while, and it
solves the problem for me.
Marek Vasut July 8, 2013, 5:03 p.m. UTC | #6
Dear Stephen Warren,

> On 07/08/2013 07:25 AM, Vivek Gautam wrote:
> > On Mon, Jul 8, 2013 at 6:33 PM, Marek Vasut <marex@denx.de> wrote:
> >>> On Mon, Jul 1, 2013 at 10:11 PM, Stephen Warren <swarren@wwwdotorg.org> 
wrote:
> >>>> On 07/01/2013 07:49 AM, Vivek Gautam wrote:
> >>>>> On Sun, Jun 30, 2013 at 10:08 PM, Marek Vasut <marex@denx.de> wrote:
> >>>>>>> (Sorry to those on to/cc; I'm resending this so it goes to the
> >>>>>>> correct mailing list)
> >>>>> 
> >>>>> Dear Stephen,
> >>>>> sorry for the delay in responding to this.
> >>>>> 
> >>>>>>> Commit 020bbcb "usb: hub: Power-cycle on root-hub ports" causes a
> >>>>>>> regression on Tegra systems.
> >>>>>>> 
> >>>>>>> The first time "usb start" is executed, it appears to work
> >>>>>>> correctly. However, any subsequent time it is executed, it takes a
> >>>>>>> long time, and eventually fails to find any USB devices.
> 
> ...
> 
> >>>>>> BUMP? Vivek, any ideas? Otherwise I'm reverting this.
> 
> ...
> 
> >>>>> There's one BUG that i could see in " 0bf796f " commit.
> >>>>> Now that we parallelized the sequence to power cycle ports, so if
> >>>>> get_port_status for any port failed,
> >>>>> it returns from hub_power_on() and not power-on any of the port.
> >>>>> 
> >>>>> Below is the change i suggest.
> 
> ...
> 
> >>>>> can you please confirm if you problem is related to this BUG in the
> >>>>> sequence of power-cycling the ports.
> >>>> 
> >>>> I applied that change, and it does not solve the problem on Tegra, nor
> >>>> do I see any of the messages that were changed from debug to printf.
> 
> ...
> 
> >>> seaboard which i can see has 3 controllers.
> >> 
> >> Vivek, what do I have to revert to fix this flub? I will do that now,
> >> since this discussion is stalled.
> > 
> > 0bf796f usb: hub: Parallelize power-cycling of root-hub ports
> > 020bbcb usb: hub: Power-cycle on root-hub ports
> > 
> > Above two patches are the one which changed the hub_power_on()
> > functionality. If Stephen can confirm that reverting these patches
> > really solves the problem on Tegra,
> > we can revert them.
> 
> Yes, I have been reverting those two commits locally for a while, and it
> solves the problem for me.

Reverted, please test u-boot-usb/master .

Best regards,
Marek Vasut
Stephen Warren July 8, 2013, 6:03 p.m. UTC | #7
On 07/08/2013 11:03 AM, Marek Vasut wrote:
> Dear Stephen Warren,
> 
>> On 07/08/2013 07:25 AM, Vivek Gautam wrote:
>>> On Mon, Jul 8, 2013 at 6:33 PM, Marek Vasut <marex@denx.de> wrote:
>>>>> On Mon, Jul 1, 2013 at 10:11 PM, Stephen Warren <swarren@wwwdotorg.org> 
> wrote:
>>>>>> On 07/01/2013 07:49 AM, Vivek Gautam wrote:
>>>>>>> On Sun, Jun 30, 2013 at 10:08 PM, Marek Vasut <marex@denx.de> wrote:
>>>>>>>>> (Sorry to those on to/cc; I'm resending this so it goes to the
>>>>>>>>> correct mailing list)
>>>>>>>
>>>>>>> Dear Stephen,
>>>>>>> sorry for the delay in responding to this.
>>>>>>>
>>>>>>>>> Commit 020bbcb "usb: hub: Power-cycle on root-hub ports" causes a
>>>>>>>>> regression on Tegra systems.
...
>>>> Vivek, what do I have to revert to fix this flub? I will do that now,
>>>> since this discussion is stalled.
>>>
>>> 0bf796f usb: hub: Parallelize power-cycling of root-hub ports
>>> 020bbcb usb: hub: Power-cycle on root-hub ports
>>>
>>> Above two patches are the one which changed the hub_power_on()
>>> functionality. If Stephen can confirm that reverting these patches
>>> really solves the problem on Tegra,
>>> we can revert them.
>>
>> Yes, I have been reverting those two commits locally for a while, and it
>> solves the problem for me.
> 
> Reverted, please test u-boot-usb/master .

Well, it works, but it turns out the reverts aren't needed. Simon Glass
already found the problem, and fixed it with:

ed10e66 usb: Correct CLEAR_FEATURE code in ehci-hcd

Sorry for not noticing this earlier, but since there hadn't been any
news in this thread, and there weren't any relevant changes to the
power-cycling code affected by the problematic patches, it didn't occur
to me that the problem may have already been fixed elsewhere, so I
didn't ever retest the issue with a newer commit than that one where I
originally found the problem:-(
Marek Vasut July 8, 2013, 6:25 p.m. UTC | #8
Dear Stephen Warren,

> On 07/08/2013 11:03 AM, Marek Vasut wrote:
> > Dear Stephen Warren,
> > 
> >> On 07/08/2013 07:25 AM, Vivek Gautam wrote:
> >>> On Mon, Jul 8, 2013 at 6:33 PM, Marek Vasut <marex@denx.de> wrote:
> >>>>> On Mon, Jul 1, 2013 at 10:11 PM, Stephen Warren
> >>>>> <swarren@wwwdotorg.org>
> > 
> > wrote:
> >>>>>> On 07/01/2013 07:49 AM, Vivek Gautam wrote:
> >>>>>>> On Sun, Jun 30, 2013 at 10:08 PM, Marek Vasut <marex@denx.de> wrote:
> >>>>>>>>> (Sorry to those on to/cc; I'm resending this so it goes to the
> >>>>>>>>> correct mailing list)
> >>>>>>> 
> >>>>>>> Dear Stephen,
> >>>>>>> sorry for the delay in responding to this.
> >>>>>>> 
> >>>>>>>>> Commit 020bbcb "usb: hub: Power-cycle on root-hub ports" causes a
> >>>>>>>>> regression on Tegra systems.
> 
> ...
> 
> >>>> Vivek, what do I have to revert to fix this flub? I will do that now,
> >>>> since this discussion is stalled.
> >>> 
> >>> 0bf796f usb: hub: Parallelize power-cycling of root-hub ports
> >>> 020bbcb usb: hub: Power-cycle on root-hub ports
> >>> 
> >>> Above two patches are the one which changed the hub_power_on()
> >>> functionality. If Stephen can confirm that reverting these patches
> >>> really solves the problem on Tegra,
> >>> we can revert them.
> >> 
> >> Yes, I have been reverting those two commits locally for a while, and it
> >> solves the problem for me.
> > 
> > Reverted, please test u-boot-usb/master .
> 
> Well, it works, but it turns out the reverts aren't needed. Simon Glass
> already found the problem, and fixed it with:
> 
> ed10e66 usb: Correct CLEAR_FEATURE code in ehci-hcd
> 
> Sorry for not noticing this earlier, but since there hadn't been any
> news in this thread, and there weren't any relevant changes to the
> power-cycling code affected by the problematic patches, it didn't occur
> to me that the problem may have already been fixed elsewhere, so I
> didn't ever retest the issue with a newer commit than that one where I
> originally found the problem:-(

OK, I dropped the reverts, retest again please.

Best regards,
Marek Vasut
Stephen Warren July 8, 2013, 6:28 p.m. UTC | #9
On 07/08/2013 12:25 PM, Marek Vasut wrote:
> Dear Stephen Warren,
> 
>> On 07/08/2013 11:03 AM, Marek Vasut wrote:
>>> Dear Stephen Warren,
>>>
>>>> On 07/08/2013 07:25 AM, Vivek Gautam wrote:
>>>>> On Mon, Jul 8, 2013 at 6:33 PM, Marek Vasut <marex@denx.de> wrote:
>>>>>>> On Mon, Jul 1, 2013 at 10:11 PM, Stephen Warren
>>>>>>> <swarren@wwwdotorg.org>
>>>
>>> wrote:
>>>>>>>> On 07/01/2013 07:49 AM, Vivek Gautam wrote:
>>>>>>>>> On Sun, Jun 30, 2013 at 10:08 PM, Marek Vasut <marex@denx.de> wrote:
>>>>>>>>>>> (Sorry to those on to/cc; I'm resending this so it goes to the
>>>>>>>>>>> correct mailing list)
>>>>>>>>>
>>>>>>>>> Dear Stephen,
>>>>>>>>> sorry for the delay in responding to this.
>>>>>>>>>
>>>>>>>>>>> Commit 020bbcb "usb: hub: Power-cycle on root-hub ports" causes a
>>>>>>>>>>> regression on Tegra systems.
>>
>> ...
>>
>>>>>> Vivek, what do I have to revert to fix this flub? I will do that now,
>>>>>> since this discussion is stalled.
>>>>>
>>>>> 0bf796f usb: hub: Parallelize power-cycling of root-hub ports
>>>>> 020bbcb usb: hub: Power-cycle on root-hub ports
>>>>>
>>>>> Above two patches are the one which changed the hub_power_on()
>>>>> functionality. If Stephen can confirm that reverting these patches
>>>>> really solves the problem on Tegra,
>>>>> we can revert them.
>>>>
>>>> Yes, I have been reverting those two commits locally for a while, and it
>>>> solves the problem for me.
>>>
>>> Reverted, please test u-boot-usb/master .
>>
>> Well, it works, but it turns out the reverts aren't needed. Simon Glass
>> already found the problem, and fixed it with:
>>
>> ed10e66 usb: Correct CLEAR_FEATURE code in ehci-hcd
>>
>> Sorry for not noticing this earlier, but since there hadn't been any
>> news in this thread, and there weren't any relevant changes to the
>> power-cycling code affected by the problematic patches, it didn't occur
>> to me that the problem may have already been fixed elsewhere, so I
>> didn't ever retest the issue with a newer commit than that one where I
>> originally found the problem:-(
> 
> OK, I dropped the reverts, retest again please.

I had already tested the commit in your tree right before the reverts
(a36466c50b1b3614c3cfdae194227f7dd8e2c592); that's how I noticed that
the reverts weren't necessary, since I'd expected that commit to fail
but it didn't.
Marek Vasut July 8, 2013, 7:50 p.m. UTC | #10
Dear Stephen Warren,

[...]

> I had already tested the commit in your tree right before the reverts
> (a36466c50b1b3614c3cfdae194227f7dd8e2c592); that's how I noticed that
> the reverts weren't necessary, since I'd expected that commit to fail
> but it didn't.

So we are now all good? Ready for release, no problems anywhere?

Best regards,
Marek Vasut
Stephen Warren July 8, 2013, 7:53 p.m. UTC | #11
On 07/08/2013 01:50 PM, Marek Vasut wrote:
> Dear Stephen Warren,
> 
> [...]
> 
>> I had already tested the commit in your tree right before the reverts
>> (a36466c50b1b3614c3cfdae194227f7dd8e2c592); that's how I noticed that
>> the reverts weren't necessary, since I'd expected that commit to fail
>> but it didn't.
> 
> So we are now all good? Ready for release, no problems anywhere?

As far as I know, yes.

(Although I haven't tested u-boot/master recently, but anyway)
Vivek Gautam July 9, 2013, 7:46 a.m. UTC | #12
On Tue, Jul 9, 2013 at 1:23 AM, Stephen Warren <swarren@wwwdotorg.org> wrote:
> On 07/08/2013 01:50 PM, Marek Vasut wrote:
>> Dear Stephen Warren,
>>
>> [...]
>>
>>> I had already tested the commit in your tree right before the reverts
>>> (a36466c50b1b3614c3cfdae194227f7dd8e2c592); that's how I noticed that
>>> the reverts weren't necessary, since I'd expected that commit to fail
>>> but it didn't.

Good to hear that things are working now. :-)
Sorry, i missed to notice that patch from Simon, i should have caught
that earlier on u-boot-usb/master.

>>
>> So we are now all good? Ready for release, no problems anywhere?
>
> As far as I know, yes.
>
> (Although I haven't tested u-boot/master recently, but anyway)
diff mbox

Patch

diff --git a/common/usb_hub.c b/common/usb_hub.c
index 774ba63..437a51f 100644
--- a/common/usb_hub.c
+++ b/common/usb_hub.c
@@ -127,7 +127,7 @@  static void usb_hub_power_on(struct usb_hub_device *hub)
        for (i = 0; i < dev->maxchild; i++) {
                ret = usb_get_port_status(dev, i + 1, portsts);
                if (ret < 0) {
-                       debug("port %d: get_port_status failed\n", i + 1);
+                       printf("port %d: get_port_status failed\n", i + 1);
                        return;
                }

@@ -142,12 +142,10 @@  static void usb_hub_power_on(struct usb_hub_device *hub)
                 */
                portstatus = le16_to_cpu(portsts->wPortStatus);
                if (portstatus & (USB_PORT_STAT_POWER << 1)) {
-                       debug("port %d: Port power change failed\n", i + 1);
+                       printf("port %d: Port power change failed\n", i + 1);
                        return;
                }
-       }

-       for (i = 0; i < dev->maxchild; i++) {
                usb_set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER);
                debug("port %d returns %lX\n", i + 1, dev->status);
        }