amba/serial: amba-pl011: Bring back zx29 UART support

This is based on code removed in commit 89d4f98ae9 ("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>
This commit is contained in:
Stefan Dösinger 2026-05-14 00:34:57 +03:00 committed by Greg Kroah-Hartman
parent 5e6dfb87b1
commit d9ee199c0f

View 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 },
};