diff options
author | Kishon Vijay Abraham I <kishon@ti.com> | 2015-02-23 18:40:13 +0530 |
---|---|---|
committer | Marek Vasut <marex@denx.de> | 2015-04-14 05:48:10 +0200 |
commit | 526a50f8ec300194aa168e07d7dee6f32902d06d (patch) | |
tree | 64bf35f59e2b6954dc87e370c84897b1bd04a8a2 /drivers/usb/dwc3/gadget.c | |
parent | 6900aeda528bdeeeb44bde6433ff928506e30d6f (diff) | |
download | u-boot-526a50f8ec300194aa168e07d7dee6f32902d06d.tar.gz u-boot-526a50f8ec300194aa168e07d7dee6f32902d06d.tar.xz u-boot-526a50f8ec300194aa168e07d7dee6f32902d06d.zip |
dwc3: flush the buffers before using it
In the linux kernel, non cacheable buffers are used. However in uboot
since there are no APIs to allocate non cacheable memory, all
the buffers should be flushed before using it.
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Diffstat (limited to 'drivers/usb/dwc3/gadget.c')
-rw-r--r-- | drivers/usb/dwc3/gadget.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 1f977290ff..8560b88dd1 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -244,6 +244,7 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, list_del(&req->list); req->trb = NULL; + dwc3_flush_cache((int)req->request.dma, req->request.length); if (req->request.status == -EINPROGRESS) req->request.status = status; @@ -769,6 +770,9 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep, trb->ctrl |= DWC3_TRB_CTRL_SID_SOFN(req->request.stream_id); trb->ctrl |= DWC3_TRB_CTRL_HWO; + + dwc3_flush_cache((int)dma, length); + dwc3_flush_cache((int)trb, sizeof(*trb)); } /* @@ -1770,6 +1774,7 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep, slot %= DWC3_TRB_NUM; trb = &dep->trb_pool[slot]; + dwc3_flush_cache((int)trb, sizeof(*trb)); ret = __dwc3_cleanup_done_trbs(dwc, dep, req, trb, event, status); if (ret) @@ -2583,7 +2588,8 @@ int dwc3_gadget_init(struct dwc3 *dwc) goto err1; } - dwc->setup_buf = kzalloc(DWC3_EP0_BOUNCE_SIZE, GFP_KERNEL); + dwc->setup_buf = memalign(CONFIG_SYS_CACHELINE_SIZE, + DWC3_EP0_BOUNCE_SIZE); if (!dwc->setup_buf) { ret = -ENOMEM; goto err2; |