Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1263867 > unrolled thread

[RFC] usb: dwc2: hcd: fix split schedule issue

Started byYunzhi Li <lyz@rock-chips.com>
First post2015-11-06 10:40 +0100
Last post2015-11-09 15:40 +0100
Articles 12 — 4 participants

Back to article view | Back to linux.kernel


Contents

  [RFC] usb: dwc2: hcd: fix split schedule issue Yunzhi Li <lyz@rock-chips.com> - 2015-11-06 10:40 +0100
    Re: [RFC] usb: dwc2: hcd: fix split schedule issue Yunzhi Li <lyz@rock-chips.com> - 2015-11-06 11:10 +0100
      Re: [RFC] usb: dwc2: hcd: fix split schedule issue Doug Anderson <dianders@chromium.org> - 2015-11-12 01:30 +0100
        Re: [RFC] usb: dwc2: hcd: fix split schedule issue John Youn <John.Youn@synopsys.com> - 2015-11-12 05:40 +0100
          Re: [RFC] usb: dwc2: hcd: fix split schedule issue Doug Anderson <dianders@chromium.org> - 2015-11-12 05:50 +0100
            Re: [RFC] usb: dwc2: hcd: fix split schedule issue John Youn <John.Youn@synopsys.com> - 2015-11-13 06:10 +0100
              Re: [RFC] usb: dwc2: hcd: fix split schedule issue Doug Anderson <dianders@chromium.org> - 2015-11-14 01:40 +0100
                Re: [RFC] usb: dwc2: hcd: fix split schedule issue Alan Stern <stern@rowland.harvard.edu> - 2015-11-14 18:40 +0100
          Re: [RFC] usb: dwc2: hcd: fix split schedule issue Yunzhi Li <lyz@rock-chips.com> - 2015-11-12 10:50 +0100
    Re: [RFC] usb: dwc2: hcd: fix split schedule issue Doug Anderson <dianders@chromium.org> - 2015-11-07 01:00 +0100
      Re: [RFC] usb: dwc2: hcd: fix split schedule issue Yunzhi Li <lyz@rock-chips.com> - 2015-11-09 11:10 +0100
        Re: [RFC] usb: dwc2: hcd: fix split schedule issue Doug Anderson <dianders@chromium.org> - 2015-11-09 15:40 +0100

#1263867 — [RFC] usb: dwc2: hcd: fix split schedule issue

FromYunzhi Li <lyz@rock-chips.com>
Date2015-11-06 10:40 +0100
Subject[RFC] usb: dwc2: hcd: fix split schedule issue
Message-ID<qrLF0-2Hw-7@gated-at.bofh.it>
Fix dwc2 split schedule sequence issue. Not schedule a SSPLIT_IN
packet between SSPLIT-begin and SSPLIT-end.

Signed-off-by: Yunzhi Li <lyz@rock-chips.com>
---
 drivers/usb/dwc2/hcd.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
index e79baf7..a32ed01 100644
--- a/drivers/usb/dwc2/hcd.c
+++ b/drivers/usb/dwc2/hcd.c
@@ -1122,6 +1122,10 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
 			break;
 		}
 
