From: Colin Cross Date: Wed, 3 Mar 2010 01:25:41 +0000 (-0800) Subject: usb: gadget: fsl_udc: wmb ep_td struct when submitting to controller X-Git-Tag: firefly_0821_release~9833^2~355 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=8ce033fd1ff195d6ea5a87e7763d80898a2d940e;p=firefly-linux-kernel-4.4.55.git usb: gadget: fsl_udc: wmb ep_td struct when submitting to controller Since these get allocated dmacoherent instead of noncacheable in armv7, we need to do wmb before handing them to hardware. Change-Id: I413eeb6da3bfeb754c4b475b19fe5823d83d3d04 Signed-off-by: Colin Cross Cc: Erik Gilling --- diff --git a/drivers/usb/gadget/fsl_udc_core.c b/drivers/usb/gadget/fsl_udc_core.c index 68fae9b023d8..f059f5ef7828 100644 --- a/drivers/usb/gadget/fsl_udc_core.c +++ b/drivers/usb/gadget/fsl_udc_core.c @@ -670,6 +670,9 @@ static void fsl_queue_td(struct fsl_ep *ep, struct fsl_req *req) ? (1 << (ep_index(ep) + 16)) : (1 << (ep_index(ep))); + /* Flush all the dTD structs out to memory */ + wmb(); + /* check if the pipe is empty */ if (!(list_empty(&ep->queue))) { /* Add td to the end */ @@ -677,6 +680,7 @@ static void fsl_queue_td(struct fsl_ep *ep, struct fsl_req *req) lastreq = list_entry(ep->queue.prev, struct fsl_req, queue); lastreq->tail->next_td_ptr = cpu_to_le32(req->head->td_dma & DTD_ADDR_MASK); + wmb(); /* Read prime bit, if 1 goto done */ if (fsl_readl(&dr_regs->endpointprime) & bitmask) goto out;