From: Greg Kroah-Hartman Date: Mon, 8 Jun 2020 11:01:35 +0000 (+0200) Subject: 5.4-stable patches X-Git-Tag: v5.7.2~34 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=026ef5ff0f38fe4eb52b42a00467b6dc33c0be6c;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches added patches: usb-serial-ch341-add-basis-for-quirk-detection.patch usb-serial-option-add-telit-le910c1-eux-compositions.patch usb-serial-qcserial-add-dw5816e-qdl-support.patch usb-serial-usb_wwan-do-not-resubmit-rx-urb-on-fatal-errors.patch --- diff --git a/queue-5.4/series b/queue-5.4/series index f5a68ce82cd..90ba048a3e6 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -9,3 +9,7 @@ nfp-flower-fix-used-time-of-merge-flow-statistics.patch vsock-fix-timeout-in-vsock_accept.patch net-check-untrusted-gso_size-at-kernel-entry.patch net-be-more-gentle-about-silly-gso-requests-coming-from-user.patch +usb-serial-qcserial-add-dw5816e-qdl-support.patch +usb-serial-usb_wwan-do-not-resubmit-rx-urb-on-fatal-errors.patch +usb-serial-option-add-telit-le910c1-eux-compositions.patch +usb-serial-ch341-add-basis-for-quirk-detection.patch diff --git a/queue-5.4/usb-serial-ch341-add-basis-for-quirk-detection.patch b/queue-5.4/usb-serial-ch341-add-basis-for-quirk-detection.patch new file mode 100644 index 00000000000..4e9ffe8161a --- /dev/null +++ b/queue-5.4/usb-serial-ch341-add-basis-for-quirk-detection.patch @@ -0,0 +1,106 @@ +From c404bf4aa9236cb4d1068e499ae42acf48a6ff97 Mon Sep 17 00:00:00 2001 +From: Michael Hanselmann +Date: Tue, 31 Mar 2020 23:37:18 +0000 +Subject: USB: serial: ch341: add basis for quirk detection + +From: Michael Hanselmann + +commit c404bf4aa9236cb4d1068e499ae42acf48a6ff97 upstream. + +A subset of CH341 devices does not support all features, namely the +prescaler is limited to a reduced precision and there is no support for +sending a RS232 break condition. This patch adds a detection function +which will be extended to set quirk flags as they're implemented. + +The author's affected device has an imprint of "340" on the +turquoise-colored plug, but not all such devices appear to be affected. + +Signed-off-by: Michael Hanselmann +Link: https://lore.kernel.org/r/1e1ae0da6082bb528a44ef323d4e1d3733d38858.1585697281.git.public@hansmi.ch +[ johan: use long type for quirks; rephrase and use port device for + messages; handle short reads; set quirk flags directly in + helper function ] +Cc: stable # 5.5 +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/ch341.c | 53 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 53 insertions(+) + +--- a/drivers/usb/serial/ch341.c ++++ b/drivers/usb/serial/ch341.c +@@ -93,6 +93,7 @@ struct ch341_private { + u8 mcr; + u8 msr; + u8 lcr; ++ unsigned long quirks; + }; + + static void ch341_set_termios(struct tty_struct *tty, +@@ -245,6 +246,53 @@ out: kfree(buffer); + return r; + } + ++static int ch341_detect_quirks(struct usb_serial_port *port) ++{ ++ struct ch341_private *priv = usb_get_serial_port_data(port); ++ struct usb_device *udev = port->serial->dev; ++ const unsigned int size = 2; ++ unsigned long quirks = 0; ++ char *buffer; ++ int r; ++ ++ buffer = kmalloc(size, GFP_KERNEL); ++ if (!buffer) ++ return -ENOMEM; ++ ++ /* ++ * A subset of CH34x devices does not support all features. The ++ * prescaler is limited and there is no support for sending a RS232 ++ * break condition. A read failure when trying to set up the latter is ++ * used to detect these devices. ++ */ ++ r = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), CH341_REQ_READ_REG, ++ USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, ++ CH341_REG_BREAK, 0, buffer, size, DEFAULT_TIMEOUT); ++ if (r == -EPIPE) { ++ dev_dbg(&port->dev, "break control not supported\n"); ++ r = 0; ++ goto out; ++ } ++ ++ if (r != size) { ++ if (r >= 0) ++ r = -EIO; ++ dev_err(&port->dev, "failed to read break control: %d\n", r); ++ goto out; ++ } ++ ++ r = 0; ++out: ++ kfree(buffer); ++ ++ if (quirks) { ++ dev_dbg(&port->dev, "enabling quirk flags: 0x%02lx\n", quirks); ++ priv->quirks |= quirks; ++ } ++ ++ return r; ++} ++ + static int ch341_port_probe(struct usb_serial_port *port) + { + struct ch341_private *priv; +@@ -267,6 +315,11 @@ static int ch341_port_probe(struct usb_s + goto error; + + usb_set_serial_port_data(port, priv); ++ ++ r = ch341_detect_quirks(port); ++ if (r < 0) ++ goto error; ++ + return 0; + + error: kfree(priv); diff --git a/queue-5.4/usb-serial-option-add-telit-le910c1-eux-compositions.patch b/queue-5.4/usb-serial-option-add-telit-le910c1-eux-compositions.patch new file mode 100644 index 00000000000..93433b71b67 --- /dev/null +++ b/queue-5.4/usb-serial-option-add-telit-le910c1-eux-compositions.patch @@ -0,0 +1,37 @@ +From 399ad9477c523f721f8e51d4f824bdf7267f120c Mon Sep 17 00:00:00 2001 +From: Daniele Palmas +Date: Mon, 25 May 2020 23:11:06 +0200 +Subject: USB: serial: option: add Telit LE910C1-EUX compositions + +From: Daniele Palmas + +commit 399ad9477c523f721f8e51d4f824bdf7267f120c upstream. + +Add Telit LE910C1-EUX compositions: + + 0x1031: tty, tty, tty, rmnet + 0x1033: tty, tty, tty, ecm + +Signed-off-by: Daniele Palmas +Link: https://lore.kernel.org/r/20200525211106.27338-1-dnlplm@gmail.com +Cc: stable@vger.kernel.org +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -1157,6 +1157,10 @@ static const struct usb_device_id option + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UE910_V2) }, ++ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1031, 0xff), /* Telit LE910C1-EUX */ ++ .driver_info = NCTRL(0) | RSVD(3) }, ++ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1033, 0xff), /* Telit LE910C1-EUX (ECM) */ ++ .driver_info = NCTRL(0) }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG0), + .driver_info = RSVD(0) | RSVD(1) | NCTRL(2) | RSVD(3) }, + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE922_USBCFG1), diff --git a/queue-5.4/usb-serial-qcserial-add-dw5816e-qdl-support.patch b/queue-5.4/usb-serial-qcserial-add-dw5816e-qdl-support.patch new file mode 100644 index 00000000000..cbcee93e56d --- /dev/null +++ b/queue-5.4/usb-serial-qcserial-add-dw5816e-qdl-support.patch @@ -0,0 +1,33 @@ +From 3429444abdd9dbd5faebd9bee552ec6162b17ad6 Mon Sep 17 00:00:00 2001 +From: Matt Jolly +Date: Thu, 21 May 2020 10:43:58 +1000 +Subject: USB: serial: qcserial: add DW5816e QDL support + +From: Matt Jolly + +commit 3429444abdd9dbd5faebd9bee552ec6162b17ad6 upstream. + +Add support for Dell Wireless 5816e Download Mode (AKA boot & hold mode / +QDL download mode) to drivers/usb/serial/qcserial.c + +This is required to update device firmware. + +Signed-off-by: Matt Jolly +Cc: stable@vger.kernel.org +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/qcserial.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/qcserial.c ++++ b/drivers/usb/serial/qcserial.c +@@ -173,6 +173,7 @@ static const struct usb_device_id id_tab + {DEVICE_SWI(0x413c, 0x81b3)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */ + {DEVICE_SWI(0x413c, 0x81b5)}, /* Dell Wireless 5811e QDL */ + {DEVICE_SWI(0x413c, 0x81b6)}, /* Dell Wireless 5811e QDL */ ++ {DEVICE_SWI(0x413c, 0x81cb)}, /* Dell Wireless 5816e QDL */ + {DEVICE_SWI(0x413c, 0x81cc)}, /* Dell Wireless 5816e */ + {DEVICE_SWI(0x413c, 0x81cf)}, /* Dell Wireless 5819 */ + {DEVICE_SWI(0x413c, 0x81d0)}, /* Dell Wireless 5819 */ diff --git a/queue-5.4/usb-serial-usb_wwan-do-not-resubmit-rx-urb-on-fatal-errors.patch b/queue-5.4/usb-serial-usb_wwan-do-not-resubmit-rx-urb-on-fatal-errors.patch new file mode 100644 index 00000000000..1e1cb01bce9 --- /dev/null +++ b/queue-5.4/usb-serial-usb_wwan-do-not-resubmit-rx-urb-on-fatal-errors.patch @@ -0,0 +1,36 @@ +From 986c1748c84d7727defeaeca74a73b37f7d5cce1 Mon Sep 17 00:00:00 2001 +From: Bin Liu +Date: Wed, 13 May 2020 16:36:46 -0500 +Subject: USB: serial: usb_wwan: do not resubmit rx urb on fatal errors + +From: Bin Liu + +commit 986c1748c84d7727defeaeca74a73b37f7d5cce1 upstream. + +usb_wwan_indat_callback() shouldn't resubmit rx urb if the previous urb +status is a fatal error. Or the usb controller would keep processing the +new urbs then run into interrupt storm, and has no chance to recover. + +Fixes: 6c1ee66a0b2b ("USB-Serial: Fix error handling of usb_wwan") +Cc: stable@vger.kernel.org +Signed-off-by: Bin Liu +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/usb_wwan.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/usb/serial/usb_wwan.c ++++ b/drivers/usb/serial/usb_wwan.c +@@ -270,6 +270,10 @@ static void usb_wwan_indat_callback(stru + if (status) { + dev_dbg(dev, "%s: nonzero status: %d on endpoint %02x.\n", + __func__, status, endpoint); ++ ++ /* don't resubmit on fatal errors */ ++ if (status == -ESHUTDOWN || status == -ENOENT) ++ return; + } else { + if (urb->actual_length) { + tty_insert_flip_string(&port->port, data,