lkml.org 
[lkml]   [2022]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 370/545] serial: 8250: Export ICR access helpers for internal use
    Date
    From: Maciej W. Rozycki <macro@orcam.me.uk>

    [ 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>
    ---
    drivers/tty/serial/8250/8250.h | 22 ++++++++++++++++++++++
    drivers/tty/serial/8250/8250_port.c | 21 ---------------------
    2 files changed, 22 insertions(+), 21 deletions(-)

    diff --git a/drivers/tty/serial/8250/8250.h b/drivers/tty/serial/8250/8250.h
    index 34aa2714f3c9..b6dc9003b8c4 100644
    --- a/drivers/tty/serial/8250/8250.h
    +++ b/drivers/tty/serial/8250/8250.h
    @@ -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);
    }

    +/*
    + * 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)
    diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
    index 43884e8b5161..9d60418e4adb 100644
    --- a/drivers/tty/serial/8250/8250_port.c
    +++ b/drivers/tty/serial/8250/8250_port.c
    @@ -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.
    */
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-19 18:37    [W:4.043 / U:0.280 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site