On Wed, Apr 13, 2022 at 09:51:34AM +0200, Miquel Raynal wrote: > This offset is a good candidate to pdata's because it changes depending > on the vendor implementation. Let's move the usr_reg entry from regular > to pdata. This way we can drop initializing it at run time. > > Let's also use a define for it instead of defining only the default > value. Yep, thanks! Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > Suggested-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > Signed-off-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx> > --- > drivers/tty/serial/8250/8250_dw.c | 11 ++++++++--- > drivers/tty/serial/8250/8250_dwlib.h | 2 +- > 2 files changed, 9 insertions(+), 4 deletions(-) > > diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c > index 93b112f3bc49..babf5dc597a8 100644 > --- a/drivers/tty/serial/8250/8250_dw.c > +++ b/drivers/tty/serial/8250/8250_dw.c > @@ -35,6 +35,8 @@ > /* Offsets for the DesignWare specific registers */ > #define DW_UART_USR 0x1f /* UART Status Register */ > > +#define OCTEON_UART_USR 0x27 /* UART Status Register */ > + > /* DesignWare specific register fields */ > #define DW_UART_MCR_SIRE BIT(6) > > @@ -251,7 +253,7 @@ static int dw8250_handle_irq(struct uart_port *p) > > if ((iir & UART_IIR_BUSY) == UART_IIR_BUSY) { > /* Clear the USR */ > - (void)p->serial_in(p, d->usr_reg); > + (void)p->serial_in(p, d->pdata->usr_reg); > > return 1; > } > @@ -387,7 +389,6 @@ static void dw8250_quirks(struct uart_port *p, struct dw8250_data *data) > p->serial_out = dw8250_serial_outq; > p->flags = UPF_SKIP_TEST | UPF_SHARE_IRQ | UPF_FIXED_TYPE; > p->type = PORT_OCTEON; > - data->usr_reg = 0x27; > data->skip_autocfg = true; > } > #endif > @@ -462,7 +463,6 @@ static int dw8250_probe(struct platform_device *pdev) > return -ENOMEM; > > data->data.dma.fn = dw8250_fallback_dma_filter; > - data->usr_reg = DW_UART_USR; > data->pdata = device_get_match_data(p->dev); > p->private_data = &data->data; > > @@ -681,20 +681,25 @@ static const struct dev_pm_ops dw8250_pm_ops = { > }; > > static const struct dw8250_platform_data dw8250_dw_apb = { > + .usr_reg = DW_UART_USR, > }; > > static const struct dw8250_platform_data dw8250_octeon_3860_data = { > + .usr_reg = OCTEON_UART_USR, > .quirks = DW_UART_QUIRK_OCTEON, > }; > > static const struct dw8250_platform_data dw8250_armada_38x_data = { > + .usr_reg = DW_UART_USR, > .quirks = DW_UART_QUIRK_ARMADA_38X, > }; > > static const struct dw8250_platform_data dw8250_renesas_rzn1_data = { > + .usr_reg = DW_UART_USR, > }; > > static const struct dw8250_platform_data dw8250_starfive_jh7100_data = { > + .usr_reg = DW_UART_USR, > .quirks = DW_UART_QUIRK_SKIP_SET_RATE, > }; > > diff --git a/drivers/tty/serial/8250/8250_dwlib.h b/drivers/tty/serial/8250/8250_dwlib.h > index 68bb81bee660..0df6baa6eaee 100644 > --- a/drivers/tty/serial/8250/8250_dwlib.h > +++ b/drivers/tty/serial/8250/8250_dwlib.h > @@ -22,6 +22,7 @@ struct dw8250_port_data { > }; > > struct dw8250_platform_data { > + u8 usr_reg; > unsigned int quirks; > }; > > @@ -29,7 +30,6 @@ struct dw8250_data { > struct dw8250_port_data data; > const struct dw8250_platform_data *pdata; > > - u8 usr_reg; > int msr_mask_on; > int msr_mask_off; > struct clk *clk; > -- > 2.27.0 > -- With Best Regards, Andy Shevchenko