>>>>> "Grant" == Grant Likely <[EMAIL PROTECTED]> writes:
Grant> From: Grant Likely <[EMAIL PROTECTED]> Grant> Signed-off-by: Grant Likely <[EMAIL PROTECTED]> Grant> Acked-by: John Williams <[EMAIL PROTECTED]> Huh? This seems a bit confused. Microblaze is big endian and out_be32 is only defined in arch/p{,ower}pc. This has been discussed before. The logical registers are 8bit, but the OPB implementation (by virtue of it being a 32bit bus) uses 32bit spacing between the registers. The fact is that the only portable access to non-pci registers in the kernel is 8 bit. The uartlite driver is ofcause primarily used to drive Xilinx OPB_Uartlite IP blocks, but that's not the only use - E.G. we are using another simple UART with the same hardware interface but sitting on a 16bit bus. With the current driver this works fine, but won't with the out_be32. For a new design wi'll use an AT91 (arm). I don't see any reason why we shouldn't be able to use the same UART block there. Grant> --- Grant> arch/ppc/syslib/virtex_devices.c | 2 +- Grant> drivers/serial/uartlite.c | 32 ++++++++++++++++---------------- Grant> 2 files changed, 17 insertions(+), 17 deletions(-) Grant> diff --git a/arch/ppc/syslib/virtex_devices.c b/arch/ppc/syslib/virtex_devices.c Grant> index ace4ec0..270ad3a 100644 Grant> --- a/arch/ppc/syslib/virtex_devices.c Grant> +++ b/arch/ppc/syslib/virtex_devices.c Grant> @@ -28,7 +28,7 @@ Grant> .num_resources = 2, \ Grant> .resource = (struct resource[]) { \ Grant> { \ Grant> - .start = XPAR_UARTLITE_##num##_BASEADDR + 3, \ Grant> + .start = XPAR_UARTLITE_##num##_BASEADDR, \ Grant> .end = XPAR_UARTLITE_##num##_HIGHADDR, \ Grant> .flags = IORESOURCE_MEM, \ Grant> }, \ Grant> diff --git a/drivers/serial/uartlite.c b/drivers/serial/uartlite.c Grant> index f5051cf..59b674a 100644 Grant> --- a/drivers/serial/uartlite.c Grant> +++ b/drivers/serial/uartlite.c Grant> @@ -61,7 +61,7 @@ static int ulite_receive(struct uart_port *port, int stat) Grant> /* stats */ Grant> if (stat & ULITE_STATUS_RXVALID) { port-> icount.rx++; Grant> - ch = readb(port->membase + ULITE_RX); Grant> + ch = in_be32((void*)port->membase + ULITE_RX); Grant> if (stat & ULITE_STATUS_PARITY) port-> icount.parity++; Grant> @@ -106,7 +106,7 @@ static int ulite_transmit(struct uart_port *port, int stat) Grant> return 0; Grant> if (port->x_char) { Grant> - writeb(port->x_char, port->membase + ULITE_TX); Grant> + out_be32((void*)port->membase + ULITE_TX, port->x_char); port-> x_char = 0; port-> icount.tx++; Grant> return 1; Grant> @@ -115,7 +115,7 @@ static int ulite_transmit(struct uart_port *port, int stat) Grant> if (uart_circ_empty(xmit) || uart_tx_stopped(port)) Grant> return 0; Grant> - writeb(xmit->buf[xmit->tail], port->membase + ULITE_TX); Grant> + out_be32((void*)port->membase + ULITE_TX, xmit->buf[xmit->tail]); xmit-> tail = (xmit->tail + 1) & (UART_XMIT_SIZE-1); port-> icount.tx++; Grant> @@ -132,7 +132,7 @@ static irqreturn_t ulite_isr(int irq, void *dev_id) Grant> int busy; Grant> do { Grant> - int stat = readb(port->membase + ULITE_STATUS); Grant> + int stat = in_be32((void*)port->membase + ULITE_STATUS); Grant> busy = ulite_receive(port, stat); Grant> busy |= ulite_transmit(port, stat); Grant> } while (busy); Grant> @@ -148,7 +148,7 @@ static unsigned int ulite_tx_empty(struct uart_port *port) Grant> unsigned int ret; Grant> spin_lock_irqsave(&port->lock, flags); Grant> - ret = readb(port->membase + ULITE_STATUS); Grant> + ret = in_be32((void*)port->membase + ULITE_STATUS); Grant> spin_unlock_irqrestore(&port->lock, flags); Grant> return ret & ULITE_STATUS_TXEMPTY ? TIOCSER_TEMT : 0; Grant> @@ -171,7 +171,7 @@ static void ulite_stop_tx(struct uart_port *port) Grant> static void ulite_start_tx(struct uart_port *port) Grant> { Grant> - ulite_transmit(port, readb(port->membase + ULITE_STATUS)); Grant> + ulite_transmit(port, in_be32((void*)port->membase + ULITE_STATUS)); Grant> } Grant> static void ulite_stop_rx(struct uart_port *port) Grant> @@ -200,17 +200,17 @@ static int ulite_startup(struct uart_port *port) Grant> if (ret) Grant> return ret; Grant> - writeb(ULITE_CONTROL_RST_RX | ULITE_CONTROL_RST_TX, Grant> - port->membase + ULITE_CONTROL); Grant> - writeb(ULITE_CONTROL_IE, port->membase + ULITE_CONTROL); Grant> + out_be32((void*)port->membase + ULITE_CONTROL, Grant> + ULITE_CONTROL_RST_RX | ULITE_CONTROL_RST_TX); Grant> + out_be32((void*)port->membase + ULITE_CONTROL, ULITE_CONTROL_IE); Grant> return 0; Grant> } Grant> static void ulite_shutdown(struct uart_port *port) Grant> { Grant> - writeb(0, port->membase + ULITE_CONTROL); Grant> - readb(port->membase + ULITE_CONTROL); /* dummy */ Grant> + out_be32((void*)port->membase + ULITE_CONTROL, 0); Grant> + in_be32((void*)port->membase + ULITE_CONTROL); /* dummy */ Grant> free_irq(port->irq, port); Grant> } Grant> @@ -314,7 +314,7 @@ static void ulite_console_wait_tx(struct uart_port *port) Grant> /* wait up to 10ms for the character(s) to be sent */ Grant> for (i = 0; i < 10000; i++) { Grant> - if (readb(port->membase + ULITE_STATUS) & ULITE_STATUS_TXEMPTY) Grant> + if (in_be32((void*)port->membase + ULITE_STATUS) & ULITE_STATUS_TXEMPTY) Grant> break; Grant> udelay(1); Grant> } Grant> @@ -323,7 +323,7 @@ static void ulite_console_wait_tx(struct uart_port *port) Grant> static void ulite_console_putchar(struct uart_port *port, int ch) Grant> { Grant> ulite_console_wait_tx(port); Grant> - writeb(ch, port->membase + ULITE_TX); Grant> + out_be32((void*)port->membase + ULITE_TX, ch); Grant> } Grant> static void ulite_console_write(struct console *co, const char *s, Grant> @@ -340,8 +340,8 @@ static void ulite_console_write(struct console *co, const char *s, Grant> spin_lock_irqsave(&port->lock, flags); Grant> /* save and disable interrupt */ Grant> - ier = readb(port->membase + ULITE_STATUS) & ULITE_STATUS_IE; Grant> - writeb(0, port->membase + ULITE_CONTROL); Grant> + ier = in_be32((void*)port->membase + ULITE_STATUS) & ULITE_STATUS_IE; Grant> + out_be32((void*)port->membase + ULITE_CONTROL, 0); Grant> uart_console_write(port, s, count, ulite_console_putchar); Grant> @@ -349,7 +349,7 @@ static void ulite_console_write(struct console *co, const char *s, Grant> /* restore interrupt state */ Grant> if (ier) Grant> - writeb(ULITE_CONTROL_IE, port->membase + ULITE_CONTROL); Grant> + out_be32((void*)port->membase + ULITE_CONTROL, ULITE_CONTROL_IE); Grant> if (locked) Grant> spin_unlock_irqrestore(&port->lock, flags); -- Bye, Peter Korsgaard _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev