From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755947AbcETROT (ORCPT ); Fri, 20 May 2016 13:14:19 -0400 Received: from mail-lf0-f51.google.com ([209.85.215.51]:33826 "EHLO mail-lf0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755083AbcETROP (ORCPT ); Fri, 20 May 2016 13:14:15 -0400 Subject: Re: [PATCH 2/2] usb: musb: Stop bulk endpoint while queue is rotated To: Andrew Goodbody , "b-liu@ti.com" References: <1463755902-12922-1-git-send-email-andrew.goodbody@cambrionix.com> <1463755902-12922-3-git-send-email-andrew.goodbody@cambrionix.com> <7a4fb42ac94140d7a5d34eb1c0b5934b@THHSTE15D2BE2.hs20.net> Cc: "gregkh@linuxfoundation.org" , "linux-usb@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "stable@vger.kernel.org" From: Sergei Shtylyov Organization: Cogent Embedded Message-ID: <5aab1e5e-fd86-2145-d965-07e82d73cd62@cogentembedded.com> Date: Fri, 20 May 2016 20:14:09 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.0 MIME-Version: 1.0 In-Reply-To: <7a4fb42ac94140d7a5d34eb1c0b5934b@THHSTE15D2BE2.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 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 >>> 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