From 60e167c00b138fdb162e7b2192e9cbb196ed3cbd Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 17 Jun 2025 15:44:12 +0100 Subject: [PATCH] [uart] Remove ability to use frame formats other than 8n1 In the context of serial consoles, the use of any frame formats other than the standard 8 data bits, no parity, and one stop bit is so rare as to be nonexistent. Remove the almost certainly unused support for custom frame formats. Signed-off-by: Michael Brown --- src/config/serial.h | 5 +---- src/core/gdbserial.c | 13 +++---------- src/core/serial.c | 14 +++----------- src/core/uart.c | 10 +++------- src/include/ipxe/gdbserial.h | 5 +---- src/include/ipxe/uart.h | 4 +--- 6 files changed, 12 insertions(+), 39 deletions(-) diff --git a/src/config/serial.h b/src/config/serial.h index 09068d8e0..69d8d8ef3 100644 --- a/src/config/serial.h +++ b/src/config/serial.h @@ -16,15 +16,12 @@ FILE_LICENCE ( GPL2_OR_LATER ); #define COMCONSOLE COM1 /* I/O port address */ /* Keep settings from a previous user of the serial port (e.g. lilo or - * LinuxBIOS), ignoring COMSPEED, COMDATA, COMPARITY and COMSTOP. + * LinuxBIOS), ignoring COMSPEED. */ #undef COMPRESERVE #ifndef COMPRESERVE #define COMSPEED 115200 /* Baud rate */ -#define COMDATA 8 /* Data bits */ -#define COMPARITY 0 /* Parity: 0=None, 1=Odd, 2=Even */ -#define COMSTOP 1 /* Stop bits */ #endif /* Early UART configuration (for bare metal prefix debugging only) */ diff --git a/src/core/gdbserial.c b/src/core/gdbserial.c index 0983f2557..1edc28109 100644 --- a/src/core/gdbserial.c +++ b/src/core/gdbserial.c @@ -46,13 +46,6 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #define GDBSERIAL_BAUD COMSPEED #endif -/* UART line control register value */ -#ifdef COMPRESERVE -#define GDBSERIAL_LCR 0 -#else -#define GDBSERIAL_LCR UART_LCR_WPS ( COMDATA, COMPARITY, COMSTOP ) -#endif - /** GDB serial UART */ static struct uart gdbserial_uart; @@ -90,7 +83,7 @@ static int gdbserial_init ( int argc, char **argv ) { return 1; } - if ( ! gdbserial_configure ( port, GDBSERIAL_BAUD, GDBSERIAL_LCR ) ) { + if ( ! gdbserial_configure ( port, GDBSERIAL_BAUD ) ) { printf ( "serial: unable to configure\n" ); return 1; } @@ -106,13 +99,13 @@ struct gdb_transport serial_gdb_transport __gdb_transport = { }; struct gdb_transport * gdbserial_configure ( unsigned int port, - unsigned int baud, uint8_t lcr ) { + unsigned int baud ) { int rc; if ( ( rc = uart_select ( &gdbserial_uart, port ) ) != 0 ) return NULL; - if ( ( rc = uart_init ( &gdbserial_uart, baud, lcr ) ) != 0 ) + if ( ( rc = uart_init ( &gdbserial_uart, baud ) ) != 0 ) return NULL; return &serial_gdb_transport; diff --git a/src/core/serial.c b/src/core/serial.c index bef9ccbab..2866681a8 100644 --- a/src/core/serial.c +++ b/src/core/serial.c @@ -58,13 +58,6 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #define CONSOLE_BAUD COMSPEED #endif -/* UART line control register value */ -#ifdef COMPRESERVE -#define CONSOLE_LCR 0 -#else -#define CONSOLE_LCR UART_LCR_WPS ( COMDATA, COMPARITY, COMSTOP ) -#endif - /** Serial console UART */ struct uart serial_console; @@ -149,10 +142,9 @@ static void serial_init ( void ) { } /* Initialise UART */ - if ( ( rc = uart_init ( &serial_console, CONSOLE_BAUD, - CONSOLE_LCR ) ) != 0 ) { - DBG ( "Could not initialise UART %d baud %d LCR %#02x: %s\n", - CONSOLE_PORT, CONSOLE_BAUD, CONSOLE_LCR, strerror ( rc )); + if ( ( rc = uart_init ( &serial_console, CONSOLE_BAUD ) ) != 0 ) { + DBG ( "Could not initialise UART %d baud %d: %s\n", + CONSOLE_PORT, CONSOLE_BAUD, strerror ( rc ) ); return; } } diff --git a/src/core/uart.c b/src/core/uart.c index b85fe0767..4dc307fce 100644 --- a/src/core/uart.c +++ b/src/core/uart.c @@ -107,10 +107,9 @@ int uart_exists ( struct uart *uart ) { * * @v uart UART * @v baud Baud rate, or zero to leave unchanged - * @v lcr Line control register value, or zero to leave unchanged * @ret rc Return status code */ -int uart_init ( struct uart *uart, unsigned int baud, uint8_t lcr ) { +int uart_init ( struct uart *uart, unsigned int baud ) { uint8_t dlm; uint8_t dll; int rc; @@ -120,10 +119,7 @@ int uart_init ( struct uart *uart, unsigned int baud, uint8_t lcr ) { return rc; /* Configure divisor and line control register, if applicable */ - if ( ! lcr ) - lcr = uart_read ( uart, UART_LCR ); - uart->lcr = lcr; - uart_write ( uart, UART_LCR, ( lcr | UART_LCR_DLAB ) ); + uart_write ( uart, UART_LCR, ( UART_LCR_8N1 | UART_LCR_DLAB ) ); if ( baud ) { uart->divisor = ( UART_MAX_BAUD / baud ); dlm = ( ( uart->divisor >> 8 ) & 0xff ); @@ -135,7 +131,7 @@ int uart_init ( struct uart *uart, unsigned int baud, uint8_t lcr ) { dll = uart_read ( uart, UART_DLL ); uart->divisor = ( ( dlm << 8 ) | dll ); } - uart_write ( uart, UART_LCR, ( lcr & ~UART_LCR_DLAB ) ); + uart_write ( uart, UART_LCR, UART_LCR_8N1 ); /* Disable interrupts */ uart_write ( uart, UART_IER, 0 ); diff --git a/src/include/ipxe/gdbserial.h b/src/include/ipxe/gdbserial.h index e1040c94e..166eb4f0d 100644 --- a/src/include/ipxe/gdbserial.h +++ b/src/include/ipxe/gdbserial.h @@ -9,12 +9,9 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); -#include - struct gdb_transport; extern struct gdb_transport * gdbserial_configure ( unsigned int port, - unsigned int baud, - uint8_t lcr ); + unsigned int baud ); #endif /* _IPXE_GDBSERIAL_H */ diff --git a/src/include/ipxe/uart.h b/src/include/ipxe/uart.h index c63eae615..86583ee2f 100644 --- a/src/include/ipxe/uart.h +++ b/src/include/ipxe/uart.h @@ -82,8 +82,6 @@ struct uart { void *base; /** Baud rate divisor */ uint16_t divisor; - /** Line control register */ - uint8_t lcr; }; /** Symbolic names for port indexes */ @@ -127,6 +125,6 @@ static inline uint8_t uart_receive ( struct uart *uart ) { extern void uart_transmit ( struct uart *uart, uint8_t data ); extern void uart_flush ( struct uart *uart ); extern int uart_exists ( struct uart *uart ); -extern int uart_init ( struct uart *uart, unsigned int baud, uint8_t lcr ); +extern int uart_init ( struct uart *uart, unsigned int baud ); #endif /* _IPXE_UART_H */ -- 2.47.2