From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754193AbcETP0V (ORCPT ); Fri, 20 May 2016 11:26:21 -0400 Received: from mail-lf0-f51.google.com ([209.85.215.51]:35127 "EHLO mail-lf0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752442AbcETP0T (ORCPT ); Fri, 20 May 2016 11:26:19 -0400 Subject: Re: [PATCH 1/2] usb: musb: Ensure rx reinit occurs for shared_fifo endpoints To: Andrew Goodbody , b-liu@ti.com References: <1463755902-12922-1-git-send-email-andrew.goodbody@cambrionix.com> <1463755902-12922-2-git-send-email-andrew.goodbody@cambrionix.com> 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: <1140ca26-13c8-2450-2dd5-4f0609e1a411@cogentembedded.com> Date: Fri, 20 May 2016 18:26:14 +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: <1463755902-12922-2-git-send-email-andrew.goodbody@cambrionix.com> 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 Hello. On 05/20/2016 05:51 PM, Andrew Goodbody wrote: > shared_fifo endpoints would only get a previous tx state cleared > out, the rx state was only cleared for non shared_fifo endpoints > Change this so that the rx state is cleared for all endpoints. > This addresses an issue that resulted in rx packets being dropped > silently. > > Signed-off-by: Andrew Goodbody > Cc: stable@vger.kernel.org > --- > drivers/usb/musb/musb_host.c | 15 ++++++++------- > 1 file changed, 8 insertions(+), 7 deletions(-) > > diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c > index 2f8ad7f..30e0d65 100644 > --- a/drivers/usb/musb/musb_host.c > +++ b/drivers/usb/musb/musb_host.c > @@ -594,14 +594,15 @@ musb_rx_reinit(struct musb *musb, struct musb_qh *qh, u8 epnum) > musb_writew(ep->regs, MUSB_TXCSR, 0); > > /* scrub all previous state, clearing toggle */ > - } else { > - csr = musb_readw(ep->regs, MUSB_RXCSR); > - if (csr & MUSB_RXCSR_RXPKTRDY) > - WARNING("rx%d, packet/%d ready?\n", ep->epnum, > - musb_readw(ep->regs, MUSB_RXCOUNT)); > - > - musb_h_flush_rxfifo(ep, MUSB_RXCSR_CLRDATATOG); > } > + csr = musb_readw(ep->regs, MUSB_RXCSR); > + if (csr & MUSB_RXCSR_RXPKTRDY) { > + WARNING("rx%d, packet/%d ready?\n", ep->epnum, > + musb_readw(ep->regs, MUSB_RXCOUNT)); > + urb_qh_dump(musb); I'm not seeing this function anywhere... debugging leftover? > + } > + > + musb_h_flush_rxfifo(ep, MUSB_RXCSR_CLRDATATOG); > > /* target addr and (for multipoint) hub addr/port */ > if (musb->is_multipoint) { MBR, Sergei