Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1404521 > unrolled thread
| Started by | Andrew Goodbody <andrew.goodbody@cambrionix.com> |
|---|---|
| First post | 2016-05-20 17:00 +0200 |
| Last post | 2016-05-20 19:30 +0200 |
| Articles | 5 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH 2/2] usb: musb: Stop bulk endpoint while queue is rotated Andrew Goodbody <andrew.goodbody@cambrionix.com> - 2016-05-20 17:00 +0200
Re: [PATCH 2/2] usb: musb: Stop bulk endpoint while queue is rotated Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> - 2016-05-20 18:30 +0200
RE: [PATCH 2/2] usb: musb: Stop bulk endpoint while queue is rotated Andrew Goodbody <andrew.goodbody@cambrionix.com> - 2016-05-20 19:10 +0200
Re: [PATCH 2/2] usb: musb: Stop bulk endpoint while queue is rotated Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> - 2016-05-20 19:20 +0200
RE: [PATCH 2/2] usb: musb: Stop bulk endpoint while queue is rotated Andrew Goodbody <andrew.goodbody@cambrionix.com> - 2016-05-20 19:30 +0200
| From | Andrew Goodbody <andrew.goodbody@cambrionix.com> |
|---|---|
| Date | 2016-05-20 17:00 +0200 |
| Subject | [PATCH 2/2] usb: musb: Stop bulk endpoint while queue is rotated |
| Message-ID | <rAU4a-6LA-19@gated-at.bofh.it> |
Ensure that the endpoint is stopped by clearing REQPKT before clearing DATAERR_NAKTIMEOUT before rotating the queue on the dedicated bulk endpoint. This addresses an issue where a race could result in the endpoint receiving data before it was reprogrammed resulting in a warning about such data from musb_rx_reinit before it was thrown away. The data thrown away was a valid packet that had been correctly ACKed which meant the host and device got out of sync. Signed-off-by: Andrew Goodbody <andrew.goodbody@cambrionix.com> Cc: stable@vger.kernel.org --- drivers/usb/musb/musb_host.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c index 30e0d65..777ff30 100644 --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c @@ -999,6 +999,8 @@ static void musb_bulk_nak_timeout(struct musb *musb, struct musb_hw_ep *ep, /* clear nak timeout bit */ rx_csr = musb_readw(epio, MUSB_RXCSR); rx_csr |= MUSB_RXCSR_H_WZC_BITS; + rx_csr &= ~MUSB_RXCSR_H_REQPKT; + musb_writew(epio, MUSB_RXCSR, rx_csr); rx_csr &= ~MUSB_RXCSR_DATAERROR; musb_writew(epio, MUSB_RXCSR, rx_csr); -- 2.7.4
[toc] | [next] | [standalone]
| From | Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
|---|---|
| Date | 2016-05-20 18:30 +0200 |
| Message-ID | <rAVtf-7Ld-25@gated-at.bofh.it> |
| In reply to | #1404521 |
On 05/20/2016 05:51 PM, Andrew Goodbody wrote:
> Ensure that the endpoint is stopped by clearing REQPKT before
> clearing DATAERR_NAKTIMEOUT before rotating the queue on the
> dedicated bulk endpoint.
> This addresses an issue where a race could result in the endpoint
> receiving data before it was reprogrammed resulting in a warning
> about such data from musb_rx_reinit before it was thrown away.
> The data thrown away was a valid packet that had been correctly
> ACKed which meant the host and device got out of sync.
>
> Signed-off-by: Andrew Goodbody <andrew.goodbody@cambrionix.com>
> Cc: stable@vger.kernel.org
> ---
> drivers/usb/musb/musb_host.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
> index 30e0d65..777ff30 100644
> --- a/drivers/usb/musb/musb_host.c
> +++ b/drivers/usb/musb/musb_host.c
> @@ -999,6 +999,8 @@ static void musb_bulk_nak_timeout(struct musb *musb, struct musb_hw_ep *ep,
> /* clear nak timeout bit */
> rx_csr = musb_readw(epio, MUSB_RXCSR);
> rx_csr |= MUSB_RXCSR_H_WZC_BITS;
> + rx_csr &= ~MUSB_RXCSR_H_REQPKT;
> + musb_writew(epio, MUSB_RXCSR, rx_csr);
> rx_csr &= ~MUSB_RXCSR_DATAERROR;
> musb_writew(epio, MUSB_RXCSR, rx_csr);
Can we not clear both in one write?
[...]
MBR, Sergei
[toc] | [prev] | [next] | [standalone]
| From | Andrew Goodbody <andrew.goodbody@cambrionix.com> |
|---|---|
| Date | 2016-05-20 19:10 +0200 |
| Message-ID | <rAW5Y-8mK-29@gated-at.bofh.it> |
| In reply to | #1404584 |
> From: Sergei Shtylyov [mailto:sergei.shtylyov@cogentembedded.com] > On 05/20/2016 05:51 PM, Andrew Goodbody wrote: > > > Ensure that the endpoint is stopped by clearing REQPKT before clearing > > DATAERR_NAKTIMEOUT before rotating the queue on the dedicated bulk > > endpoint. > > This addresses an issue where a race could result in the endpoint > > receiving data before it was reprogrammed resulting in a warning about > > such data from musb_rx_reinit before it was thrown away. > > The data thrown away was a valid packet that had been correctly ACKed > > which meant the host and device got out of sync. > > > > Signed-off-by: Andrew Goodbody <andrew.goodbody@cambrionix.com> > > Cc: stable@vger.kernel.org > > --- > > drivers/usb/musb/musb_host.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/drivers/usb/musb/musb_host.c > > b/drivers/usb/musb/musb_host.c index 30e0d65..777ff30 100644 > > --- a/drivers/usb/musb/musb_host.c > > +++ b/drivers/usb/musb/musb_host.c > > @@ -999,6 +999,8 @@ static void musb_bulk_nak_timeout(struct musb > *musb, struct musb_hw_ep *ep, > > /* clear nak timeout bit */ > > rx_csr = musb_readw(epio, MUSB_RXCSR); > > rx_csr |= MUSB_RXCSR_H_WZC_BITS; > > + rx_csr &= ~MUSB_RXCSR_H_REQPKT; > > + musb_writew(epio, MUSB_RXCSR, rx_csr); > > rx_csr &= ~MUSB_RXCSR_DATAERROR; > > musb_writew(epio, MUSB_RXCSR, rx_csr); > > Can we not clear both in one write? Section 16.3.8.2.2.1.2 of the TRM says to clear REQPKT before DATAERR_NAKTIMEOUT. Andrew > [...] > > MBR, Sergei
[toc] | [prev] | [next] | [standalone]
| From | Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
|---|---|
| Date | 2016-05-20 19:20 +0200 |
| Message-ID | <rAWfD-8q9-7@gated-at.bofh.it> |
| In reply to | #1404627 |
On 05/20/2016 08:06 PM, Andrew Goodbody wrote:
>>> Ensure that the endpoint is stopped by clearing REQPKT before clearing
>>> DATAERR_NAKTIMEOUT before rotating the queue on the dedicated bulk
>>> endpoint.
>>> This addresses an issue where a race could result in the endpoint
>>> receiving data before it was reprogrammed resulting in a warning about
>>> such data from musb_rx_reinit before it was thrown away.
>>> The data thrown away was a valid packet that had been correctly ACKed
>>> which meant the host and device got out of sync.
>>>
>>> Signed-off-by: Andrew Goodbody <andrew.goodbody@cambrionix.com>
>>> Cc: stable@vger.kernel.org
>>> ---
>>> drivers/usb/musb/musb_host.c | 2 ++
>>> 1 file changed, 2 insertions(+)
>>>
>>> diff --git a/drivers/usb/musb/musb_host.c
>>> b/drivers/usb/musb/musb_host.c index 30e0d65..777ff30 100644
>>> --- a/drivers/usb/musb/musb_host.c
>>> +++ b/drivers/usb/musb/musb_host.c
>>> @@ -999,6 +999,8 @@ static void musb_bulk_nak_timeout(struct musb
>> *musb, struct musb_hw_ep *ep,
>>> /* clear nak timeout bit */
>>> rx_csr = musb_readw(epio, MUSB_RXCSR);
>>> rx_csr |= MUSB_RXCSR_H_WZC_BITS;
>>> + rx_csr &= ~MUSB_RXCSR_H_REQPKT;
>>> + musb_writew(epio, MUSB_RXCSR, rx_csr);
>>> rx_csr &= ~MUSB_RXCSR_DATAERROR;
>>> musb_writew(epio, MUSB_RXCSR, rx_csr);
>>
>> Can we not clear both in one write?
>
> Section 16.3.8.2.2.1.2 of the TRM says to clear REQPKT before DATAERR_NAKTIMEOUT.
Right, the MUSB programmer's guide also says that. Then a comment wouldn't
hurt here.
> Andrew
MBR, Sergei
[toc] | [prev] | [next] | [standalone]
| From | Andrew Goodbody <andrew.goodbody@cambrionix.com> |
|---|---|
| Date | 2016-05-20 19:30 +0200 |
| Message-ID | <rAWpj-8u4-9@gated-at.bofh.it> |
| In reply to | #1404630 |
> From: Sergei Shtylyov [mailto:sergei.shtylyov@cogentembedded.com] > On 05/20/2016 08:06 PM, Andrew Goodbody wrote: > > >>> Ensure that the endpoint is stopped by clearing REQPKT before > >>> clearing DATAERR_NAKTIMEOUT before rotating the queue on the > >>> dedicated bulk endpoint. > >>> This addresses an issue where a race could result in the endpoint > >>> receiving data before it was reprogrammed resulting in a warning > >>> about such data from musb_rx_reinit before it was thrown away. > >>> The data thrown away was a valid packet that had been correctly > >>> ACKed which meant the host and device got out of sync. > >>> > >>> Signed-off-by: Andrew Goodbody > <andrew.goodbody@cambrionix.com> > >>> Cc: stable@vger.kernel.org > >>> --- > >>> drivers/usb/musb/musb_host.c | 2 ++ > >>> 1 file changed, 2 insertions(+) > >>> > >>> diff --git a/drivers/usb/musb/musb_host.c > >>> b/drivers/usb/musb/musb_host.c index 30e0d65..777ff30 100644 > >>> --- a/drivers/usb/musb/musb_host.c > >>> +++ b/drivers/usb/musb/musb_host.c > >>> @@ -999,6 +999,8 @@ static void musb_bulk_nak_timeout(struct musb > >> *musb, struct musb_hw_ep *ep, > >>> /* clear nak timeout bit */ > >>> rx_csr = musb_readw(epio, MUSB_RXCSR); > >>> rx_csr |= MUSB_RXCSR_H_WZC_BITS; > >>> + rx_csr &= ~MUSB_RXCSR_H_REQPKT; > >>> + musb_writew(epio, MUSB_RXCSR, rx_csr); > >>> rx_csr &= ~MUSB_RXCSR_DATAERROR; > >>> musb_writew(epio, MUSB_RXCSR, rx_csr); > >> > >> Can we not clear both in one write? > > > > Section 16.3.8.2.2.1.2 of the TRM says to clear REQPKT before > DATAERR_NAKTIMEOUT. > > Right, the MUSB programmer's guide also says that. Then a comment > wouldn't hurt here. I'll add that for v2, thanks. Andrew > > Andrew > > MBR, Sergei
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web