[linux-yocto] [PATCH 79/87] powerpc/acpx1: make udbg do IO access in AS1

Paul Butler butler.paul at gmail.com
Mon May 27 09:56:50 PDT 2013


From: Kevin Hao <kexin.hao at windriver.com>

When using udbg on acpx1, we must be sure that all the IO accesses
are in AS1 because the tlb we create for early debug is set with AS1.
This is also compatible with other 4xx device.

Signed-off-by: Kevin Hao <kexin.hao at windriver.com>
---
 arch/powerpc/kernel/udbg_16550.c | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/arch/powerpc/kernel/udbg_16550.c b/arch/powerpc/kernel/udbg_16550.c
index c214a96..e7baf51 100644
--- a/arch/powerpc/kernel/udbg_16550.c
+++ b/arch/powerpc/kernel/udbg_16550.c
@@ -223,32 +223,34 @@ void udbg_init_pas_realmode(void)
 #include <asm/io.h>
 #include <asm/udbg.h>
 #include <linux/amba/serial.h>
+#include <platforms/44x/44x.h>
 
 static void *uart_base;
 
 static void
-acp_putc(char c)
+acp_putc_as1(char c)
 {
-	while (0 != (in_le32(uart_base + UART01x_FR) & UART01x_FR_TXFF))
+
+	while (0 != (as1_readb(uart_base + UART01x_FR) & UART01x_FR_TXFF))
 		;
 
 	if ('\n' == c) {
-		out_le32(uart_base + UART01x_DR, '\r');
-		while (0 != (in_le32(uart_base + UART01x_FR) & UART01x_FR_TXFF))
+		as1_writeb('\r', uart_base + UART01x_DR);
+		while (0 != (as1_readb(uart_base + UART01x_FR) & UART01x_FR_TXFF))
 			;
 	}
 
-	out_le32(uart_base + UART01x_DR, c);
+	as1_writeb(c, uart_base + UART01x_DR);
 
 	return;
 }
 
 static int
-acp_getc(void)
+acp_getc_as1(void)
 {
-	while (0 != (in_le32(uart_base + UART01x_FR) & UART01x_FR_RXFE))
+	while (0 != (as1_readb(uart_base + UART01x_FR) & UART01x_FR_RXFE))
 		;
-	return in_le32(uart_base + UART01x_DR);
+	return as1_readb(uart_base + UART01x_DR);
 }
 
 void __init
@@ -256,13 +258,13 @@ udbg_init_44x_as1(void)
 {
 	uart_base = (void *)0xf0004000;	/* 34xx UART0 address... */
 
-	if (0x11 != in_le32(uart_base + 0xfe0) ||
-	    0x10 != in_le32(uart_base + 0xfe4) ||
-	    0x24 != in_le32(uart_base + 0xfe8) ||
-	    0x00 != in_le32(uart_base + 0xfec))
+	if (0x11 != as1_readb(uart_base + 0xfe0) ||
+	    0x10 != as1_readb(uart_base + 0xfe4) ||
+	    0x24 != as1_readb(uart_base + 0xfe8) ||
+	    0x00 != as1_readb(uart_base + 0xfec))
 		uart_base = (void *)0xf0024000;	/* 25xx UART0 address... */
-	udbg_putc = acp_putc;
-	udbg_getc = acp_getc;
+	udbg_putc = acp_putc_as1;
+	udbg_getc = acp_getc_as1;
 
 	return;
 }
-- 
1.8.3




More information about the linux-yocto mailing list