+		if (qh->channel->xact_pos == DWC2_HCSPLT_XACTPOS_BEGIN ||
+		    qh->channel->xact_pos == DWC2_HCSPLT_XACTPOS_MID)
+			break;
+
 		/*
 		 * In Slave mode, stay on the current transfer until there is
 		 * nothing more to do or the high-bandwidth request count is
-- 
2.0.0


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1263890

FromYunzhi Li <lyz@rock-chips.com>
Date2015-11-06 11:10 +0100
Message-ID<qrM82-36S-41@gated-at.bofh.it>
In reply to#1263867
hi John ,

   As we talked yesterday, I tried to fix the split schedule sequence. This patch will
avoid scheduling SSPLIT-IN packet for another device between SSPLIT-OUT-begin and
SSPLIT-OUT-end, now the keyboard and Jebra audio speaker could work together well, but
I'm not sure if this is exactly the right way to schedule split transfers and if there
is any dide effect with this patch. Please help review this patch. Thanks.

> Fix dwc2 split schedule sequence issue. Not schedule a SSPLIT_IN
> packet between SSPLIT-begin and SSPLIT-end.
>
> Signed-off-by: Yunzhi Li <lyz@rock-chips.com>
> ---
>   drivers/usb/dwc2/hcd.c | 4 ++++
>   1 file changed, 4 insertions(+)
>
> diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
> index e79baf7..a32ed01 100644
> --- a/drivers/usb/dwc2/hcd.c
> +++ b/drivers/usb/dwc2/hcd.c
> @@ -1122,6 +1122,10 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
>   			break;
>   		}
>   
> +		if (qh->channel->xact_pos == DWC2_HCSPLT_XACTPOS_BEGIN ||
> +		    qh->channel->xact_pos == DWC2_HCSPLT_XACTPOS_MID)
> +			break;
> +
>   		/*
>   		 * In Slave mode, stay on the current transfer until there is
>   		 * nothing more to do or the high-bandwidth request count is

> On 11/5/2015 2:13 AM, lyz@rock-chips.com wrote:
>> Hi John :
>>
>>       We found some problem when we tested usb audio speaker on rk3288 platform
>> which use dwc2 IP v3.10a as usb controller
>>
>> Steps to reproduce the problem:
>> 1. Plug in USB2.0 hub to rk3288 platform board.
>> 2. Plug in USB keyboard to the hub.
>> 3. Plug in USB audio speaker speaker(Jabra 410 or 510) to the hub
>> (These audio speakers support full speed data packet length 192 byte and it will
>> be split into 2 SSPLIT-OUT packets (188B + 4B) in
>> high speed bus other usb audio devices which has FS data packets length smaller
>> then 188B not has this issue )
>> 4. Play music via usb speaker then USB keyboard stop working
>>
>> I do some debug work and try to figure out the root cause of this issue :
>> Use the usb protocol analyzer to catch usb traffic in high speed bus
>> I see something weired that dwc2 send SSPLIT IN for dev 5 between two SSPLIT OUT
>> transaction for dev 6
>> then hub respond a NYET for dev 5 CSPLIT and keyboard not working any more.
>> It seems  some problem with split scheduling sequence and it let the hub
>> confused, but I'm not sure which rule
>> in usb20 spec chapters 11 is broken and how to fix it.
>> DWC2 traffic
>>
>> I alsocatch the usb traffic between an EHCI controller in pc and the hub
>> connected with audio speaker and keyboard
>> both keyboard and audio speaker work well with EHCI. EHCI schedules the SSPLIT
>> IN for keyboard in the next microframe
>> after OUT SSPLIT OUT for audio data packets and the hub can respond NAK .
>>
>>
>> EHCI traffic
>>
>> I will keep on debugging for this issue and try to fix the scheduling sequence ,
>> does anyone have any  ideas could be help with this issue ?
>>
>> --------------------------------------------------------------------------------
>> lyz@rock-chips.com
>>
> Thanks for this report. I'll try to reproduce and forward it
> along to some of our experts.
>
> Regards,
> John
>



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1267549

FromDoug Anderson <dianders@chromium.org>
Date2015-11-12 01:30 +0100
Message-ID<qtNW2-1CS-3@gated-at.bofh.it>
In reply to#1263890
John,

On Fri, Nov 6, 2015 at 2:04 AM, Yunzhi Li <lyz@rock-chips.com> wrote:
> hi John ,
>
>   As we talked yesterday, I tried to fix the split schedule sequence. This
> patch will
> avoid scheduling SSPLIT-IN packet for another device between
> SSPLIT-OUT-begin and
> SSPLIT-OUT-end, now the keyboard and Jebra audio speaker could work together
> well, but
> I'm not sure if this is exactly the right way to schedule split transfers
> and if there
> is any dide effect with this patch. Please help review this patch. Thanks.
>
>> Fix dwc2 split schedule sequence issue. Not schedule a SSPLIT_IN
>> packet between SSPLIT-begin and SSPLIT-end.
>>
>> Signed-off-by: Yunzhi Li <lyz@rock-chips.com>
>> ---
>>   drivers/usb/dwc2/hcd.c | 4 ++++
>>   1 file changed, 4 insertions(+)

Did you have any thoughts on this patch?  Although this patch didn't
fix the problems I was seeing with the Microsoft Wireless Keyboard
(see the patch I sent out earlier which does seem to fix it), I can
confirm that in a different setup (HUB goes to USB audio + mouse) that
this patch does fix some problems.

That being said, it feels to me like a band-aid rather than an actual
fix (I'm talking out of my rear end, though, since my USB experience
is lacking at best).  It feels like perhaps we're just not keeping
track the xact_pos correctly, but of course I don't know that for
sure...

Anyway, just fishing...  ;)

-Doug
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1267611

FromJohn Youn <John.Youn@synopsys.com>
Date2015-11-12 05:40 +0100
Message-ID<qtRPX-49d-5@gated-at.bofh.it>
In reply to#1267549
On 11/11/2015 4:22 PM, Doug Anderson wrote:
> John,
> 
> On Fri, Nov 6, 2015 at 2:04 AM, Yunzhi Li <lyz@rock-chips.com> wrote:
>> hi John ,
>>
>>   As we talked yesterday, I tried to fix the split schedule sequence. This
>> patch will
>> avoid scheduling SSPLIT-IN packet for another device between
>> SSPLIT-OUT-begin and
>> SSPLIT-OUT-end, now the keyboard and Jebra audio speaker could work together
>> well, but
>> I'm not sure if this is exactly the right way to schedule split transfers
>> and if there
>> is any dide effect with this patch. Please help review this patch. Thanks.
>>
>>> Fix dwc2 split schedule sequence issue. Not schedule a SSPLIT_IN
>>> packet between SSPLIT-begin and SSPLIT-end.
>>>
>>> Signed-off-by: Yunzhi Li <lyz@rock-chips.com>
>>> ---
>>>   drivers/usb/dwc2/hcd.c | 4 ++++
>>>   1 file changed, 4 insertions(+)
> 
> Did you have any thoughts on this patch?  Although this patch didn't
> fix the problems I was seeing with the Microsoft Wireless Keyboard
> (see the patch I sent out earlier which does seem to fix it), I can
> confirm that in a different setup (HUB goes to USB audio + mouse) that
> this patch does fix some problems.
> 
> That being said, it feels to me like a band-aid rather than an actual
> fix (I'm talking out of my rear end, though, since my USB experience
> is lacking at best).  It feels like perhaps we're just not keeping
> track the xact_pos correctly, but of course I don't know that for
> sure...
> 
> Anyway, just fishing...  ;)
> 
> -Doug
> 

Hi Doug,

I also feel it is not quite right as the SSPLIT should be able to
happen during the SSPLIT of another device. I tried to reproduce
and see the same scheduling but don't see any hang due to it.

Yunzhi, any details on what kind of hub and keyboard you are
using? I have the same Jabra 410 speaker.

Regards,
John




--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1267634

FromDoug Anderson <dianders@chromium.org>
Date2015-11-12 05:50 +0100
Message-ID<qtRZE-4de-5@gated-at.bofh.it>
In reply to#1267611
John,

On Wed, Nov 11, 2015 at 8:29 PM, John Youn <John.Youn@synopsys.com> wrote:
> I also feel it is not quite right as the SSPLIT should be able to
> happen during the SSPLIT of another device. I tried to reproduce
> and see the same scheduling but don't see any hang due to it.
>
> Yunzhi, any details on what kind of hub and keyboard you are
> using? I have the same Jabra 410 speaker.

I saw it with a standard Logitech mouse.  It wasn't a hang, but the
mouse effectively became non-functional (behaved like it hung) when
you started playing audio.  Once the audio stream stopped, the mouse
would work again.  I was using the same Jabra 410 as well.

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=dwc2/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 6, If 0, Class=Human Interface Device,
Driver=usbhid, 1.5M
        |__ Port 3: Dev 5, If 0, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 3: Dev 5, If 1, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 3: Dev 5, If 2, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 3: Dev 5, If 3, Class=Human Interface Device, Driver=, 12M

Bus 002 Device 005: ID 0b0e:0412 GN Netcom
Bus 002 Device 006: ID 046d:c05a Logitech, Inc. M90/M100 Optical Mouse
Bus 002 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

We've also had some discussion of this patch in our bug tracker at
<https://chromium-review.googlesource.com/#/c/312160/>.

I'll keep digging tomorrow, too.

-Doug
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1268614

FromJohn Youn <John.Youn@synopsys.com>
Date2015-11-13 06:10 +0100
Message-ID<queMy-25t-1@gated-at.bofh.it>
In reply to#1267634
On 11/11/2015 8:46 PM, Doug Anderson wrote:
> John,
> 
> On Wed, Nov 11, 2015 at 8:29 PM, John Youn <John.Youn@synopsys.com> wrote:
>> I also feel it is not quite right as the SSPLIT should be able to
>> happen during the SSPLIT of another device. I tried to reproduce
>> and see the same scheduling but don't see any hang due to it.
>>
>> Yunzhi, any details on what kind of hub and keyboard you are
>> using? I have the same Jabra 410 speaker.
> 
> I saw it with a standard Logitech mouse.  It wasn't a hang, but the
> mouse effectively became non-functional (behaved like it hung) when
> you started playing audio.  Once the audio stream stopped, the mouse
> would work again.  I was using the same Jabra 410 as well.
> 
> /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=dwc2/1p, 480M
>     |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
>         |__ Port 2: Dev 6, If 0, Class=Human Interface Device,
> Driver=usbhid, 1.5M
>         |__ Port 3: Dev 5, If 0, Class=Audio, Driver=snd-usb-audio, 12M
>         |__ Port 3: Dev 5, If 1, Class=Audio, Driver=snd-usb-audio, 12M
>         |__ Port 3: Dev 5, If 2, Class=Audio, Driver=snd-usb-audio, 12M
>         |__ Port 3: Dev 5, If 3, Class=Human Interface Device, Driver=, 12M
> 
> Bus 002 Device 005: ID 0b0e:0412 GN Netcom
> Bus 002 Device 006: ID 046d:c05a Logitech, Inc. M90/M100 Optical Mouse
> Bus 002 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
> Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
> 
> We've also had some discussion of this patch in our bug tracker at
> <https://chromium-review.googlesource.com/#/c/312160/>.
> 
> I'll keep digging tomorrow, too.
> 
> -Doug
> 


It seems to be an issue with single TT hubs. I've tried several
multi-TT hubs with no issues.

With a single TT hub I do see a problem though not the exact one
described. I see corrupted and dropped packets on the FS side of
the hub. In a microframe with SSPLIT.begin, taking up the max
bandwidth for the microframe, when another SSPLIT for a different
device is issued, the data gets corrupted on the other side of
the TT. Probably due to exceeding the bandwidth in the microframe
since a single TT hub's ports all share the bandwidth.

With this fix, the next SSPLIT goes out in the same microframe as
the SSPLIT.end and the data goes through fine.

However I don't think this will work as a general fix. Since it
is just skipping things without rescheduling. For example SSPLIT
now happens a microframe later but the CSPLIT is not adjusted so
it comes a microframe too early.

I think the correct fix is to create a proper schedule based on
all the active endpoints to make sure we don't go over the
bandwidth for a single TT hub. Or to make the adjustments earlier
like in dwc2_sched_periodic_split().

Regards,
John






--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1269380

FromDoug Anderson <dianders@chromium.org>
Date2015-11-14 01:40 +0100
Message-ID<qux2O-56s-9@gated-at.bofh.it>
In reply to#1268614
John,

On Thu, Nov 12, 2015 at 9:05 PM, John Youn <John.Youn@synopsys.com> wrote:
> It seems to be an issue with single TT hubs. I've tried several
> multi-TT hubs with no issues.

Agreed.


> With a single TT hub I do see a problem though not the exact one
> described. I see corrupted and dropped packets on the FS side of
> the hub. In a microframe with SSPLIT.begin, taking up the max
> bandwidth for the microframe, when another SSPLIT for a different
> device is issued, the data gets corrupted on the other side of
> the TT. Probably due to exceeding the bandwidth in the microframe
> since a single TT hub's ports all share the bandwidth.

Seems like different single TT hubs react differently.  I got one
where the mouse kept working but the audio was just static...


> With this fix, the next SSPLIT goes out in the same microframe as
> the SSPLIT.end and the data goes through fine.
>
> However I don't think this will work as a general fix. Since it
> is just skipping things without rescheduling. For example SSPLIT
> now happens a microframe later but the CSPLIT is not adjusted so
> it comes a microframe too early.
>
> I think the correct fix is to create a proper schedule based on
> all the active endpoints to make sure we don't go over the
> bandwidth for a single TT hub. Or to make the adjustments earlier
> like in dwc2_sched_periodic_split().

I've started working on this and just before I needed to leave my desk
I got something that seemed to work.  I'll keep at it on Monday.

At the moment I'm making the assumption that we never got a multi_tt
hub attached to us.  My code will always just schedule one split per
microframe.  Would that be OK for now until we make the scheduler
better?

To handle things smarter, I think I need to research how to deal with
hubs attached to hubs attached to hubs.  For instance:

dwc2
-> multi_tt hub
    -> single_tt hub
        -> device 1
        -> device 2
    -> single_tt hub
        -> device 3
        -> device 4
vs.

dwc2
-> single_tt hub
    -> multi_tt hub
        -> device 1
        -> device 2
    -> multi_tt hub
        -> device 3
        -> device 4

In the first case I presume I could schedule device 1 and device 3 at
the same time, but not device 2 and device 4.  In the 2nd case I
presume I could schedule all 4 devices independently.  ...but I
haven't dug through the spec to confirm that, yet.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1269511

FromAlan Stern <stern@rowland.harvard.edu>
Date2015-11-14 18:40 +0100
Message-ID<quMXT-6Zc-5@gated-at.bofh.it>
In reply to#1269380
On Fri, 13 Nov 2015, Doug Anderson wrote:

> To handle things smarter, I think I need to research how to deal with
> hubs attached to hubs attached to hubs.  For instance:
> 
> dwc2
> -> multi_tt hub
>     -> single_tt hub
>         -> device 1
>         -> device 2
>     -> single_tt hub
>         -> device 3
>         -> device 4
> vs.
> 
> dwc2
> -> single_tt hub
>     -> multi_tt hub
>         -> device 1
>         -> device 2
>     -> multi_tt hub
>         -> device 3
>         -> device 4
> 
> In the first case I presume I could schedule device 1 and device 3 at
> the same time, but not device 2 and device 4.

Devices 2 and 4 are related in exactly the same way as 1 and 3.  You 
can schedule them independently.  But you can't schedule 1 
independently of 2 or 3 independently of 4.

>  In the 2nd case I
> presume I could schedule all 4 devices independently.  ...but I
> haven't dug through the spec to confirm that, yet.

That's right.  The basic rule is very simple: Independent scheduling 
requires that the devices in question be attached through different 
TTs, where a multi-TT hub has a separate TT for each port.

On the other hand, it's important to keep in mind that even though you
can consider the devices independently as far as scheduling on the
FS/LS buses is concerned, you also have to consider the bandwidth
requirements of the SSPLIT and CSPLIT packets on the HS bus.  Since
there's only one HS bus, those things can't be independent.

How do you decide which microframes to dedicate to a particular
endpoint?  The scheduler in ehci-hcd isn't especially sophisticated
about this, and it can easily work itself into a corner by allocating
things in such a way that there's no microframe to put a new request
even though the total amount of available bandwidth is more than
sufficient.  I have put a lot of thought into ways of improving this,
but there doesn't seem to be any good approach that doesn't require
rebalancing (i.e., changing the microframes allocated to certain
endpoints) from time to time.  Rebalancing is very awkward because it
means stopping some ongoing transfers temporarily, removing the entries
from their old scheduled positions, putting them into the new
positions, and then restarting the transfers.  It can't be done
transparently or quickly.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1267755

FromYunzhi Li <lyz@rock-chips.com>
Date2015-11-12 10:50 +0100
Message-ID<qtWFX-7bs-1@gated-at.bofh.it>
In reply to#1267611
Hi John

在 2015/11/12 12:29, John Youn 写道:
> On 11/11/2015 4:22 PM, Doug Anderson wrote:
>> John,
>>
>> On Fri, Nov 6, 2015 at 2:04 AM, Yunzhi Li <lyz@rock-chips.com> wrote:
>>> hi John ,
>>>
>>>    As we talked yesterday, I tried to fix the split schedule sequence. This
>>> patch will
>>> avoid scheduling SSPLIT-IN packet for another device between
>>> SSPLIT-OUT-begin and
>>> SSPLIT-OUT-end, now the keyboard and Jebra audio speaker could work together
>>> well, but
>>> I'm not sure if this is exactly the right way to schedule split transfers
>>> and if there
>>> is any dide effect with this patch. Please help review this patch. Thanks.
>>>
>>>> Fix dwc2 split schedule sequence issue. Not schedule a SSPLIT_IN
>>>> packet between SSPLIT-begin and SSPLIT-end.
>>>>
>>>> Signed-off-by: Yunzhi Li <lyz@rock-chips.com>
>>>> ---
>>>>    drivers/usb/dwc2/hcd.c | 4 ++++
>>>>    1 file changed, 4 insertions(+)
>> Did you have any thoughts on this patch?  Although this patch didn't
>> fix the problems I was seeing with the Microsoft Wireless Keyboard
>> (see the patch I sent out earlier which does seem to fix it), I can
>> confirm that in a different setup (HUB goes to USB audio + mouse) that
>> this patch does fix some problems.
>>
>> That being said, it feels to me like a band-aid rather than an actual
>> fix (I'm talking out of my rear end, though, since my USB experience
>> is lacking at best).  It feels like perhaps we're just not keeping
>> track the xact_pos correctly, but of course I don't know that for
>> sure...
>>
>> Anyway, just fishing...  ;)
>>
>> -Doug
>>
> Hi Doug,
>
> I also feel it is not quite right as the SSPLIT should be able to
> happen during the SSPLIT of another device. I tried to reproduce
> and see the same scheduling but don't see any hang due to it.
>
> Yunzhi, any details on what kind of hub and keyboard you are
> using? I have the same Jabra 410 speaker.
>
>
You could use a single tt hub and any stander keyboard or mouse to 
reproduce this issue
1. connect hub keyboard and audio speaker
2. play any sound
3. then the keyboard stop working

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1264663

FromDoug Anderson <dianders@chromium.org>
Date2015-11-07 01:00 +0100
Message-ID<qrZ5f-2UB-1@gated-at.bofh.it>
In reply to#1263867
lyz@,

On Fri, Nov 6, 2015 at 1:36 AM, Yunzhi Li <lyz@rock-chips.com> wrote:
> Fix dwc2 split schedule sequence issue. Not schedule a SSPLIT_IN
> packet between SSPLIT-begin and SSPLIT-end.
>
> Signed-off-by: Yunzhi Li <lyz@rock-chips.com>
> ---
>  drivers/usb/dwc2/hcd.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
> index e79baf7..a32ed01 100644
> --- a/drivers/usb/dwc2/hcd.c
> +++ b/drivers/usb/dwc2/hcd.c
> @@ -1122,6 +1122,10 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
>                         break;
>                 }
>
> +               if (qh->channel->xact_pos == DWC2_HCSPLT_XACTPOS_BEGIN ||
> +                   qh->channel->xact_pos == DWC2_HCSPLT_XACTPOS_MID)
> +                       break;
> +
>                 /*
>                  * In Slave mode, stay on the current transfer until there is
>                  * nothing more to do or the high-bandwidth request count is

Just a quite note to say that this doesn't seem to resolve the weird
errors I'm seeing with the "Microsoft Wireless Keyboard 2000" that I
have.  I see split transaction errors in a USB analyzer with just that
hooked up behind a hub (don't even need any other USB devices).

...it is possible that there are two unrelated problems here, but it's
also possible that there's some bigger root cause that will fix both
of our problems.  I've been poking at things a bit too, but so far no
luck...

-Doug
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1265502

FromYunzhi Li <lyz@rock-chips.com>
Date2015-11-09 11:10 +0100
Message-ID<qsRyG-50w-21@gated-at.bofh.it>
In reply to#1264663
hi Doug

在 2015/11/7 7:56, Doug Anderson 写道:
> lyz@,
>
> On Fri, Nov 6, 2015 at 1:36 AM, Yunzhi Li <lyz@rock-chips.com> wrote:
>> Fix dwc2 split schedule sequence issue. Not schedule a SSPLIT_IN
>> packet between SSPLIT-begin and SSPLIT-end.
>>
>> Signed-off-by: Yunzhi Li <lyz@rock-chips.com>
>> ---
>>   drivers/usb/dwc2/hcd.c | 4 ++++
>>   1 file changed, 4 insertions(+)
>>
>> diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
>> index e79baf7..a32ed01 100644
>> --- a/drivers/usb/dwc2/hcd.c
>> +++ b/drivers/usb/dwc2/hcd.c
>> @@ -1122,6 +1122,10 @@ static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
>>                          break;
>>                  }
>>
>> +               if (qh->channel->xact_pos == DWC2_HCSPLT_XACTPOS_BEGIN ||
>> +                   qh->channel->xact_pos == DWC2_HCSPLT_XACTPOS_MID)
>> +                       break;
>> +
>>                  /*
>>                   * In Slave mode, stay on the current transfer until there is
>>                   * nothing more to do or the high-bandwidth request count is
> Just a quite note to say that this doesn't seem to resolve the weird
> errors I'm seeing with the "Microsoft Wireless Keyboard 2000" that I
> have.  I see split transaction errors in a USB analyzer with just that
> hooked up behind a hub (don't even need any other USB devices).
>
> ...it is possible that there are two unrelated problems here, but it's
> also possible that there's some bigger root cause that will fix both
> of our problems.  I've been poking at things a bit too, but so far no
> luck...
>
> -Doug
>
It seems that we are debugging two different issues, your new patch which rewrite
the microframe scheduler doesn't resolve my problem. My patch fix chrome-os issue
#46547 not related to the particular Microsoft keyboard any keyboard could be used
to reproduce the issue.


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1265720

FromDoug Anderson <dianders@chromium.org>
Date2015-11-09 15:40 +0100
Message-ID<qsVLY-7E4-11@gated-at.bofh.it>
In reply to#1265502
Hi,

On Mon, Nov 9, 2015 at 1:57 AM, Yunzhi Li <lyz@rock-chips.com> wrote:
> It seems that we are debugging two different issues, your new patch which
> rewrite
> the microframe scheduler doesn't resolve my problem. My patch fix chrome-os
> issue
> #46547 not related to the particular Microsoft keyboard any keyboard could
> be used
> to reproduce the issue.

As far as I can tell my microframe rewrite patch is totally a no-op
(it doesn't do anything useful at all).  I'll try to write some test
code showing why I think the old function is broken and why the new
one works, but my new version doesn't fix any known issues.

Whatever the problem is with the Microsoft keyboard is still unknown.
I'll try to dig into it more today.  I think I'm starting to
understand enough about how USB works that I might be able to make
sense of the analyzer trace now too.  I can also post a screenshot of
that...

-Doug
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web