mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 10:01:41 +00:00
serial: 8250: Export ICR access helpers for internal use
Make ICR access helpers available outside 8250_port.c, however retain them as ordinary static functions so as not to regress code generation. This is because `serial_icr_write' is currently automatically inlined by GCC, however `serial_icr_read' is not. Making them both static inline would grow code produced, e.g.: $ i386-linux-gnu-size --format=gnu 8250_port-{old,new}.o text data bss total filename 15065 3378 0 18443 8250_port-old.o 15289 3378 0 18667 8250_port-new.o and: $ riscv64-linux-gnu-size --format=gnu 8250_port-{old,new}.o text data bss total filename 16980 5306 0 22286 8250_port-old.o 17124 5306 0 22430 8250_port-new.o while making them external would needlessly add a new module interface and lose the benefit from `serial_icr_write' getting inlined outside 8250_port.o. Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Link: https://lore.kernel.org/r/alpine.DEB.2.21.2204181517500.9383@angie.orcam.me.uk Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
1f32c65bad
commit
cb5a40e314
@ -123,6 +123,28 @@ static inline void serial_out(struct uart_8250_port *up, int offset, int value)
|
||||
up->port.serial_out(&up->port, offset, value);
|
||||
}
|
||||
|
||||
/*
|
||||
* For the 16C950
|
||||
*/
|
||||
static void serial_icr_write(struct uart_8250_port *up, int offset, int value)
|
||||
{
|
||||
serial_out(up, UART_SCR, offset);
|
||||
serial_out(up, UART_ICR, value);
|
||||
}
|
||||
|
||||
static unsigned int __maybe_unused serial_icr_read(struct uart_8250_port *up,
|
||||
int offset)
|
||||
{
|
||||
unsigned int value;
|
||||
|
||||
serial_icr_write(up, UART_ACR, up->acr | UART_ACR_ICRRD);
|
||||
serial_out(up, UART_SCR, offset);
|
||||
value = serial_in(up, UART_ICR);
|
||||
serial_icr_write(up, UART_ACR, up->acr);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
void serial8250_clear_and_reinit_fifos(struct uart_8250_port *p);
|
||||
|
||||
static inline int serial_dl_read(struct uart_8250_port *up)
|
||||
|
@ -537,27 +537,6 @@ serial_port_out_sync(struct uart_port *p, int offset, int value)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* For the 16C950
|
||||
*/
|
||||
static void serial_icr_write(struct uart_8250_port *up, int offset, int value)
|
||||
{
|
||||
serial_out(up, UART_SCR, offset);
|
||||
serial_out(up, UART_ICR, value);
|
||||
}
|
||||
|
||||
static unsigned int serial_icr_read(struct uart_8250_port *up, int offset)
|
||||
{
|
||||
unsigned int value;
|
||||
|
||||
serial_icr_write(up, UART_ACR, up->acr | UART_ACR_ICRRD);
|
||||
serial_out(up, UART_SCR, offset);
|
||||
value = serial_in(up, UART_ICR);
|
||||
serial_icr_write(up, UART_ACR, up->acr);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
/*
|
||||
* FIFO support.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user