All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] USB: serial: ch341: fix character loss at high transfer rates
@ 2021-07-24 15:27 Willy Tarreau
  2021-07-29 11:51 ` Johan Hovold
  0 siblings, 1 reply; 2+ messages in thread
From: Willy Tarreau @ 2021-07-24 15:27 UTC (permalink / raw)
  To: Johan Hovold
  Cc: Greg Kroah-Hartman, linux-usb, linux-kernel, stable, Willy Tarreau

The chip supports high transfer rates, but with the small default buffers
(64 bytes read), some entire blocks are regularly lost. This typically
happens at 1.5 Mbps (which is the default speed on Rockchip devices) when
used as a console to access U-Boot where the output of the "help" command
misses many lines and where "printenv" mangles the environment.

The FTDI driver doesn't suffer at all from this. One difference is that
it uses 512 bytes rx buffers and 256 bytes tx buffers. Adopting these
values completely resolved the issue, even the output of "dmesg" is
reliable. I preferred to leave the Tx value unchanged as it is not
involved in this issue, while a change could increase the risk of
triggering the same issue with other devices having too small buffers.

I verified that it backports well (and works) at least to 5.4. It's of
low importance enough to be dropped where it doesn't trivially apply
anymore.

Cc: stable@vger.kernel.org
Signed-off-by: Willy Tarreau <w@1wt.eu>
---
 drivers/usb/serial/ch341.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
index 2db917eab799..8a521b5ea769 100644
--- a/drivers/usb/serial/ch341.c
+++ b/drivers/usb/serial/ch341.c
@@ -851,6 +851,7 @@ static struct usb_serial_driver ch341_device = {
 		.owner	= THIS_MODULE,
 		.name	= "ch341-uart",
 	},
+	.bulk_in_size      = 512,
 	.id_table          = id_table,
 	.num_ports         = 1,
 	.open              = ch341_open,
-- 
2.17.5


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] USB: serial: ch341: fix character loss at high transfer rates
  2021-07-24 15:27 [PATCH] USB: serial: ch341: fix character loss at high transfer rates Willy Tarreau
@ 2021-07-29 11:51 ` Johan Hovold
  0 siblings, 0 replies; 2+ messages in thread
From: Johan Hovold @ 2021-07-29 11:51 UTC (permalink / raw)
  To: Willy Tarreau; +Cc: Greg Kroah-Hartman, linux-usb, linux-kernel, stable

On Sat, Jul 24, 2021 at 05:27:39PM +0200, Willy Tarreau wrote:
> The chip supports high transfer rates, but with the small default buffers
> (64 bytes read), some entire blocks are regularly lost. This typically
> happens at 1.5 Mbps (which is the default speed on Rockchip devices) when
> used as a console to access U-Boot where the output of the "help" command
> misses many lines and where "printenv" mangles the environment.
> 
> The FTDI driver doesn't suffer at all from this. One difference is that
> it uses 512 bytes rx buffers and 256 bytes tx buffers. Adopting these
> values completely resolved the issue, even the output of "dmesg" is
> reliable. I preferred to leave the Tx value unchanged as it is not
> involved in this issue, while a change could increase the risk of
> triggering the same issue with other devices having too small buffers.

Since these device do not support automatic flow control this is indeed
the best we can to do here (otherwise I'd probably prefer framing it
more as an optimisation than a fix).

> I verified that it backports well (and works) at least to 5.4. It's of
> low importance enough to be dropped where it doesn't trivially apply
> anymore.

This should be fine to backport to all stable trees.

> Cc: stable@vger.kernel.org
> Signed-off-by: Willy Tarreau <w@1wt.eu>

Now applied for 5.14, thanks.

Johan

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-07-29 11:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-24 15:27 [PATCH] USB: serial: ch341: fix character loss at high transfer rates Willy Tarreau
2021-07-29 11:51 ` Johan Hovold

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.