--- /dev/null
+From e0a368ae79531ff92105a2692f10d83052055856 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= <ilpo.jarvinen@linux.intel.com>
+Date: Tue, 3 Feb 2026 19:10:48 +0200
+Subject: serial: 8250: Add late synchronize_irq() to shutdown to handle DW UART BUSY
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+
+commit e0a368ae79531ff92105a2692f10d83052055856 upstream.
+
+When DW UART is !uart_16550_compatible, it can indicate BUSY at any
+point (when under constant Rx pressure) unless a complex sequence of
+steps is performed. Any LCR write can run a foul with the condition
+that prevents writing LCR while the UART is BUSY, which triggers
+BUSY_DETECT interrupt that seems unmaskable using IER bits.
+
+Normal flow is that dw8250_handle_irq() handles BUSY_DETECT condition
+by reading USR register. This BUSY feature, however, breaks the
+assumptions made in serial8250_do_shutdown(), which runs
+synchronize_irq() after clearing IER and assumes no interrupts can
+occur after that point but then proceeds to update LCR, which on DW
+UART can trigger an interrupt.
+
+If serial8250_do_shutdown() releases the interrupt handler before the
+handler has run and processed the BUSY_DETECT condition by read the USR
+register, the IRQ is not deasserted resulting in interrupt storm that
+triggers "irq x: nobody cared" warning leading to disabling the IRQ.
+
+Add late synchronize_irq() into serial8250_do_shutdown() to ensure
+BUSY_DETECT from DW UART is handled before port's interrupt handler is
+released. Alternative would be to add DW UART specific shutdown
+function but it would mostly duplicate the generic code and the extra
+synchronize_irq() seems pretty harmless in serial8250_do_shutdown().
+
+Fixes: 7d4008ebb1c9 ("tty: add a DesignWare 8250 driver")
+Cc: stable <stable@kernel.org>
+Reported-by: Bandal, Shankar <shankar.bandal@intel.com>
+Tested-by: Bandal, Shankar <shankar.bandal@intel.com>
+Tested-by: Murthy, Shanth <shanth.murthy@intel.com>
+Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+Link: https://patch.msgid.link/20260203171049.4353-7-ilpo.jarvinen@linux.intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/tty/serial/8250/8250_port.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/tty/serial/8250/8250_port.c
++++ b/drivers/tty/serial/8250/8250_port.c
+@@ -2526,6 +2526,12 @@ void serial8250_do_shutdown(struct uart_
+ * the IRQ chain.
+ */
+ serial_port_in(port, UART_RX);
++ /*
++ * LCR writes on DW UART can trigger late (unmaskable) IRQs.
++ * Handle them before releasing the handler.
++ */
++ synchronize_irq(port->irq);
++
+ serial8250_rpm_put(up);
+
+ up->ops->release_irq(up);
--- /dev/null
+From a424a34b8faddf97b5af41689087e7a230f79ba7 Mon Sep 17 00:00:00 2001
+From: Raul E Rangel <rrangel@chromium.org>
+Date: Mon, 9 Feb 2026 13:58:18 -0700
+Subject: serial: 8250: Fix TX deadlock when using DMA
+
+From: Raul E Rangel <rrangel@chromium.org>
+
+commit a424a34b8faddf97b5af41689087e7a230f79ba7 upstream.
+
+`dmaengine_terminate_async` does not guarantee that the
+`__dma_tx_complete` callback will run. The callback is currently the
+only place where `dma->tx_running` gets cleared. If the transaction is
+canceled and the callback never runs, then `dma->tx_running` will never
+get cleared and we will never schedule new TX DMA transactions again.
+
+This change makes it so we clear `dma->tx_running` after we terminate
+the DMA transaction. This is "safe" because `serial8250_tx_dma_flush`
+is holding the UART port lock. The first thing the callback does is also
+grab the UART port lock, so access to `dma->tx_running` is serialized.
+
+Fixes: 9e512eaaf8f4 ("serial: 8250: Fix fifo underflow on flush")
+Cc: stable <stable@kernel.org>
+Signed-off-by: Raul E Rangel <rrangel@google.com>
+Link: https://patch.msgid.link/20260209135815.1.I16366ecb0f62f3c96fe3dd5763fcf6f3c2b4d8cd@changeid
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/tty/serial/8250/8250_dma.c | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+--- a/drivers/tty/serial/8250/8250_dma.c
++++ b/drivers/tty/serial/8250/8250_dma.c
+@@ -146,7 +146,22 @@ void serial8250_tx_dma_flush(struct uart
+ */
+ dma->tx_size = 0;
+
++ /*
++ * We can't use `dmaengine_terminate_sync` because `uart_flush_buffer` is
++ * holding the uart port spinlock.
++ */
+ dmaengine_terminate_async(dma->txchan);
++
++ /*
++ * The callback might or might not run. If it doesn't run, we need to ensure
++ * that `tx_running` is cleared so that we can schedule new transactions.
++ * If it does run, then the zombie callback will clear `tx_running` again
++ * and perform a no-op since `tx_size` was cleared above.
++ *
++ * In either case, we ASSUME the DMA transaction will terminate before we
++ * issue a new `serial8250_tx_dma`.
++ */
++ dma->tx_running = 0;
+ }
+
+ int serial8250_rx_dma(struct uart_8250_port *p)
--- /dev/null
+From 9c0072bc33d349c83d223e64be30794e11938a6b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Martin=20Roukala=20=28n=C3=A9=20Peres=29?=
+ <martin.roukala@mupuf.org>
+Date: Mon, 9 Mar 2026 15:53:10 +0200
+Subject: serial: 8250_pci: add support for the AX99100
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Martin Roukala (né Peres) <martin.roukala@mupuf.org>
+
+commit 9c0072bc33d349c83d223e64be30794e11938a6b upstream.
+
+This is found in popular brands such as StarTech.com or Delock, and has
+been a source of frustration to quite a few people, if I can trust
+Amazon comments complaining about Linux support via the official
+out-of-the-tree driver.
+
+Signed-off-by: Martin Roukala (né Peres) <martin.roukala@mupuf.org>
+Cc: stable <stable@kernel.org>
+Link: https://patch.msgid.link/20260309-8250_pci_ax99100-v1-1-3328bdfd8e94@mupuf.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/tty/serial/8250/8250_pci.c | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+--- a/drivers/tty/serial/8250/8250_pci.c
++++ b/drivers/tty/serial/8250/8250_pci.c
+@@ -58,6 +58,8 @@ struct serial_private {
+ };
+
+ #define PCI_DEVICE_ID_HPE_PCI_SERIAL 0x37e
++#define PCIE_VENDOR_ID_ASIX 0x125B
++#define PCIE_DEVICE_ID_AX99100 0x9100
+
+ static const struct pci_device_id pci_use_msi[] = {
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9900,
+@@ -70,6 +72,8 @@ static const struct pci_device_id pci_us
+ 0xA000, 0x1000) },
+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_HP_3PAR, PCI_DEVICE_ID_HPE_PCI_SERIAL,
+ PCI_ANY_ID, PCI_ANY_ID) },
++ { PCI_DEVICE_SUB(PCIE_VENDOR_ID_ASIX, PCIE_DEVICE_ID_AX99100,
++ 0xA000, 0x1000) },
+ { }
+ };
+
+@@ -854,6 +858,7 @@ static int pci_netmos_init(struct pci_de
+ case PCI_DEVICE_ID_NETMOS_9912:
+ case PCI_DEVICE_ID_NETMOS_9922:
+ case PCI_DEVICE_ID_NETMOS_9900:
++ case PCIE_DEVICE_ID_AX99100:
+ num_serial = pci_netmos_9900_numports(dev);
+ break;
+
+@@ -2416,6 +2421,14 @@ static struct pci_serial_quirk pci_seria
+ .init = pci_netmos_init,
+ .setup = pci_netmos_9900_setup,
+ },
++ {
++ .vendor = PCIE_VENDOR_ID_ASIX,
++ .device = PCI_ANY_ID,
++ .subvendor = PCI_ANY_ID,
++ .subdevice = PCI_ANY_ID,
++ .init = pci_netmos_init,
++ .setup = pci_netmos_9900_setup,
++ },
+ /*
+ * EndRun Technologies
+ */
+@@ -5960,6 +5973,10 @@ static const struct pci_device_id serial
+ 0xA000, 0x3002,
+ 0, 0, pbn_NETMOS9900_2s_115200 },
+
++ { PCIE_VENDOR_ID_ASIX, PCIE_DEVICE_ID_AX99100,
++ 0xA000, 0x1000,
++ 0, 0, pbn_b0_1_115200 },
++
+ /*
+ * Best Connectivity and Rosewill PCI Multi I/O cards
+ */
--- /dev/null
+From d54801cd509515f674a5aac1d3ea1401d2a05863 Mon Sep 17 00:00:00 2001
+From: Maciej Andrzejewski ICEYE <maciej.andrzejewski@m-works.net>
+Date: Thu, 5 Mar 2026 13:37:51 +0100
+Subject: serial: uartlite: fix PM runtime usage count underflow on probe
+
+From: Maciej Andrzejewski ICEYE <maciej.andrzejewski@m-works.net>
+
+commit d54801cd509515f674a5aac1d3ea1401d2a05863 upstream.
+
+ulite_probe() calls pm_runtime_put_autosuspend() at the end of probe
+without holding a corresponding PM runtime reference for non-console
+ports.
+
+During ulite_assign(), uart_add_one_port() triggers uart_configure_port()
+which calls ulite_pm() via uart_change_pm(). For non-console ports, the
+UART core performs a balanced get/put cycle:
+
+ uart_change_pm(ON) -> ulite_pm() -> pm_runtime_get_sync() +1
+ uart_change_pm(OFF) -> ulite_pm() -> pm_runtime_put_autosuspend() -1
+
+This leaves no spare reference for the pm_runtime_put_autosuspend() at
+the end of probe. The PM runtime core prevents the count from actually
+going below zero, and instead triggers a
+"Runtime PM usage count underflow!" warning.
+
+For console ports the bug is masked: the UART core skips the
+uart_change_pm(OFF) call, so the UART core's unbalanced get happens to
+pair with probe's trailing put.
+
+Add pm_runtime_get_noresume() before pm_runtime_enable() to take an
+explicit probe-owned reference that the trailing
+pm_runtime_put_autosuspend() can release. This ensures a correct usage
+count regardless of whether the port is a console.
+
+Fixes: 5bbe10a6942d ("tty: serial: uartlite: Add runtime pm support")
+Cc: stable <stable@kernel.org>
+Signed-off-by: Maciej Andrzejewski ICEYE <maciej.andrzejewski@m-works.net>
+Link: https://patch.msgid.link/20260305123746.4152800-1-maciej.andrzejewski@m-works.net
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/tty/serial/uartlite.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/tty/serial/uartlite.c
++++ b/drivers/tty/serial/uartlite.c
+@@ -874,6 +874,7 @@ of_err:
+ pm_runtime_use_autosuspend(&pdev->dev);
+ pm_runtime_set_autosuspend_delay(&pdev->dev, UART_AUTOSUSPEND_TIMEOUT);
+ pm_runtime_set_active(&pdev->dev);
++ pm_runtime_get_noresume(&pdev->dev);
+ pm_runtime_enable(&pdev->dev);
+
+ ret = ulite_assign(&pdev->dev, id, res->start, irq, pdata);
mtd-rawnand-cadence-fix-error-check-for-dma_alloc_coherent-in-cadence_nand_init.patch
mtd-avoid-boot-crash-in-redboot-partition-table-parser.patch
iommu-vt-d-fix-intel-iommu-iotlb-sync-hardlockup-and-retry.patch
+serial-8250_pci-add-support-for-the-ax99100.patch
+serial-8250-fix-tx-deadlock-when-using-dma.patch
+serial-8250-add-late-synchronize_irq-to-shutdown-to-handle-dw-uart-busy.patch
+serial-uartlite-fix-pm-runtime-usage-count-underflow-on-probe.patch