lkml.org 
[lkml]   [2020]   [Feb]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 12/89] serial: 8250_bcm2835aux: Fix line mismatch on driver unbind
    Date
    From: Lukas Wunner <lukas@wunner.de>

    commit dc76697d7e933d5e299116f219c890568785ea15 upstream.

    Unbinding the bcm2835aux UART driver raises the following error if the
    maximum number of 8250 UARTs is set to 1 (via the 8250.nr_uarts module
    parameter or CONFIG_SERIAL_8250_RUNTIME_UARTS):

    (NULL device *): Removing wrong port: a6f80333 != fa20408b

    That's because bcm2835aux_serial_probe() retrieves UART line number 1
    from the devicetree and stores it in data->uart.port.line, while
    serial8250_register_8250_port() instead uses UART line number 0,
    which is stored in data->line.

    On driver unbind, bcm2835aux_serial_remove() uses data->uart.port.line,
    which contains the wrong number. Fix it.

    The issue does not occur if the maximum number of 8250 UARTs is >= 2.

    Fixes: bdc5f3009580 ("serial: bcm2835: add driver for bcm2835-aux-uart")
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Cc: stable@vger.kernel.org # v4.6+
    Cc: Martin Sperl <kernel@martin.sperl.org>
    Reviewed-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
    Tested-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
    Link: https://lore.kernel.org/r/912ccf553c5258135c6d7e8f404a101ef320f0f4.1579175223.git.lukas@wunner.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/tty/serial/8250/8250_bcm2835aux.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/drivers/tty/serial/8250/8250_bcm2835aux.c
    +++ b/drivers/tty/serial/8250/8250_bcm2835aux.c
    @@ -119,7 +119,7 @@ static int bcm2835aux_serial_remove(stru
    {
    struct bcm2835aux_data *data = platform_get_drvdata(pdev);

    - serial8250_unregister_port(data->uart.port.line);
    + serial8250_unregister_port(data->line);
    clk_disable_unprepare(data->clk);

    return 0;

    \
     
     \ /
      Last update: 2020-02-03 17:28    [W:3.445 / U:1.456 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site