From fbff3a7e0784a5bd42e87656e6d50cea94dfcff5 Mon Sep 17 00:00:00 2001 From: Bo Gan Date: Thu, 18 Dec 2025 02:42:42 -0800 Subject: lib: utils/serial: Support multiple UART8250 devices Previously we assume only 1 UART8250 instance can be used. Now we support multiple instances by introducing counterpart functions to putc/getc/init which take an extra *dev parameter, and name them as uart8250_device_xyz() The original functions without the *dev parameter will operate on the default instance exactly the same as before, so no changes on the caller is required. Note: uart8250_device_init only does device initialization without the console registration logic. Signed-off-by: Bo Gan Reviewed-by: Anup Patel Link: https://lore.kernel.org/r/20251218104243.562667-7-ganboing@gmail.com Signed-off-by: Anup Patel --- include/sbi_utils/serial/uart8250.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'include') diff --git a/include/sbi_utils/serial/uart8250.h b/include/sbi_utils/serial/uart8250.h index 70cd291..78c0e61 100644 --- a/include/sbi_utils/serial/uart8250.h +++ b/include/sbi_utils/serial/uart8250.h @@ -14,6 +14,22 @@ #define UART_CAP_UUE BIT(0) /* Check UUE capability for XScale PXA UARTs */ +struct uart8250_device { + volatile char *base; + u32 in_freq; + u32 baudrate; + u32 reg_width; + u32 reg_shift; +}; + +int uart8250_device_getc(struct uart8250_device *dev); + +void uart8250_device_putc(struct uart8250_device *dev, char ch); + +void uart8250_device_init(struct uart8250_device *dev, unsigned long base, + u32 in_freq, u32 baudrate, u32 reg_shift, + u32 reg_width, u32 reg_offset, u32 caps); + int uart8250_init(unsigned long base, u32 in_freq, u32 baudrate, u32 reg_shift, u32 reg_width, u32 reg_offset, u32 caps); -- cgit v1.1