Re: [PATCH] MUSB: Fix bug - don't mess up count number and CSR0 register value

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

* Bryan Wu <cooloney@xxxxxxxxxx> [080805 06:27]:
> Signed-off-by: Bryan Wu <cooloney@xxxxxxxxxx>
> ---
>  drivers/usb/musb/musb_gadget_ep0.c |   24 ++++++++++++------------
>  1 files changed, 12 insertions(+), 12 deletions(-)

I think all musb patches should be now posted to linux-usb list as the
patches are queued for integration.

So I'll be using plain code coming from mainline tree and
won't apply any patches to musb code except temporary fixes if compile
breaks.

Cheers,

Tony

> diff --git a/drivers/usb/musb/musb_gadget_ep0.c b/drivers/usb/musb/musb_gadget_ep0.c
> index 2d2574c..e7b56df 100644
> --- a/drivers/usb/musb/musb_gadget_ep0.c
> +++ b/drivers/usb/musb/musb_gadget_ep0.c
> @@ -452,7 +452,7 @@ static void ep0_rxstate(struct musb *musb)
>  {
>  	void __iomem		*regs = musb->control_ep->regs;
>  	struct usb_request	*req;
> -	u16			tmp;
> +	u16			count, csr;
>  
>  	req = next_ep0_request(musb);
>  
> @@ -464,34 +464,34 @@ static void ep0_rxstate(struct musb *musb)
>  		unsigned	len = req->length - req->actual;
>  
>  		/* read the buffer */
> -		tmp = musb_readb(regs, MUSB_COUNT0);
> -		if (tmp > len) {
> +		count = musb_readb(regs, MUSB_COUNT0);
> +		if (count > len) {
>  			req->status = -EOVERFLOW;
> -			tmp = len;
> +			count = len;
>  		}
> -		musb_read_fifo(&musb->endpoints[0], tmp, buf);
> -		req->actual += tmp;
> -		tmp = MUSB_CSR0_P_SVDRXPKTRDY;
> -		if (tmp < 64 || req->actual == req->length) {
> +		musb_read_fifo(&musb->endpoints[0], count, buf);
> +		req->actual += count;
> +		csr = MUSB_CSR0_P_SVDRXPKTRDY;
> +		if (count < 64 || req->actual == req->length) {
>  			musb->ep0_state = MUSB_EP0_STAGE_STATUSIN;
> -			tmp |= MUSB_CSR0_P_DATAEND;
> +			csr |= MUSB_CSR0_P_DATAEND;
>  		} else
>  			req = NULL;
>  	} else
> -		tmp = MUSB_CSR0_P_SVDRXPKTRDY | MUSB_CSR0_P_SENDSTALL;
> +		csr = MUSB_CSR0_P_SVDRXPKTRDY | MUSB_CSR0_P_SENDSTALL;
>  
>  
>  	/* Completion handler may choose to stall, e.g. because the
>  	 * message just received holds invalid data.
>  	 */
>  	if (req) {
> -		musb->ackpend = tmp;
> +		musb->ackpend = csr;
>  		musb_g_ep0_giveback(musb, req);
>  		if (!musb->ackpend)
>  			return;
>  		musb->ackpend = 0;
>  	}
> -	musb_writew(regs, MUSB_CSR0, tmp);
> +	musb_writew(regs, MUSB_CSR0, csr);
>  }
>  
>  /*
> -- 
> 1.5.3
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux