serial: 8250: Export ICR access helpers for internal use
[ Upstream commit cb5a40e3143bc64437858b337273fd63cc42e9c2 ] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
403d469719
commit
d98dd16d3d
@@ -119,6 +119,28 @@ static inline void serial_out(struct uart_8250_port *up, int offset, int value)
|
|||||||
up->port.serial_out(&up->port, offset, 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);
|
void serial8250_clear_and_reinit_fifos(struct uart_8250_port *p);
|
||||||
|
|
||||||
static inline int serial_dl_read(struct uart_8250_port *up)
|
static inline int serial_dl_read(struct uart_8250_port *up)
|
||||||
|
@@ -529,27 +529,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.
|
* FIFO support.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user