From a786c8d2313ebe973ace0cbbe4f8f3825251062a Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 4 Nov 2025 16:43:44 +0000 Subject: [PATCH] [uart] Support 16550 UARTs accessed via either MMIO or port I/O Use the combined accessors ioread8() and iowrite8() to read and write 16550 UART registers, to allow the decision between using MMIO and port I/O to be made at runtime. Minimise the increase in code size for x86 by ignoring the register shift, since this is essentially used only for non-x86 SoCs. Signed-off-by: Michael Brown --- src/arch/x86/include/bits/ns16550.h | 4 ++-- src/include/bits/ns16550.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/arch/x86/include/bits/ns16550.h b/src/arch/x86/include/bits/ns16550.h index cc2bd84c1..dbb1cd51c 100644 --- a/src/arch/x86/include/bits/ns16550.h +++ b/src/arch/x86/include/bits/ns16550.h @@ -23,7 +23,7 @@ static inline __attribute__ (( always_inline )) void ns16550_write ( struct ns16550_uart *ns16550, unsigned int address, uint8_t data ) { - outb ( data, ( ns16550->base + address ) ); + iowrite8 ( data, ( ns16550->base + address ) ); } /** @@ -36,7 +36,7 @@ ns16550_write ( struct ns16550_uart *ns16550, unsigned int address, static inline __attribute__ (( always_inline )) uint8_t ns16550_read ( struct ns16550_uart *ns16550, unsigned int address ) { - return inb ( ns16550->base + address ); + return ioread8 ( ns16550->base + address ); } /* Fixed ISA serial port base addresses */ diff --git a/src/include/bits/ns16550.h b/src/include/bits/ns16550.h index e40b2a21b..45e3e978f 100644 --- a/src/include/bits/ns16550.h +++ b/src/include/bits/ns16550.h @@ -23,7 +23,7 @@ static inline __attribute__ (( always_inline )) void ns16550_write ( struct ns16550_uart *ns16550, unsigned int address, uint8_t data ) { - writeb ( data, ( ns16550->base + ( address << ns16550->shift ) ) ); + iowrite8 ( data, ( ns16550->base + ( address << ns16550->shift ) ) ); } /** @@ -36,7 +36,7 @@ ns16550_write ( struct ns16550_uart *ns16550, unsigned int address, static inline __attribute__ (( always_inline )) uint8_t ns16550_read ( struct ns16550_uart *ns16550, unsigned int address ) { - return readb ( ns16550->base + ( address << ns16550->shift ) ); + return ioread8 ( ns16550->base + ( address << ns16550->shift ) ); } #endif /* _BITS_NS16550_H */