diff mbox series

usb: dwc2: Set max xfer length to speed up R/W

Message ID 20210324061113.1705392-1-Cheng.Lu@synaptics.com
State Deferred
Delegated to: Tom Rini
Headers show
Series usb: dwc2: Set max xfer length to speed up R/W | expand

Commit Message

cheng lu March 24, 2021, 6:11 a.m. UTC
Set transfer length to the maximum (65535 * 512) Bytes
of SCSI READ(10) and WRITE(10) commands, while default
transfer length is (20 * 512) Bytes

Signed-off-by: Cheng Lu <Cheng.Lu@synaptics.com>
Cc: <marex@denx.de>
---

 drivers/usb/host/dwc2.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Marek Vasut March 24, 2021, 11:39 a.m. UTC | #1
On 3/24/21 7:11 AM, Cheng Lu wrote:
> Set transfer length to the maximum (65535 * 512) Bytes
> of SCSI READ(10) and WRITE(10) commands, while default
> transfer length is (20 * 512) Bytes

Please have a look at these four patches, increasing the transfer length 
would make some odd USB pen drives fail:

7d6fd7f0ba7 ("usb: storage: Limit transfer size to 120 kiB")
da3d1c499fb ("usb: storage: Only clear READY flag on error")
02b0e1a36c5 ("usb: ehci-hcd: Keep async schedule running")
31232de07ef ("usb: Keep async schedule running only across mass storage 
xfers")

Use the async schedule to avoid stopping the controller after every 
transfer and thus keep the throughput high, while avoiding very long 
transfers which might break odd USB pen drives.
cheng lu March 24, 2021, 11:59 a.m. UTC | #2
Ok, I will check.

On Wed, Mar 24, 2021 at 7:39 PM Marek Vasut <marex@denx.de> wrote:

> On 3/24/21 7:11 AM, Cheng Lu wrote:
> > Set transfer length to the maximum (65535 * 512) Bytes
> > of SCSI READ(10) and WRITE(10) commands, while default
> > transfer length is (20 * 512) Bytes
>
> Please have a look at these four patches, increasing the transfer length
> would make some odd USB pen drives fail:
>
> 7d6fd7f0ba7 ("usb: storage: Limit transfer size to 120 kiB")
> da3d1c499fb ("usb: storage: Only clear READY flag on error")
> 02b0e1a36c5 ("usb: ehci-hcd: Keep async schedule running")
> 31232de07ef ("usb: Keep async schedule running only across mass storage
> xfers")
>
> Use the async schedule to avoid stopping the controller after every
> transfer and thus keep the throughput high, while avoiding very long
> transfers which might break odd USB pen drives.
>
diff mbox series

Patch

diff --git a/drivers/usb/host/dwc2.c b/drivers/usb/host/dwc2.c
index f1d13b1c1d..936d7ceb5f 100644
--- a/drivers/usb/host/dwc2.c
+++ b/drivers/usb/host/dwc2.c
@@ -1456,10 +1456,17 @@  static int dwc2_usb_remove(struct udevice *dev)
 	return 0;
 }
 
+static int dwc2_get_max_xfer_size(struct udevice *dev, size_t *size)
+{
+	*size = SIZE_MAX;
+	return 0;
+}
+
 struct dm_usb_ops dwc2_usb_ops = {
 	.control = dwc2_submit_control_msg,
 	.bulk = dwc2_submit_bulk_msg,
 	.interrupt = dwc2_submit_int_msg,
+	.get_max_xfer_size  = dwc2_get_max_xfer_size,
 };
 
 static const struct udevice_id dwc2_usb_ids[] = {