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


Groups > linux.kernel > #1404521 > unrolled thread

[PATCH 2/2] usb: musb: Stop bulk endpoint while queue is rotated

Started byAndrew Goodbody <andrew.goodbody@cambrionix.com>
First post2016-05-20 17:00 +0200
Last post2016-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.


Contents

  [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

#1404521 — [PATCH 2/2] usb: musb: Stop bulk endpoint while queue is rotated

FromAndrew Goodbody <andrew.goodbody@cambrionix.com>
Date2016-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]


#1404584

FromSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Date2016-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]


#1404627

FromAndrew Goodbody <andrew.goodbody@cambrionix.com>
Date2016-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]


#1404630

FromSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Date2016-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]


#1404632

FromAndrew Goodbody <andrew.goodbody@cambrionix.com>
Date2016-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