]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 8 Jun 2020 11:01:35 +0000 (13:01 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 8 Jun 2020 11:01:35 +0000 (13:01 +0200)
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

queue-5.4/series
queue-5.4/usb-serial-ch341-add-basis-for-quirk-detection.patch [new file with mode: 0644]
queue-5.4/usb-serial-option-add-telit-le910c1-eux-compositions.patch [new file with mode: 0644]
queue-5.4/usb-serial-qcserial-add-dw5816e-qdl-support.patch [new file with mode: 0644]
queue-5.4/usb-serial-usb_wwan-do-not-resubmit-rx-urb-on-fatal-errors.patch [new file with mode: 0644]

index f5a68ce82cdd675500390f1be270b24b0f2f9221..90ba048a3e6ac4039dccf86c80e982b7802bffac 100644 (file)
@@ -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 (file)
index 0000000..4e9ffe8
--- /dev/null
@@ -0,0 +1,106 @@
+From c404bf4aa9236cb4d1068e499ae42acf48a6ff97 Mon Sep 17 00:00:00 2001
+From: Michael Hanselmann <public@hansmi.ch>
+Date: Tue, 31 Mar 2020 23:37:18 +0000
+Subject: USB: serial: ch341: add basis for quirk detection
+
+From: Michael Hanselmann <public@hansmi.ch>
+
+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 <public@hansmi.ch>
+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 <stable@vger.kernel.org>    # 5.5
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..93433b7
--- /dev/null
@@ -0,0 +1,37 @@
+From 399ad9477c523f721f8e51d4f824bdf7267f120c Mon Sep 17 00:00:00 2001
+From: Daniele Palmas <dnlplm@gmail.com>
+Date: Mon, 25 May 2020 23:11:06 +0200
+Subject: USB: serial: option: add Telit LE910C1-EUX compositions
+
+From: Daniele Palmas <dnlplm@gmail.com>
+
+commit 399ad9477c523f721f8e51d4f824bdf7267f120c upstream.
+
+Add Telit LE910C1-EUX compositions:
+
+       0x1031: tty, tty, tty, rmnet
+       0x1033: tty, tty, tty, ecm
+
+Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
+Link: https://lore.kernel.org/r/20200525211106.27338-1-dnlplm@gmail.com
+Cc: stable@vger.kernel.org
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..cbcee93
--- /dev/null
@@ -0,0 +1,33 @@
+From 3429444abdd9dbd5faebd9bee552ec6162b17ad6 Mon Sep 17 00:00:00 2001
+From: Matt Jolly <Kangie@footclan.ninja>
+Date: Thu, 21 May 2020 10:43:58 +1000
+Subject: USB: serial: qcserial: add DW5816e QDL support
+
+From: Matt Jolly <Kangie@footclan.ninja>
+
+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 <Kangie@footclan.ninja>
+Cc: stable@vger.kernel.org
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..1e1cb01
--- /dev/null
@@ -0,0 +1,36 @@
+From 986c1748c84d7727defeaeca74a73b37f7d5cce1 Mon Sep 17 00:00:00 2001
+From: Bin Liu <b-liu@ti.com>
+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 <b-liu@ti.com>
+
+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 <b-liu@ti.com>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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,