Commit e077b50c authored by Grant Likely's avatar Grant Likely Committed by Josh Boyer
Browse files

[POWERPC] Uartlite: Revert register io access changes



Reverts commit a15da8ef

This driver is used by devices other than the xilinx opb-uartlite which
depend on bytewise access to the registers.  The change to 32 bit access
does not work on these devices.

Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
Acked-by: default avatarPeter Korsgaard <jacmet@sunsite.dk>
Signed-off-by: default avatarJosh Boyer <jwboyer@linux.vnet.ibm.com>
parent be1b4d34
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -28,7 +28,7 @@
	.num_resources = 2, \
	.num_resources = 2, \
	.resource = (struct resource[]) { \
	.resource = (struct resource[]) { \
		{ \
		{ \
			.start = XPAR_UARTLITE_##num##_BASEADDR, \
			.start = XPAR_UARTLITE_##num##_BASEADDR + 3, \
			.end = XPAR_UARTLITE_##num##_HIGHADDR, \
			.end = XPAR_UARTLITE_##num##_HIGHADDR, \
			.flags = IORESOURCE_MEM, \
			.flags = IORESOURCE_MEM, \
		}, \
		}, \
+18 −18
Original line number Original line Diff line number Diff line
@@ -75,7 +75,7 @@ static int ulite_receive(struct uart_port *port, int stat)
	/* stats */
	/* stats */
	if (stat & ULITE_STATUS_RXVALID) {
	if (stat & ULITE_STATUS_RXVALID) {
		port->icount.rx++;
		port->icount.rx++;
		ch = in_be32((void*)port->membase + ULITE_RX);
		ch = readb(port->membase + ULITE_RX);


		if (stat & ULITE_STATUS_PARITY)
		if (stat & ULITE_STATUS_PARITY)
			port->icount.parity++;
			port->icount.parity++;
@@ -120,7 +120,7 @@ static int ulite_transmit(struct uart_port *port, int stat)
		return 0;
		return 0;


	if (port->x_char) {
	if (port->x_char) {
		out_be32((void*)port->membase + ULITE_TX, port->x_char);
		writeb(port->x_char, port->membase + ULITE_TX);
		port->x_char = 0;
		port->x_char = 0;
		port->icount.tx++;
		port->icount.tx++;
		return 1;
		return 1;
@@ -129,7 +129,7 @@ static int ulite_transmit(struct uart_port *port, int stat)
	if (uart_circ_empty(xmit) || uart_tx_stopped(port))
	if (uart_circ_empty(xmit) || uart_tx_stopped(port))
		return 0;
		return 0;


	out_be32((void*)port->membase + ULITE_TX, xmit->buf[xmit->tail]);
	writeb(xmit->buf[xmit->tail], port->membase + ULITE_TX);
	xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE-1);
	xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE-1);
	port->icount.tx++;
	port->icount.tx++;


@@ -146,7 +146,7 @@ static irqreturn_t ulite_isr(int irq, void *dev_id)
	int busy;
	int busy;


	do {
	do {
		int stat = in_be32((void*)port->membase + ULITE_STATUS);
		int stat = readb(port->membase + ULITE_STATUS);
		busy  = ulite_receive(port, stat);
		busy  = ulite_receive(port, stat);
		busy |= ulite_transmit(port, stat);
		busy |= ulite_transmit(port, stat);
	} while (busy);
	} while (busy);
@@ -162,7 +162,7 @@ static unsigned int ulite_tx_empty(struct uart_port *port)
	unsigned int ret;
	unsigned int ret;


	spin_lock_irqsave(&port->lock, flags);
	spin_lock_irqsave(&port->lock, flags);
	ret = in_be32((void*)port->membase + ULITE_STATUS);
	ret = readb(port->membase + ULITE_STATUS);
	spin_unlock_irqrestore(&port->lock, flags);
	spin_unlock_irqrestore(&port->lock, flags);


	return ret & ULITE_STATUS_TXEMPTY ? TIOCSER_TEMT : 0;
	return ret & ULITE_STATUS_TXEMPTY ? TIOCSER_TEMT : 0;
@@ -185,7 +185,7 @@ static void ulite_stop_tx(struct uart_port *port)


static void ulite_start_tx(struct uart_port *port)
static void ulite_start_tx(struct uart_port *port)
{
{
	ulite_transmit(port, in_be32((void*)port->membase + ULITE_STATUS));
	ulite_transmit(port, readb(port->membase + ULITE_STATUS));
}
}


static void ulite_stop_rx(struct uart_port *port)
static void ulite_stop_rx(struct uart_port *port)
@@ -214,17 +214,17 @@ static int ulite_startup(struct uart_port *port)
	if (ret)
	if (ret)
		return ret;
		return ret;


	out_be32((void*)port->membase + ULITE_CONTROL,
	writeb(ULITE_CONTROL_RST_RX | ULITE_CONTROL_RST_TX,
	         ULITE_CONTROL_RST_RX | ULITE_CONTROL_RST_TX);
	       port->membase + ULITE_CONTROL);
	out_be32((void*)port->membase + ULITE_CONTROL, ULITE_CONTROL_IE);
	writeb(ULITE_CONTROL_IE, port->membase + ULITE_CONTROL);


	return 0;
	return 0;
}
}


static void ulite_shutdown(struct uart_port *port)
static void ulite_shutdown(struct uart_port *port)
{
{
	out_be32((void*)port->membase + ULITE_CONTROL, 0);
	writeb(0, port->membase + ULITE_CONTROL);
	in_be32((void*)port->membase + ULITE_CONTROL); /* dummy */
	readb(port->membase + ULITE_CONTROL); /* dummy */
	free_irq(port->irq, port);
	free_irq(port->irq, port);
}
}


@@ -332,7 +332,7 @@ static void ulite_console_wait_tx(struct uart_port *port)


	/* wait up to 10ms for the character(s) to be sent */
	/* wait up to 10ms for the character(s) to be sent */
	for (i = 0; i < 10000; i++) {
	for (i = 0; i < 10000; i++) {
		if (in_be32((void*)port->membase + ULITE_STATUS) & ULITE_STATUS_TXEMPTY)
		if (readb(port->membase + ULITE_STATUS) & ULITE_STATUS_TXEMPTY)
			break;
			break;
		udelay(1);
		udelay(1);
	}
	}
@@ -341,7 +341,7 @@ static void ulite_console_wait_tx(struct uart_port *port)
static void ulite_console_putchar(struct uart_port *port, int ch)
static void ulite_console_putchar(struct uart_port *port, int ch)
{
{
	ulite_console_wait_tx(port);
	ulite_console_wait_tx(port);
	out_be32((void*)port->membase + ULITE_TX, ch);
	writeb(ch, port->membase + ULITE_TX);
}
}


static void ulite_console_write(struct console *co, const char *s,
static void ulite_console_write(struct console *co, const char *s,
@@ -358,8 +358,8 @@ static void ulite_console_write(struct console *co, const char *s,
		spin_lock_irqsave(&port->lock, flags);
		spin_lock_irqsave(&port->lock, flags);


	/* save and disable interrupt */
	/* save and disable interrupt */
	ier = in_be32((void*)port->membase + ULITE_STATUS) & ULITE_STATUS_IE;
	ier = readb(port->membase + ULITE_STATUS) & ULITE_STATUS_IE;
	out_be32((void*)port->membase + ULITE_CONTROL, 0);
	writeb(0, port->membase + ULITE_CONTROL);


	uart_console_write(port, s, count, ulite_console_putchar);
	uart_console_write(port, s, count, ulite_console_putchar);


@@ -367,7 +367,7 @@ static void ulite_console_write(struct console *co, const char *s,


	/* restore interrupt state */
	/* restore interrupt state */
	if (ier)
	if (ier)
		out_be32((void*)port->membase + ULITE_CONTROL, ULITE_CONTROL_IE);
		writeb(ULITE_CONTROL_IE, port->membase + ULITE_CONTROL);


	if (locked)
	if (locked)
		spin_unlock_irqrestore(&port->lock, flags);
		spin_unlock_irqrestore(&port->lock, flags);
@@ -598,7 +598,7 @@ ulite_of_probe(struct of_device *op, const struct of_device_id *match)


	rc = of_address_to_resource(op->node, 0, &res);
	rc = of_address_to_resource(op->node, 0, &res);
	if (rc) {
	if (rc) {
		dev_err(&op->dev, "invalide address\n");
		dev_err(&op->dev, "invalid address\n");
		return rc;
		return rc;
	}
	}


@@ -606,7 +606,7 @@ ulite_of_probe(struct of_device *op, const struct of_device_id *match)


	id = of_get_property(op->node, "port-number", NULL);
	id = of_get_property(op->node, "port-number", NULL);


	return ulite_assign(&op->dev, id ? *id : -1, res.start, irq);
	return ulite_assign(&op->dev, id ? *id : -1, res.start+3, irq);
}
}


static int __devexit ulite_of_remove(struct of_device *op)
static int __devexit ulite_of_remove(struct of_device *op)