lkml.org 
[lkml]   [2022]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6.0 095/862] serial: 8250: Request full 16550A feature probing for OxSemi PCIe devices
    Date
    From: Maciej W. Rozycki <macro@orcam.me.uk>

    commit 00b7a4d4ee42be1c515e56cb1e8ba0f25e271d8e upstream.

    Oxford Semiconductor PCIe (Tornado) 950 serial port devices need to
    operate in the enhanced mode via the EFR register for the Divide-by-M
    N/8 baud rate generator prescaler to be used in their native UART mode.
    Otherwise the prescaler is fixed at 1 causing grossly incorrect baud
    rates to be programmed.

    Accessing the EFR register requires 16550A features to have been probed
    for, so request this to happen regardless of SERIAL_8250_16550A_VARIANTS
    by setting UPF_FULL_PROBE in port flags.

    Fixes: 366f6c955d4d ("serial: 8250: Add proper clock handling for OxSemi PCIe devices")
    Cc: stable@vger.kernel.org # v5.19+
    Reported-by: Anders Blomdell <anders.blomdell@control.lth.se>
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Link: https://lore.kernel.org/r/alpine.DEB.2.21.2209210005040.41633@angie.orcam.me.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/tty/serial/8250/8250_pci.c | 5 +++++
    1 file changed, 5 insertions(+)

    --- a/drivers/tty/serial/8250/8250_pci.c
    +++ b/drivers/tty/serial/8250/8250_pci.c
    @@ -1232,6 +1232,10 @@ static void pci_oxsemi_tornado_set_mctrl
    serial8250_do_set_mctrl(port, mctrl);
    }

    +/*
    + * We require EFR features for clock programming, so set UPF_FULL_PROBE
    + * for full probing regardless of CONFIG_SERIAL_8250_16550A_VARIANTS setting.
    + */
    static int pci_oxsemi_tornado_setup(struct serial_private *priv,
    const struct pciserial_board *board,
    struct uart_8250_port *up, int idx)
    @@ -1239,6 +1243,7 @@ static int pci_oxsemi_tornado_setup(stru
    struct pci_dev *dev = priv->dev;

    if (pci_oxsemi_tornado_p(dev)) {
    + up->port.flags |= UPF_FULL_PROBE;
    up->port.get_divisor = pci_oxsemi_tornado_get_divisor;
    up->port.set_divisor = pci_oxsemi_tornado_set_divisor;
    up->port.set_mctrl = pci_oxsemi_tornado_set_mctrl;

    \
     
     \ /
      Last update: 2022-10-19 10:48    [W:4.053 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site