On Thu, 15 Feb 2024, Andy Shevchenko wrote: > We are not supposed to spread quirks in 8250_port module especially > when we have a separate driver for the hardware in question. > > Move quirk from generic module to the driver that uses it. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > --- > v2: added missing bits.h, reworked error handling in a switch-case > drivers/tty/serial/8250/8250_of.c | 44 +++++++++++++++++++++++++++-- > drivers/tty/serial/8250/8250_port.c | 24 ---------------- > 2 files changed, 42 insertions(+), 26 deletions(-) > > diff --git a/drivers/tty/serial/8250/8250_of.c b/drivers/tty/serial/8250/8250_of.c > index 34f17a9785e7..9dcc17e33269 100644 > --- a/drivers/tty/serial/8250/8250_of.c > +++ b/drivers/tty/serial/8250/8250_of.c > @@ -4,7 +4,10 @@ > * > * Copyright (C) 2006 Arnd Bergmann <arnd@xxxxxxxx>, IBM Corp. > */ > + > +#include <linux/bits.h> > #include <linux/console.h> > +#include <linux/math.h> > #include <linux/module.h> > #include <linux/slab.h> > #include <linux/serial_core.h> > @@ -25,6 +28,36 @@ struct of_serial_info { > int line; > }; > > +/* Nuvoton NPCM timeout register */ > +#define UART_NPCM_TOR 7 > +#define UART_NPCM_TOIE BIT(7) /* Timeout Interrupt Enable */ > + > +static int npcm_startup(struct uart_port *port) > +{ > + /* > + * Nuvoton calls the scratch register 'UART_TOR' (timeout > + * register). Enable it, and set TIOC (timeout interrupt > + * comparator) to be 0x20 for correct operation. > + */ > + serial_port_out(port, UART_NPCM_TOR, UART_NPCM_TOIE | 0x20); > + > + return serial8250_do_startup(port); I know this matches how it is currently done but I wonder if TOIE should not be enabled until ->setup_irq() has been called. -- i.