]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.10
authorSasha Levin <sashal@kernel.org>
Thu, 25 May 2023 14:38:22 +0000 (10:38 -0400)
committerSasha Levin <sashal@kernel.org>
Thu, 25 May 2023 14:38:22 +0000 (10:38 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-5.10/s390-qdio-fix-do_sqbs-inline-assembly-constraint.patch [new file with mode: 0644]
queue-5.10/s390-qdio-get-rid-of-register-asm.patch [new file with mode: 0644]
queue-5.10/serial-8250_exar-add-support-for-usr298x-pci-modems.patch [new file with mode: 0644]
queue-5.10/serial-8250_exar-derive-nr_ports-from-pci-id-for-acc.patch [new file with mode: 0644]
queue-5.10/serial-exar-add-support-for-sealevel-7xxxc-serial-ca.patch [new file with mode: 0644]
queue-5.10/series

diff --git a/queue-5.10/s390-qdio-fix-do_sqbs-inline-assembly-constraint.patch b/queue-5.10/s390-qdio-fix-do_sqbs-inline-assembly-constraint.patch
new file mode 100644 (file)
index 0000000..b362398
--- /dev/null
@@ -0,0 +1,66 @@
+From 7eb6a81bd3b018bad613c38beadae7eb464c0bb9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 11 May 2023 17:04:41 +0200
+Subject: s390/qdio: fix do_sqbs() inline assembly constraint
+
+From: Heiko Carstens <hca@linux.ibm.com>
+
+[ Upstream commit 2862a2fdfae875888e3c1c3634e3422e01d98147 ]
+
+Use "a" constraint instead of "d" constraint to pass the state parameter to
+the do_sqbs() inline assembly. This prevents that general purpose register
+zero is used for the state parameter.
+
+If the compiler would select general purpose register zero this would be
+problematic for the used instruction in rsy format: the register used for
+the state parameter is a base register. If the base register is general
+purpose register zero the contents of the register are unexpectedly ignored
+when the instruction is executed.
+
+This only applies to z/VM guests using QIOASSIST with dedicated (pass through)
+QDIO-based devices such as FCP [zfcp driver] as well as real OSA or
+HiperSockets [qeth driver].
+
+A possible symptom for this case using zfcp is the following repeating kernel
+message pattern:
+
+zfcp <devbusid>: A QDIO problem occurred
+zfcp <devbusid>: A QDIO problem occurred
+zfcp <devbusid>: qdio: ZFCP on SC <sc> using AI:1 QEBSM:1 PRI:1 TDD:1 SIGA: W
+zfcp <devbusid>: A QDIO problem occurred
+zfcp <devbusid>: A QDIO problem occurred
+
+Each of the qdio problem message can be accompanied by the following entries
+for the affected subchannel <sc> in
+/sys/kernel/debug/s390dbf/qdio_error/hex_ascii for zfcp or qeth:
+
+<sc> ccq: 69....
+<sc> SQBS ERROR.
+
+Reviewed-by: Benjamin Block <bblock@linux.ibm.com>
+Cc: Steffen Maier <maier@linux.ibm.com>
+Fixes: 8129ee164267 ("[PATCH] s390: qdio V=V pass-through")
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
+Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/s390/cio/qdio.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h
+index 854a21e1d3b7b..919d106141664 100644
+--- a/drivers/s390/cio/qdio.h
++++ b/drivers/s390/cio/qdio.h
+@@ -95,7 +95,7 @@ static inline int do_sqbs(u64 token, unsigned char state, int queue,
+               "       lgr     1,%[token]\n"
+               "       .insn   rsy,0xeb000000008a,%[qs],%[ccq],0(%[state])"
+               : [ccq] "+&d" (_ccq), [qs] "+&d" (_queuestart)
+-              : [state] "d" ((unsigned long)state), [token] "d" (token)
++              : [state] "a" ((unsigned long)state), [token] "d" (token)
+               : "memory", "cc", "1");
+       *count = _ccq & 0xff;
+       *start = _queuestart & 0xff;
+-- 
+2.39.2
+
diff --git a/queue-5.10/s390-qdio-get-rid-of-register-asm.patch b/queue-5.10/s390-qdio-get-rid-of-register-asm.patch
new file mode 100644 (file)
index 0000000..8b101a4
--- /dev/null
@@ -0,0 +1,172 @@
+From 1719e9b200f7fcaf87888e6b67429db1f78c2fb7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 22 Jun 2021 15:26:16 +0200
+Subject: s390/qdio: get rid of register asm
+
+From: Heiko Carstens <hca@linux.ibm.com>
+
+[ Upstream commit d3e2ff5436d6ee38b572ba5c01dc7994769bec54 ]
+
+Reviewed-by: Benjamin Block <bblock@linux.ibm.com>
+Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
+Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
+Stable-dep-of: 2862a2fdfae8 ("s390/qdio: fix do_sqbs() inline assembly constraint")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/s390/cio/qdio.h      | 25 ++++++++-------
+ drivers/s390/cio/qdio_main.c | 62 +++++++++++++++++++-----------------
+ 2 files changed, 46 insertions(+), 41 deletions(-)
+
+diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h
+index cd2df4ff8e0ef..854a21e1d3b7b 100644
+--- a/drivers/s390/cio/qdio.h
++++ b/drivers/s390/cio/qdio.h
+@@ -88,15 +88,15 @@ enum qdio_irq_states {
+ static inline int do_sqbs(u64 token, unsigned char state, int queue,
+                         int *start, int *count)
+ {
+-      register unsigned long _ccq asm ("0") = *count;
+-      register unsigned long _token asm ("1") = token;
+       unsigned long _queuestart = ((unsigned long)queue << 32) | *start;
++      unsigned long _ccq = *count;
+       asm volatile(
+-              "       .insn   rsy,0xeb000000008A,%1,0,0(%2)"
+-              : "+d" (_ccq), "+d" (_queuestart)
+-              : "d" ((unsigned long)state), "d" (_token)
+-              : "memory", "cc");
++              "       lgr     1,%[token]\n"
++              "       .insn   rsy,0xeb000000008a,%[qs],%[ccq],0(%[state])"
++              : [ccq] "+&d" (_ccq), [qs] "+&d" (_queuestart)
++              : [state] "d" ((unsigned long)state), [token] "d" (token)
++              : "memory", "cc", "1");
+       *count = _ccq & 0xff;
+       *start = _queuestart & 0xff;
+@@ -106,16 +106,17 @@ static inline int do_sqbs(u64 token, unsigned char state, int queue,
+ static inline int do_eqbs(u64 token, unsigned char *state, int queue,
+                         int *start, int *count, int ack)
+ {
+-      register unsigned long _ccq asm ("0") = *count;
+-      register unsigned long _token asm ("1") = token;
+       unsigned long _queuestart = ((unsigned long)queue << 32) | *start;
+       unsigned long _state = (unsigned long)ack << 63;
++      unsigned long _ccq = *count;
+       asm volatile(
+-              "       .insn   rrf,0xB99c0000,%1,%2,0,0"
+-              : "+d" (_ccq), "+d" (_queuestart), "+d" (_state)
+-              : "d" (_token)
+-              : "memory", "cc");
++              "       lgr     1,%[token]\n"
++              "       .insn   rrf,0xb99c0000,%[qs],%[state],%[ccq],0"
++              : [ccq] "+&d" (_ccq), [qs] "+&d" (_queuestart),
++                [state] "+&d" (_state)
++              : [token] "d" (token)
++              : "memory", "cc", "1");
+       *count = _ccq & 0xff;
+       *start = _queuestart & 0xff;
+       *state = _state & 0xff;
+diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
+index 3e29c26f01856..e3c55fc2363ac 100644
+--- a/drivers/s390/cio/qdio_main.c
++++ b/drivers/s390/cio/qdio_main.c
+@@ -31,38 +31,41 @@ MODULE_DESCRIPTION("QDIO base support");
+ MODULE_LICENSE("GPL");
+ static inline int do_siga_sync(unsigned long schid,
+-                             unsigned int out_mask, unsigned int in_mask,
++                             unsigned long out_mask, unsigned long in_mask,
+                              unsigned int fc)
+ {
+-      register unsigned long __fc asm ("0") = fc;
+-      register unsigned long __schid asm ("1") = schid;
+-      register unsigned long out asm ("2") = out_mask;
+-      register unsigned long in asm ("3") = in_mask;
+       int cc;
+       asm volatile(
++              "       lgr     0,%[fc]\n"
++              "       lgr     1,%[schid]\n"
++              "       lgr     2,%[out]\n"
++              "       lgr     3,%[in]\n"
+               "       siga    0\n"
+-              "       ipm     %0\n"
+-              "       srl     %0,28\n"
+-              : "=d" (cc)
+-              : "d" (__fc), "d" (__schid), "d" (out), "d" (in) : "cc");
++              "       ipm     %[cc]\n"
++              "       srl     %[cc],28\n"
++              : [cc] "=&d" (cc)
++              : [fc] "d" (fc), [schid] "d" (schid),
++                [out] "d" (out_mask), [in] "d" (in_mask)
++              : "cc", "0", "1", "2", "3");
+       return cc;
+ }
+-static inline int do_siga_input(unsigned long schid, unsigned int mask,
+-                              unsigned int fc)
++static inline int do_siga_input(unsigned long schid, unsigned long mask,
++                              unsigned long fc)
+ {
+-      register unsigned long __fc asm ("0") = fc;
+-      register unsigned long __schid asm ("1") = schid;
+-      register unsigned long __mask asm ("2") = mask;
+       int cc;
+       asm volatile(
++              "       lgr     0,%[fc]\n"
++              "       lgr     1,%[schid]\n"
++              "       lgr     2,%[mask]\n"
+               "       siga    0\n"
+-              "       ipm     %0\n"
+-              "       srl     %0,28\n"
+-              : "=d" (cc)
+-              : "d" (__fc), "d" (__schid), "d" (__mask) : "cc");
++              "       ipm     %[cc]\n"
++              "       srl     %[cc],28\n"
++              : [cc] "=&d" (cc)
++              : [fc] "d" (fc), [schid] "d" (schid), [mask] "d" (mask)
++              : "cc", "0", "1", "2");
+       return cc;
+ }
+@@ -78,23 +81,24 @@ static inline int do_siga_input(unsigned long schid, unsigned int mask,
+  * Note: For IQDC unicast queues only the highest priority queue is processed.
+  */
+ static inline int do_siga_output(unsigned long schid, unsigned long mask,
+-                               unsigned int *bb, unsigned int fc,
++                               unsigned int *bb, unsigned long fc,
+                                unsigned long aob)
+ {
+-      register unsigned long __fc asm("0") = fc;
+-      register unsigned long __schid asm("1") = schid;
+-      register unsigned long __mask asm("2") = mask;
+-      register unsigned long __aob asm("3") = aob;
+       int cc;
+       asm volatile(
++              "       lgr     0,%[fc]\n"
++              "       lgr     1,%[schid]\n"
++              "       lgr     2,%[mask]\n"
++              "       lgr     3,%[aob]\n"
+               "       siga    0\n"
+-              "       ipm     %0\n"
+-              "       srl     %0,28\n"
+-              : "=d" (cc), "+d" (__fc), "+d" (__aob)
+-              : "d" (__schid), "d" (__mask)
+-              : "cc");
+-      *bb = __fc >> 31;
++              "       lgr     %[fc],0\n"
++              "       ipm     %[cc]\n"
++              "       srl     %[cc],28\n"
++              : [cc] "=&d" (cc), [fc] "+&d" (fc)
++              : [schid] "d" (schid), [mask] "d" (mask), [aob] "d" (aob)
++              : "cc", "0", "1", "2", "3");
++      *bb = fc >> 31;
+       return cc;
+ }
+-- 
+2.39.2
+
diff --git a/queue-5.10/serial-8250_exar-add-support-for-usr298x-pci-modems.patch b/queue-5.10/serial-8250_exar-add-support-for-usr298x-pci-modems.patch
new file mode 100644 (file)
index 0000000..c8e17b4
--- /dev/null
@@ -0,0 +1,79 @@
+From 6ab60999e41a3043acecd7b3ab27500dc9e8da70 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 20 Apr 2023 11:02:09 -0500
+Subject: serial: 8250_exar: Add support for USR298x PCI Modems
+
+From: Andrew Davis <afd@ti.com>
+
+[ Upstream commit 95d698869b404772cc8b72560df71548491c10bc ]
+
+Possibly the last PCI controller-based (i.e. not a soft/winmodem)
+dial-up modem one can still buy.
+
+Looks to have a stock XR17C154 PCI UART chip for communication, but for
+some reason when provisioning the PCI IDs they swapped the vendor and
+subvendor IDs. Otherwise this card would have worked out of the box.
+
+Searching online, some folks seem to not have this issue and others do,
+so it is possible only some batches of cards have this error.
+
+Create a new macro to handle the switched IDs and add support here.
+
+Signed-off-by: Andrew Davis <afd@ti.com>
+Cc: stable <stable@kernel.org>
+Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Link: https://lore.kernel.org/r/20230420160209.28221-1-afd@ti.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/serial/8250/8250_exar.c | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/drivers/tty/serial/8250/8250_exar.c b/drivers/tty/serial/8250/8250_exar.c
+index 2c9f721091125..5c2adf14049b7 100644
+--- a/drivers/tty/serial/8250/8250_exar.c
++++ b/drivers/tty/serial/8250/8250_exar.c
+@@ -40,9 +40,13 @@
+ #define PCI_DEVICE_ID_COMMTECH_4224PCIE               0x0020
+ #define PCI_DEVICE_ID_COMMTECH_4228PCIE               0x0021
+ #define PCI_DEVICE_ID_COMMTECH_4222PCIE               0x0022
++
+ #define PCI_DEVICE_ID_EXAR_XR17V4358          0x4358
+ #define PCI_DEVICE_ID_EXAR_XR17V8358          0x8358
++#define PCI_SUBDEVICE_ID_USR_2980             0x0128
++#define PCI_SUBDEVICE_ID_USR_2981             0x0129
++
+ #define PCI_DEVICE_ID_SEALEVEL_710xC          0x1001
+ #define PCI_DEVICE_ID_SEALEVEL_720xC          0x1002
+ #define PCI_DEVICE_ID_SEALEVEL_740xC          0x1004
+@@ -791,6 +795,15 @@ static const struct exar8250_board pbn_exar_XR17V8358 = {
+               (kernel_ulong_t)&bd                     \
+       }
++#define USR_DEVICE(devid, sdevid, bd) {                       \
++      PCI_DEVICE_SUB(                                 \
++              PCI_VENDOR_ID_USR,                      \
++              PCI_DEVICE_ID_EXAR_##devid,             \
++              PCI_VENDOR_ID_EXAR,                     \
++              PCI_SUBDEVICE_ID_USR_##sdevid), 0, 0,   \
++              (kernel_ulong_t)&bd                     \
++      }
++
+ static const struct pci_device_id exar_pci_tbl[] = {
+       EXAR_DEVICE(ACCESSIO, COM_2S, pbn_exar_XR17C15x),
+       EXAR_DEVICE(ACCESSIO, COM_4S, pbn_exar_XR17C15x),
+@@ -815,6 +828,10 @@ static const struct pci_device_id exar_pci_tbl[] = {
+       IBM_DEVICE(XR17C152, SATURN_SERIAL_ONE_PORT, pbn_exar_ibm_saturn),
++      /* USRobotics USR298x-OEM PCI Modems */
++      USR_DEVICE(XR17C152, 2980, pbn_exar_XR17C15x),
++      USR_DEVICE(XR17C152, 2981, pbn_exar_XR17C15x),
++
+       /* Exar Corp. XR17C15[248] Dual/Quad/Octal UART */
+       EXAR_DEVICE(EXAR, XR17C152, pbn_exar_XR17C15x),
+       EXAR_DEVICE(EXAR, XR17C154, pbn_exar_XR17C15x),
+-- 
+2.39.2
+
diff --git a/queue-5.10/serial-8250_exar-derive-nr_ports-from-pci-id-for-acc.patch b/queue-5.10/serial-8250_exar-derive-nr_ports-from-pci-id-for-acc.patch
new file mode 100644 (file)
index 0000000..75905e6
--- /dev/null
@@ -0,0 +1,86 @@
+From 9b96d21eaaa414a8f55ded852d83c8943225debb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 27 Jan 2022 20:06:08 +0200
+Subject: serial: 8250_exar: derive nr_ports from PCI ID for Acces I/O cards
+
+From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+
+[ Upstream commit 8e4413aaf6a2e3a46e99a0718ca54c0cf8609cb2 ]
+
+In the similar way how it's done in 8250_pericom, derive the number of
+the UART ports from PCI ID for Acces I/O cards.
+
+Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Link: https://lore.kernel.org/r/20220127180608.71509-1-andriy.shevchenko@linux.intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Stable-dep-of: 95d698869b40 ("serial: 8250_exar: Add support for USR298x PCI Modems")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/serial/8250/8250_exar.c | 37 ++++++++++-------------------
+ 1 file changed, 13 insertions(+), 24 deletions(-)
+
+diff --git a/drivers/tty/serial/8250/8250_exar.c b/drivers/tty/serial/8250/8250_exar.c
+index 2d0e7c7e408dc..3d82902bfe5b9 100644
+--- a/drivers/tty/serial/8250/8250_exar.c
++++ b/drivers/tty/serial/8250/8250_exar.c
+@@ -596,7 +596,12 @@ exar_pci_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
+       maxnr = pci_resource_len(pcidev, bar) >> (board->reg_shift + 3);
+-      nr_ports = board->num_ports ? board->num_ports : pcidev->device & 0x0f;
++      if (pcidev->vendor == PCI_VENDOR_ID_ACCESSIO)
++              nr_ports = BIT(((pcidev->device & 0x38) >> 3) - 1);
++      else if (board->num_ports)
++              nr_ports = board->num_ports;
++      else
++              nr_ports = pcidev->device & 0x0f;
+       priv = devm_kzalloc(&pcidev->dev, struct_size(priv, line, nr_ports), GFP_KERNEL);
+       if (!priv)
+@@ -695,22 +700,6 @@ static int __maybe_unused exar_resume(struct device *dev)
+ static SIMPLE_DEV_PM_OPS(exar_pci_pm, exar_suspend, exar_resume);
+-static const struct exar8250_board acces_com_2x = {
+-      .num_ports      = 2,
+-      .setup          = pci_xr17c154_setup,
+-};
+-
+-static const struct exar8250_board acces_com_4x = {
+-      .num_ports      = 4,
+-      .setup          = pci_xr17c154_setup,
+-};
+-
+-static const struct exar8250_board acces_com_8x = {
+-      .num_ports      = 8,
+-      .setup          = pci_xr17c154_setup,
+-};
+-
+-
+ static const struct exar8250_board pbn_fastcom335_2 = {
+       .num_ports      = 2,
+       .setup          = pci_fastcom335_setup,
+@@ -795,13 +784,13 @@ static const struct exar8250_board pbn_exar_XR17V8358 = {
+       }
+ static const struct pci_device_id exar_pci_tbl[] = {
+-      EXAR_DEVICE(ACCESSIO, COM_2S, acces_com_2x),
+-      EXAR_DEVICE(ACCESSIO, COM_4S, acces_com_4x),
+-      EXAR_DEVICE(ACCESSIO, COM_8S, acces_com_8x),
+-      EXAR_DEVICE(ACCESSIO, COM232_8, acces_com_8x),
+-      EXAR_DEVICE(ACCESSIO, COM_2SM, acces_com_2x),
+-      EXAR_DEVICE(ACCESSIO, COM_4SM, acces_com_4x),
+-      EXAR_DEVICE(ACCESSIO, COM_8SM, acces_com_8x),
++      EXAR_DEVICE(ACCESSIO, COM_2S, pbn_exar_XR17C15x),
++      EXAR_DEVICE(ACCESSIO, COM_4S, pbn_exar_XR17C15x),
++      EXAR_DEVICE(ACCESSIO, COM_8S, pbn_exar_XR17C15x),
++      EXAR_DEVICE(ACCESSIO, COM232_8, pbn_exar_XR17C15x),
++      EXAR_DEVICE(ACCESSIO, COM_2SM, pbn_exar_XR17C15x),
++      EXAR_DEVICE(ACCESSIO, COM_4SM, pbn_exar_XR17C15x),
++      EXAR_DEVICE(ACCESSIO, COM_8SM, pbn_exar_XR17C15x),
+       CONNECT_DEVICE(XR17C152, UART_2_232, pbn_connect),
+       CONNECT_DEVICE(XR17C154, UART_4_232, pbn_connect),
+-- 
+2.39.2
+
diff --git a/queue-5.10/serial-exar-add-support-for-sealevel-7xxxc-serial-ca.patch b/queue-5.10/serial-exar-add-support-for-sealevel-7xxxc-serial-ca.patch
new file mode 100644 (file)
index 0000000..f60cdf3
--- /dev/null
@@ -0,0 +1,68 @@
+From a2720e22408230e58e78f949c7b00a11f3082657 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 19 Jan 2023 14:40:29 -0500
+Subject: serial: exar: Add support for Sealevel 7xxxC serial cards
+
+From: Matthew Howell <matthew.howell@sealevel.com>
+
+[ Upstream commit 14ee78d5932afeb710c8305196a676a715bfdea8 ]
+
+Add support for Sealevel 7xxxC serial cards.
+
+This patch:
+* Adds IDs to recognize 7xxxC cards from Sealevel Systems.
+* Updates exar_pci_probe() to set nr_ports to last two bytes of primary
+  dev ID for these cards.
+
+Signed-off-by: Matthew Howell <matthew.howell@sealevel.com>
+Cc: stable <stable@kernel.org>
+Link: https://lore.kernel.org/r/alpine.DEB.2.21.2301191440010.22558@tstest-VirtualBox
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Stable-dep-of: 95d698869b40 ("serial: 8250_exar: Add support for USR298x PCI Modems")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/tty/serial/8250/8250_exar.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/drivers/tty/serial/8250/8250_exar.c b/drivers/tty/serial/8250/8250_exar.c
+index 3d82902bfe5b9..2c9f721091125 100644
+--- a/drivers/tty/serial/8250/8250_exar.c
++++ b/drivers/tty/serial/8250/8250_exar.c
+@@ -43,6 +43,12 @@
+ #define PCI_DEVICE_ID_EXAR_XR17V4358          0x4358
+ #define PCI_DEVICE_ID_EXAR_XR17V8358          0x8358
++#define PCI_DEVICE_ID_SEALEVEL_710xC          0x1001
++#define PCI_DEVICE_ID_SEALEVEL_720xC          0x1002
++#define PCI_DEVICE_ID_SEALEVEL_740xC          0x1004
++#define PCI_DEVICE_ID_SEALEVEL_780xC          0x1008
++#define PCI_DEVICE_ID_SEALEVEL_716xC          0x1010
++
+ #define UART_EXAR_INT0                0x80
+ #define UART_EXAR_8XMODE      0x88    /* 8X sampling rate select */
+ #define UART_EXAR_SLEEP               0x8b    /* Sleep mode */
+@@ -600,6 +606,8 @@ exar_pci_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
+               nr_ports = BIT(((pcidev->device & 0x38) >> 3) - 1);
+       else if (board->num_ports)
+               nr_ports = board->num_ports;
++      else if (pcidev->vendor == PCI_VENDOR_ID_SEALEVEL)
++              nr_ports = pcidev->device & 0xff;
+       else
+               nr_ports = pcidev->device & 0x0f;
+@@ -826,6 +834,12 @@ static const struct pci_device_id exar_pci_tbl[] = {
+       EXAR_DEVICE(COMMTECH, 4224PCI335, pbn_fastcom335_4),
+       EXAR_DEVICE(COMMTECH, 2324PCI335, pbn_fastcom335_4),
+       EXAR_DEVICE(COMMTECH, 2328PCI335, pbn_fastcom335_8),
++
++      EXAR_DEVICE(SEALEVEL, 710xC, pbn_exar_XR17V35x),
++      EXAR_DEVICE(SEALEVEL, 720xC, pbn_exar_XR17V35x),
++      EXAR_DEVICE(SEALEVEL, 740xC, pbn_exar_XR17V35x),
++      EXAR_DEVICE(SEALEVEL, 780xC, pbn_exar_XR17V35x),
++      EXAR_DEVICE(SEALEVEL, 716xC, pbn_exar_XR17V35x),
+       { 0, }
+ };
+ MODULE_DEVICE_TABLE(pci, exar_pci_tbl);
+-- 
+2.39.2
+
index d0b634eff6d03d7c40f1b33f370421e0b68d45cc..6b2ac89c9295d5824c194e0b2e3eb97eb5a4c34a 100644 (file)
@@ -151,3 +151,8 @@ hid-wacom-force-pen-out-of-prox-if-no-events-have-been-received-in-a-while.patch
 hid-wacom-add-new-intuos-pro-small-pth-460-device-ids.patch
 hid-wacom-add-three-styli-to-wacom_intuos_get_tool_type.patch
 kvm-arm64-link-position-independent-string-routines-into-.hyp.text.patch
+serial-8250_exar-derive-nr_ports-from-pci-id-for-acc.patch
+serial-exar-add-support-for-sealevel-7xxxc-serial-ca.patch
+serial-8250_exar-add-support-for-usr298x-pci-modems.patch
+s390-qdio-get-rid-of-register-asm.patch
+s390-qdio-fix-do_sqbs-inline-assembly-constraint.patch