usb: dwc2: clip max_transfer_size to 65535
authorPaul Zimmerman <Paul.Zimmerman@synopsys.com>
Tue, 16 Sep 2014 20:47:26 +0000 (13:47 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 19 Sep 2014 23:17:58 +0000 (16:17 -0700)
Clip max_transfer_size to 65535 for host. dwc2_hc_setup_align_buf()
allocates coherent buffers with this size, and if it's too large we
can exhaust the coherent DMA pool.

Tested on Raspberry Pi and Altera SOCFPGA.

Signed-off-by: Paul Zimmerman <paulz@synopsys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/dwc2/core.c

index ea0048a..d926945 100644 (file)
@@ -2743,6 +2743,13 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg)
        width = (hwcfg3 & GHWCFG3_XFER_SIZE_CNTR_WIDTH_MASK) >>
                GHWCFG3_XFER_SIZE_CNTR_WIDTH_SHIFT;
        hw->max_transfer_size = (1 << (width + 11)) - 1;
+       /*
+        * Clip max_transfer_size to 65535. dwc2_hc_setup_align_buf() allocates
+        * coherent buffers with this size, and if it's too large we can
+        * exhaust the coherent DMA pool.
+        */
+       if (hw->max_transfer_size > 65535)
+               hw->max_transfer_size = 65535;
        width = (hwcfg3 & GHWCFG3_PACKET_SIZE_CNTR_WIDTH_MASK) >>
                GHWCFG3_PACKET_SIZE_CNTR_WIDTH_SHIFT;
        hw->max_packet_count = (1 << (width + 4)) - 1;