usb: cdns3: improve handling of unaligned address case
authorFrank Li <Frank.Li@nxp.com>
Thu, 18 May 2023 20:49:45 +0000 (16:49 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 29 May 2023 14:52:37 +0000 (15:52 +0100)
commit2a1c4639d6d6bcee27f74e38f83ffb43579c4733
treefa5a909c1d73485f3367a6a5f96e87d96df38e67
parentbfb46b424652a3396b92ca3c96c169ade9b45b8d
usb: cdns3: improve handling of unaligned address case

When the address of a request was not aligned with an 8-byte boundary, the
USB DMA was unable to process it, necessitating the use of an internal
bounce buffer.

In these cases, the request->buf had to be copied to/from this bounce
buffer. However, if this unaligned address scenario arises, it is
unnecessary to perform heavy cache maintenance operations like
usb_gadget_map(unmap)_request_by_dev() on the request->buf, as the DMA
does not utilize it at all. it can be skipped at this case.

iperf3 tests on the rndis case:

Transmit speed (TX): Improved from 299Mbps to 440Mbps
Receive speed (RX): Improved from 290Mbps to 500Mbps

Signed-off-by: Frank Li <Frank.Li@nxp.com>
Link: https://lore.kernel.org/r/20230518204947.3770236-1-Frank.Li@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/cdns3/cdns3-gadget.c