From: Deepak Saxena UARTS on several Intel IXP2000 systems are connected in such a way that they can only be addressed using full word accesses instead of bytes. Following patch adds a UPIO_MEM32 io-type to identify these UARTs. Signed-off-by: Deepak Saxena Signed-off-by: Andrew Morton --- 25-akpm/drivers/serial/8250.c | 7 +++++++ 25-akpm/drivers/serial/serial_core.c | 1 + 25-akpm/include/linux/serial_core.h | 1 + 3 files changed, 9 insertions(+) diff -puN drivers/serial/8250.c~add-support-for-word-length-uart-registers drivers/serial/8250.c --- 25/drivers/serial/8250.c~add-support-for-word-length-uart-registers 2004-09-11 15:59:52.178263016 -0700 +++ 25-akpm/drivers/serial/8250.c 2004-09-11 15:59:52.198259976 -0700 @@ -188,6 +188,9 @@ static _INLINE_ unsigned int serial_in(s case UPIO_MEM: return readb(up->port.membase + offset); + case UPIO_MEM32: + return readl(up->port.membase + offset); + default: return inb(up->port.iobase + offset); } @@ -208,6 +211,10 @@ serial_out(struct uart_8250_port *up, in writeb(value, up->port.membase + offset); break; + case UPIO_MEM32: + writel(value, up->port.membase + offset); + break; + default: outb(value, up->port.iobase + offset); } diff -puN drivers/serial/serial_core.c~add-support-for-word-length-uart-registers drivers/serial/serial_core.c --- 25/drivers/serial/serial_core.c~add-support-for-word-length-uart-registers 2004-09-11 15:59:52.180262712 -0700 +++ 25-akpm/drivers/serial/serial_core.c 2004-09-11 15:59:52.200259672 -0700 @@ -1978,6 +1978,7 @@ uart_report_port(struct uart_driver *drv printk("I/O 0x%x offset 0x%x", port->iobase, port->hub6); break; case UPIO_MEM: + case UPIO_MEM32: printk("MMIO 0x%lx", port->mapbase); break; } diff -puN include/linux/serial_core.h~add-support-for-word-length-uart-registers include/linux/serial_core.h --- 25/include/linux/serial_core.h~add-support-for-word-length-uart-registers 2004-09-11 15:59:52.181262560 -0700 +++ 25-akpm/include/linux/serial_core.h 2004-09-11 15:59:52.201259520 -0700 @@ -178,6 +178,7 @@ struct uart_port { #define UPIO_PORT (0) #define UPIO_HUB6 (1) #define UPIO_MEM (2) +#define UPIO_MEM32 (3) unsigned int read_status_mask; /* driver specific */ unsigned int ignore_status_mask; /* driver specific */ _