serial: 8250: Add dl_read/write, bugs and mapsize into plat_serial8250_port
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Thu, 11 May 2023 12:10:26 +0000 (15:10 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 13 May 2023 10:47:26 +0000 (19:47 +0900)
Add mapsize, bugs, and divisor latch read/write functions
(->dl_read/write()) into plat_serial8250_port to carry the setup
necessary for RT288x/Au1xxx devices over to uart port.

Document the added members with kerneldoc style but do not enable
kerneldoc yet as there are many fields which remain undocumented.

While at it, convert .bugs in struct uart_8250_port to u16 to match it
with the type used in struct plat_serial8250_port.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20230511121029.13128-4-ilpo.jarvinen@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_core.c
include/linux/serial_8250.h

index 560a3592ec05633fb7f6194843019d2dad1fe6f3..4434c3256a9281def960df6a953b854249b17e5c 100644 (file)
@@ -850,12 +850,16 @@ static int serial8250_probe(struct platform_device *dev)
                uart.port.iotype        = p->iotype;
                uart.port.flags         = p->flags;
                uart.port.mapbase       = p->mapbase;
+               uart.port.mapsize       = p->mapsize;
                uart.port.hub6          = p->hub6;
                uart.port.has_sysrq     = p->has_sysrq;
                uart.port.private_data  = p->private_data;
                uart.port.type          = p->type;
+               uart.bugs               = p->bugs;
                uart.port.serial_in     = p->serial_in;
                uart.port.serial_out    = p->serial_out;
+               uart.dl_read            = p->dl_read;
+               uart.dl_write           = p->dl_write;
                uart.port.handle_irq    = p->handle_irq;
                uart.port.handle_break  = p->handle_break;
                uart.port.set_termios   = p->set_termios;
index d64e7bbe1f2f1c0426cee8164cf5adc518afedeb..42fc8f64f48edb4e3d9ccafa98330e9e183282f4 100644 (file)
 #include <linux/serial_reg.h>
 #include <linux/platform_device.h>
 
+struct uart_8250_port;
+
 /*
  * This is the platform device platform_data structure
+ *
+ * @mapsize:   Port size for ioremap()
+ * @bugs:      Port bugs
+ *
+ * @dl_read: ``u32 ()(struct uart_8250_port *up)``
+ *
+ *     UART divisor latch read.
+ *
+ * @dl_write: ``void ()(struct uart_8250_port *up, u32 value)``
+ *
+ *     Write @value into UART divisor latch.
+ *
+ *     Locking: Caller holds port's lock.
  */
 struct plat_serial8250_port {
        unsigned long   iobase;         /* io base address */
        void __iomem    *membase;       /* ioremap cookie or NULL */
        resource_size_t mapbase;        /* resource base */
+       resource_size_t mapsize;
        unsigned int    uartclk;        /* UART clock rate */
        unsigned int    irq;            /* interrupt number */
        unsigned long   irqflags;       /* request_irq flags */
@@ -28,8 +44,11 @@ struct plat_serial8250_port {
        unsigned char   has_sysrq;      /* supports magic SysRq */
        unsigned int    type;           /* If UPF_FIXED_TYPE */
        upf_t           flags;          /* UPF_* flags */
+       u16             bugs;           /* port bugs */
        unsigned int    (*serial_in)(struct uart_port *, int);
        void            (*serial_out)(struct uart_port *, int, int);
+       u32             (*dl_read)(struct uart_8250_port *up);
+       void            (*dl_write)(struct uart_8250_port *up, u32 value);
        void            (*set_termios)(struct uart_port *,
                                       struct ktermios *new,
                                       const struct ktermios *old);
@@ -106,7 +125,7 @@ struct uart_8250_port {
        struct timer_list       timer;          /* "no irq" timer */
        struct list_head        list;           /* ports on this IRQ */
        u32                     capabilities;   /* port capabilities */
-       unsigned short          bugs;           /* port bugs */
+       u16                     bugs;           /* port bugs */
        bool                    fifo_bug;       /* min RX trigger if enabled */
        unsigned int            tx_loadsz;      /* transmit fifo load size */
        unsigned char           acr;