From 55aaa15ddeb53bc91997e078ee5ea8a03f45fa13 Mon Sep 17 00:00:00 2001 From: William Wu Date: Fri, 30 Mar 2018 12:48:14 +0800 Subject: [PATCH] usb: dwc_otg_310: hcd: limit max size of aligned buffer Limit the max size of aligned buffer to 64K. Because 64K buffer is enough for most of usb transfers, and the aligned buffer is a coherent DMA buffer allocated by dma_alloc_coherent, too large buffer may cause coherent DMA memory allocation failure on some platforms. Change-Id: Ib4895349be93d7a298f5cd08c609f1a8a81d2610 Signed-off-by: William Wu --- drivers/usb/dwc_otg_310/dwc_otg_hcd.c | 1 + drivers/usb/dwc_otg_310/dwc_otg_hcd_queue.c | 1 + 2 files changed, 2 insertions(+) diff --git a/drivers/usb/dwc_otg_310/dwc_otg_hcd.c b/drivers/usb/dwc_otg_310/dwc_otg_hcd.c index 01ef21b8ec62..b4db2e44342a 100644 --- a/drivers/usb/dwc_otg_310/dwc_otg_hcd.c +++ b/drivers/usb/dwc_otg_310/dwc_otg_hcd.c @@ -1240,6 +1240,7 @@ static int assign_and_init_hc(dwc_otg_hcd_t *hcd, dwc_otg_qh_t *qh) uint32_t buf_size; if (hc->ep_type != DWC_OTG_EP_TYPE_ISOC) { buf_size = hcd->core_if->core_params->max_transfer_size; + buf_size = buf_size > 65536 ? 65536 : buf_size; } else { buf_size = 4096; } diff --git a/drivers/usb/dwc_otg_310/dwc_otg_hcd_queue.c b/drivers/usb/dwc_otg_310/dwc_otg_hcd_queue.c index 8816160156e6..a291ff127eba 100644 --- a/drivers/usb/dwc_otg_310/dwc_otg_hcd_queue.c +++ b/drivers/usb/dwc_otg_310/dwc_otg_hcd_queue.c @@ -69,6 +69,7 @@ void dwc_otg_hcd_qh_free(dwc_otg_hcd_t *hcd, dwc_otg_qh_t *qh) buf_size = 4096; } else { buf_size = hcd->core_if->core_params->max_transfer_size; + buf_size = buf_size > 65536 ? 65536 : buf_size; } DWC_DEV_DMA_FREE(buf_size, qh->dw_align_buf, qh->dw_align_buf_dma);