From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755990AbcEWNkX (ORCPT ); Mon, 23 May 2016 09:40:23 -0400 Received: from mail-lb0-f179.google.com ([209.85.217.179]:33552 "EHLO mail-lb0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752157AbcEWNkV (ORCPT ); Mon, 23 May 2016 09:40:21 -0400 Subject: Re: [PATCH V2 2/2] usb: musb: Stop bulk endpoint while queue is rotated To: Andrew Goodbody , "b-liu@ti.com" References: <1464004844-26553-1-git-send-email-andrew.goodbody@cambrionix.com> <1464004844-26553-3-git-send-email-andrew.goodbody@cambrionix.com> <6b25b4a5cc104ea0adc5bd006040529b@SEHSTE15D2BE2.hs20.net> Cc: "gregkh@linuxfoundation.org" , "linux-usb@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "stable@vger.kernel.org" From: Sergei Shtylyov Message-ID: Date: Mon, 23 May 2016 16:40:17 +0300 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.1.0 MIME-Version: 1.0 In-Reply-To: <6b25b4a5cc104ea0adc5bd006040529b@SEHSTE15D2BE2.hs20.net> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 5/23/2016 4:26 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 >>> Cc: stable@vger.kernel.org >>> --- >>> V2 added comment about clearing REQPKT before DATAERR_NAKTIMEOUT >>> >>> drivers/usb/musb/musb_host.c | 6 ++++++ >>> 1 file changed, 6 insertions(+) >>> >>> diff --git a/drivers/usb/musb/musb_host.c >>> b/drivers/usb/musb/musb_host.c index 2966596..676cb98 100644 >>> --- a/drivers/usb/musb/musb_host.c >>> +++ b/drivers/usb/musb/musb_host.c >>> @@ -997,6 +997,12 @@ 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; >>> + /* >>> + * Need to stop the transaction by clearing REQPKT before >> >> Transcation? Maybe transfer? > > The quote from the TRM is "If the DATAERR_NAKTIMEOUT bit is set, the controller can be directed either to continue trying this transaction (until it times out again) by clearing the DATAERR_NAKTIMEOUT bit or to abort the transaction by clearing REQPKT bit before clearing the DATAERR_NAKTIMEOUT bit." > So 'transaction' is correct. OK. >>> + * DATAERR_NAKTIMEOUT ref TRM section 16.3.8.2.2.1.2 >> >> Which TRM? Do you understand that the MUSB core is used by multiple >> SoCs? >> I'd recommend referring just to the "abstract" manual or the MUSB >> programmer's guide (section 9.2.2 if you want an exact ref.). > That would be the AM335x Sitara Processors TRM. I don't have the MUSB programmer's guide, is it available online somewhere? AFAIK, no. > I do not understand what you mean by the "abstract" manual. Just saying "the manual" or "the manuals". > Would you be OK with "ref MUSB Programmer's Guide section 9.2.2" Yes. However, that spec calls the bit just "NAK Timeout" in this context, not DATAERR_NAKTIMEOUT. Overall, this spec. uses CamelCase for the register bit names (I recall dbrownell complaining over that and uppercase all the bit names in my patches :-). > Andrew > >> [...] MBR, Sergei