diff options
author | Philipp Tomsich <philipp.tomsich@theobroma-systems.com> | 2017-04-06 16:58:52 +0200 |
---|---|---|
committer | Marek Vasut <marex@denx.de> | 2017-04-14 16:44:16 +0200 |
commit | b7bf4a95922c3e1a4974aa34ebb714ac2eb89937 (patch) | |
tree | 37aceb953ccbe4f14e4e2237920c0b254d6a4497 | |
parent | 207835b13feeae15db0555574d89352a4e5379a4 (diff) | |
download | u-boot-b7bf4a95922c3e1a4974aa34ebb714ac2eb89937.zip u-boot-b7bf4a95922c3e1a4974aa34ebb714ac2eb89937.tar.gz u-boot-b7bf4a95922c3e1a4974aa34ebb714ac2eb89937.tar.bz2 |
usb: dwc3: ensure consistent types for dwc3_flush_cache
The dwc3_flush_cache() call was declared and used inconsistently:
* The declaration assumed 'int' for addresses (a potential issue
when running in a LP64 memory model).
* The invocation cast the address to 'long'.
This change ensures that both the declaration and usage of this
function consistently uses 'uintptr_t' for correct behaviour even
when the allocated buffers (to be flushed) reside outside of the
lower 32bits of memory.
Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-rw-r--r-- | drivers/usb/dwc3/ep0.c | 10 | ||||
-rw-r--r-- | drivers/usb/dwc3/gadget.c | 10 | ||||
-rw-r--r-- | drivers/usb/dwc3/io.h | 2 |
3 files changed, 11 insertions, 11 deletions
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index 12b133f..e61d980 100644 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c @@ -81,8 +81,8 @@ static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma, trb->ctrl |= (DWC3_TRB_CTRL_IOC | DWC3_TRB_CTRL_LST); - dwc3_flush_cache((long)buf_dma, len); - dwc3_flush_cache((long)trb, sizeof(*trb)); + dwc3_flush_cache((uintptr_t)buf_dma, len); + dwc3_flush_cache((uintptr_t)trb, sizeof(*trb)); if (chain) return 0; @@ -790,7 +790,7 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, if (!r) return; - dwc3_flush_cache((long)trb, sizeof(*trb)); + dwc3_flush_cache((uintptr_t)trb, sizeof(*trb)); status = DWC3_TRB_SIZE_TRBSTS(trb->size); if (status == DWC3_TRBSTS_SETUP_PENDING) { @@ -821,7 +821,7 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, ur->actual += transferred; trb++; - dwc3_flush_cache((long)trb, sizeof(*trb)); + dwc3_flush_cache((uintptr_t)trb, sizeof(*trb)); length = trb->size & DWC3_TRB_SIZE_MASK; ep0->free_slot = 0; @@ -831,7 +831,7 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, maxp); transferred = min_t(u32, ur->length - transferred, transfer_size - length); - dwc3_flush_cache((long)dwc->ep0_bounce, DWC3_EP0_BOUNCE_SIZE); + dwc3_flush_cache((uintptr_t)dwc->ep0_bounce, DWC3_EP0_BOUNCE_SIZE); memcpy(buf, dwc->ep0_bounce, transferred); } else { transferred = ur->length - length; diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 1156662..8c53cc0 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -244,7 +244,7 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, list_del(&req->list); req->trb = NULL; - dwc3_flush_cache((long)req->request.dma, req->request.length); + dwc3_flush_cache((uintptr_t)req->request.dma, req->request.length); if (req->request.status == -EINPROGRESS) req->request.status = status; @@ -771,8 +771,8 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep, trb->ctrl |= DWC3_TRB_CTRL_HWO; - dwc3_flush_cache((long)dma, length); - dwc3_flush_cache((long)trb, sizeof(*trb)); + dwc3_flush_cache((uintptr_t)dma, length); + dwc3_flush_cache((uintptr_t)trb, sizeof(*trb)); } /* @@ -1769,7 +1769,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((long)trb, sizeof(*trb)); + dwc3_flush_cache((uintptr_t)trb, sizeof(*trb)); __dwc3_cleanup_done_trbs(dwc, dep, req, trb, event, status); dwc3_gadget_giveback(dep, req, status); @@ -2670,7 +2670,7 @@ void dwc3_gadget_uboot_handle_interrupt(struct dwc3 *dwc) for (i = 0; i < dwc->num_event_buffers; i++) { evt = dwc->ev_buffs[i]; - dwc3_flush_cache((long)evt->buf, evt->length); + dwc3_flush_cache((uintptr_t)evt->buf, evt->length); } dwc3_thread_interrupt(0, dwc); diff --git a/drivers/usb/dwc3/io.h b/drivers/usb/dwc3/io.h index 0d9fa22..810980f 100644 --- a/drivers/usb/dwc3/io.h +++ b/drivers/usb/dwc3/io.h @@ -48,7 +48,7 @@ static inline void dwc3_writel(void __iomem *base, u32 offset, u32 value) writel(value, base + offs); } -static inline void dwc3_flush_cache(int addr, int length) +static inline void dwc3_flush_cache(uintptr_t addr, int length) { flush_dcache_range(addr, addr + ROUND(length, CACHELINE_SIZE)); } |