Hi, On Wed, May 10, 2017 at 11:42:27AM +0300, Peter Ujfalusi wrote: > We have one register for each EP to set the maximum packet size for both > TX and RX. > If for example an RX programming would happen before the previous TX > transfer finishes we would reset the TX packet side. > > To fix this issue, only modify the TX or RX part of the register. > > Signed-off-by: Peter Ujfalusi <peter.ujfalusi@xxxxxx> > --- > drivers/usb/musb/tusb6010_omap.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > diff --git a/drivers/usb/musb/tusb6010_omap.c b/drivers/usb/musb/tusb6010_omap.c > index db2e4c379ccf..4e1a6e4a61b8 100644 > --- a/drivers/usb/musb/tusb6010_omap.c > +++ b/drivers/usb/musb/tusb6010_omap.c > @@ -389,15 +389,19 @@ static int tusb_omap_dma_program(struct dma_channel *channel, u16 packet_sz, > > if (chdat->tx) { > /* Send transfer_packet_sz packets at a time */ > - musb_writel(ep_conf, TUSB_EP_MAX_PACKET_SIZE_OFFSET, > - chdat->transfer_packet_sz); > + u32 psize = musb_readl(ep_conf, TUSB_EP_MAX_PACKET_SIZE_OFFSET); checkpatch.pl complains about declaration and assignment together. > + psize &= ~0x7ff; > + psize |= chdat->transfer_packet_sz; > + musb_writel(ep_conf, TUSB_EP_MAX_PACKET_SIZE_OFFSET, psize); > > musb_writel(ep_conf, TUSB_EP_TX_OFFSET, > TUSB_EP_CONFIG_XFR_SIZE(chdat->transfer_len)); > } else { > /* Receive transfer_packet_sz packets at a time */ > - musb_writel(ep_conf, TUSB_EP_MAX_PACKET_SIZE_OFFSET, > - chdat->transfer_packet_sz << 16); > + u32 psize = musb_readl(ep_conf, TUSB_EP_MAX_PACKET_SIZE_OFFSET); and at here too. > + psize &= ~(0x7ff << 16); > + psize |= (chdat->transfer_packet_sz << 16); > + musb_writel(ep_conf, TUSB_EP_MAX_PACKET_SIZE_OFFSET, psize); > > musb_writel(ep_conf, TUSB_EP_RX_OFFSET, > TUSB_EP_CONFIG_XFR_SIZE(chdat->transfer_len)); Regards, -Bin. -- 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