| From 3c18e9baee0ef97510dcda78c82285f52626764b Mon Sep 17 00:00:00 2001 |
| From: Willy Tarreau <w@1wt.eu> |
| Date: Sat, 24 Jul 2021 17:27:39 +0200 |
| Subject: USB: serial: ch341: fix character loss at high transfer rates |
| |
| From: Willy Tarreau <w@1wt.eu> |
| |
| commit 3c18e9baee0ef97510dcda78c82285f52626764b upstream. |
| |
| 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> |
| Link: https://lore.kernel.org/r/20210724152739.18726-1-w@1wt.eu |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/usb/serial/ch341.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/drivers/usb/serial/ch341.c |
| +++ b/drivers/usb/serial/ch341.c |
| @@ -585,6 +585,7 @@ static struct usb_serial_driver ch341_de |
| .owner = THIS_MODULE, |
| .name = "ch341-uart", |
| }, |
| + .bulk_in_size = 512, |
| .id_table = id_table, |
| .num_ports = 1, |
| .open = ch341_open, |