]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
amba/serial: amba-pl011: Bring back zx29 UART support
authorStefan Dösinger <stefandoesinger@gmail.com>
Wed, 13 May 2026 21:34:57 +0000 (00:34 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 22 May 2026 09:45:51 +0000 (11:45 +0200)
This is based on code removed in commit 89d4f98ae90d ("ARM: remove zte
zx platform"). I did not bring back the zx29-uart .compatible as the
arm,primecell-periphid does the job.

Reviewed-by: Linus Walleij <linusw@kernel.org>
Signed-off-by: Stefan Dösinger <stefandoesinger@gmail.com>
Link: https://patch.msgid.link/20260514-zx29uart-v1-2-68470ecc3977@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/amba-pl011.c

index 028e37ad8d79f89296f1601a1deffe0730d15a9d..8ed91e1da22be8895686e51d44826aca96ba3206 100644 (file)
@@ -240,6 +240,38 @@ static struct vendor_data vendor_nvidia = {
        .get_fifosize           = get_fifosize_nvidia,
 };
 
+static const u16 pl011_zte_offsets[REG_ARRAY_SIZE] = {
+       [REG_DR] = ZX_UART011_DR,
+       [REG_FR] = ZX_UART011_FR,
+       [REG_LCRH_RX] = ZX_UART011_LCRH,
+       [REG_LCRH_TX] = ZX_UART011_LCRH,
+       [REG_IBRD] = ZX_UART011_IBRD,
+       [REG_FBRD] = ZX_UART011_FBRD,
+       [REG_CR] = ZX_UART011_CR,
+       [REG_IFLS] = ZX_UART011_IFLS,
+       [REG_IMSC] = ZX_UART011_IMSC,
+       [REG_RIS] = ZX_UART011_RIS,
+       [REG_MIS] = ZX_UART011_MIS,
+       [REG_ICR] = ZX_UART011_ICR,
+       [REG_DMACR] = ZX_UART011_DMACR,
+};
+
+static unsigned int get_fifosize_zte(struct amba_device *dev)
+{
+       return 16;
+}
+
+static struct vendor_data vendor_zte = {
+       .reg_offset             = pl011_zte_offsets,
+       .access_32b             = true,
+       .ifls                   = UART011_IFLS_RX4_8 | UART011_IFLS_TX4_8,
+       .fr_busy                = ZX_UART01x_FR_BUSY,
+       .fr_dsr                 = ZX_UART01x_FR_DSR,
+       .fr_cts                 = ZX_UART01x_FR_CTS,
+       .fr_ri                  = ZX_UART011_FR_RI,
+       .get_fifosize           = get_fifosize_zte,
+};
+
 /* Deals with DMA transactions */
 
 struct pl011_dmabuf {
@@ -3180,6 +3212,16 @@ static const struct amba_id pl011_ids[] = {
                .mask   = 0x000fffff,
                .data   = &vendor_nvidia,
        },
+       {
+               /* This is an invented ID. The actual hardware that contains
+                * these ZTE UARTs (zx29 boards) has no AMBA PIDs stored. ZTE
+                * JEDEC ID (ignoring banks) and the "011" part number as used
+                * by ARM.
+                */
+               .id     = 0x0008c011,
+               .mask   = 0x000fffff,
+               .data   = &vendor_zte,
+       },
        { 0, 0 },
 };