* Sergei Shtylyov <sergei.shtylyov@xxxxxxxxxxxxxxxxxx> [150319 10:50]: > On 03/19/2015 04:30 PM, Sergei Shtylyov wrote: > >>--- a/drivers/usb/musb/musb_dsps.c > >>+++ b/drivers/usb/musb/musb_dsps.c > >>@@ -655,6 +655,36 @@ static int dsps_musb_reset(struct musb *musb) > >> return !session_restart; > >> } > >> > >>+/* Similar to am35x, dm81xx support only 32-bit read operation */ > >>+static void dsps_read_fifo32(struct musb_hw_ep *hw_ep, u16 len, u8 *dst) > >>+{ > >>+ void __iomem *fifo = hw_ep->fifo; > >>+ u32 val; > >>+ int i; > >>+ > >>+ /* Read for 32bit-aligned destination address */ > >>+ if (likely((0x03 & (unsigned long)dst) == 0) && len >= 4) { > >>+ readsl(fifo, dst, len >> 2); > >>+ dst += len & ~0x03; > >>+ len &= 0x03; > >>+ } > >>+ /* > >>+ * Now read the remaining 1 to 3 byte or complete length if > >>+ * unaligned address. > >>+ */ > > > This comment seems misplaced, it belongs before the next *if*. > > >>+ if (len > 4) { > >>+ for (i = 0; i < (len >> 2); i++) { > >>+ *(u32 *)dst = musb_readl(fifo, 0); > >>+ dst += 4; > >>+ } > > > Not sure how this is different to using readsl(). > > Ah, the default implementation of musb_readl() uses __raw_readl(). > So you'd probably want to keep this loop, not readsl() call. Not sure I follow you here.. Also include/asm-generic/io.h readsl() uses __raw_readl()? It seems things work with what I posted, so a readsl() loop, then just read the remaining 1 to 3 bytes. Regards, Tony -- 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