usb: gadget: mv_udc: flush item before head
authorTroy Kisky <troy.kisky@boundarydevices.com>
Thu, 26 Sep 2013 01:41:12 +0000 (18:41 -0700)
committerMarek Vasut <marex@denx.de>
Sun, 20 Oct 2013 21:42:39 +0000 (23:42 +0200)
Make sure the transfer descriptor is flushed
before the queue is updated so that the controller
will not see old information.

Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com>
drivers/usb/gadget/mv_udc.c

index 0a19dcebcabb4ac445eaf9088e4e8a4a2465eddd..c56ccff1390de7112bc9a208e82b2e15640c43aa 100644 (file)
@@ -335,21 +335,20 @@ static int mv_ep_queue(struct usb_ep *ep,
        item->info = INFO_BYTES(len) | INFO_IOC | INFO_ACTIVE;
        item->page0 = (uint32_t)mv_ep->b_buf;
        item->page1 = ((uint32_t)mv_ep->b_buf & 0xfffff000) + 0x1000;
+       mv_flush_qtd(num);
 
        head->next = (unsigned) item;
        head->info = 0;
 
        DBG("ept%d %s queue len %x, buffer %p\n",
            num, in ? "in" : "out", len, mv_ep->b_buf);
+       mv_flush_qh(num);
 
        if (in)
                bit = EPT_TX(num);
        else
                bit = EPT_RX(num);
 
-       mv_flush_qh(num);
-       mv_flush_qtd(num);
-
        writel(bit, &udc->epprime);
 
        return 0;