>-----Original Message----- >From: linux-omap-owner@xxxxxxxxxxxxxxx [mailto:linux-omap-owner@xxxxxxxxxxxxxxx] On Behalf Of Tony >Lindgren >Sent: Friday, January 15, 2010 7:35 PM >To: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx >Cc: linux-omap@xxxxxxxxxxxxxxx >Subject: [PATCH 1/4] omap: Clean the serial port defines > >This way we don't have conflicts with the defines >with compiling in multiple omaps. Set the addresses >for uarts in struct omap_globals for the early serial >init code. Nice and much needed cleanup. > >Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx> <snip> >diff --git a/arch/arm/mach-omap1/serial.c b/arch/arm/mach-omap1/serial.c >index 6e5207c..349de90 100644 >--- a/arch/arm/mach-omap1/serial.c >+++ b/arch/arm/mach-omap1/serial.c >@@ -64,7 +64,7 @@ static void __init omap_serial_reset(struct plat_serial8250_port *p) > > static struct plat_serial8250_port serial_platform_data[] = { > { >- .mapbase = OMAP_UART1_BASE, >+ .mapbase = OMAP1_UART1_BASE, Is it possible to use the same approach as mach-omap2/ for physical address assignments? I like that approach. Refer this part from mach-omap2: + serial_platform_data0[0].mapbase = omap2_globals->uart1_phys; + serial_platform_data1[0].mapbase = omap2_globals->uart2_phys; + serial_platform_data2[0].mapbase = omap2_globals->uart3_phys; > .irq = INT_UART1, > .flags = UPF_BOOT_AUTOCONF, > .iotype = UPIO_MEM, <snip> >diff --git a/arch/arm/mach-omap2/include/mach/debug-macro.S b/arch/arm/mach-omap2/include/mach/debug- >macro.S >index e9f255d..0c96e1c 100644 >--- a/arch/arm/mach-omap2/include/mach/debug-macro.S >+++ b/arch/arm/mach-omap2/include/mach/debug-macro.S >@@ -11,6 +11,10 @@ > * > */ > >+#include <linux/serial_reg.h> >+ >+#include <plat/serial.h> >+ > .macro addruart,rx > mrc p15, 0, \rx, c1, c0 > tst \rx, #1 @ MMU enabled? >@@ -44,15 +48,10 @@ > .endm > > .macro busyuart,rd,rx >-1001: ldrb \rd, [\rx, #(0x5 << 2)] @ OMAP-1510 and friends >- and \rd, \rd, #0x60 >- teq \rd, #0x60 >- beq 1002f >- ldrb \rd, [\rx, #(0x5 << 0)] @ OMAP-730 only >- and \rd, \rd, #0x60 >- teq \rd, #0x60 >+1001: ldrb \rd, [\rx, #(UART_LSR << OMAP_PORT_SHIFT)] Zoom2/3 kind of boards have external debug Serial port. For those boards and maybe others, the shift value is 1 and not OMAP_PORT_SHIFT(2). This solution is not extensible to zoom2/3 boards with external debug board uarts. How do we address that? >+ and \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE) >+ teq \rd, #(UART_LSR_TEMT | UART_LSR_THRE) > bne 1001b >-1002: > .endm > > .macro waituart,rd,rx <snip> >diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c <snip> >@@ -269,11 +278,15 @@ static struct omap_globals omap343x_globals = { > .ctrl = OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE), > .prm = OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE), > .cm = OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE), >+ .uart1_phys = OMAP3_UART1_BASE, >+ .uart2_phys = OMAP3_UART2_BASE, >+ .uart3_phys = OMAP3_UART3_BASE, OMAP3630 also has 4 UARTS and this same global is getting used for both 34xx and 36xx. This is not right. For 3630 uart4_phys = 0x49042000 > }; > > void __init omap2_set_globals_343x(void) > { > __omap2_set_globals(&omap343x_globals); >+ omap2_set_globals_uart(&omap343x_globals); > } > #endif > >@@ -285,6 +298,10 @@ static struct omap_globals omap4_globals = { > .prm = OMAP2_L4_IO_ADDRESS(OMAP4430_PRM_BASE), > .cm = OMAP2_L4_IO_ADDRESS(OMAP4430_CM_BASE), > .cm2 = OMAP2_L4_IO_ADDRESS(OMAP4430_CM2_BASE), >+ .uart1_phys = OMAP4_UART1_BASE, >+ .uart2_phys = OMAP4_UART2_BASE, >+ .uart3_phys = OMAP4_UART3_BASE, >+ .uart4_phys = OMAP4_UART4_BASE, > }; > > void __init omap2_set_globals_443x(void) >@@ -292,6 +309,7 @@ void __init omap2_set_globals_443x(void) > omap2_set_globals_tap(&omap4_globals); > omap2_set_globals_control(&omap4_globals); > omap2_set_globals_prcm(&omap4_globals); >+ omap2_set_globals_uart(&omap4_globals); > } > #endif > >diff --git a/arch/arm/plat-omap/include/plat/common.h b/arch/arm/plat-omap/include/plat/common.h >index 32c2227..a8fa0d7 100644 >--- a/arch/arm/plat-omap/include/plat/common.h >+++ b/arch/arm/plat-omap/include/plat/common.h >@@ -47,6 +47,10 @@ struct omap_globals { > void __iomem *prm; /* Power and Reset Management */ > void __iomem *cm; /* Clock Management */ > void __iomem *cm2; >+ unsigned long uart1_phys; >+ unsigned long uart2_phys; >+ unsigned long uart3_phys; >+ unsigned long uart4_phys; > }; > > void omap2_set_globals_242x(void); >@@ -59,6 +63,7 @@ void omap2_set_globals_tap(struct omap_globals *); > void omap2_set_globals_sdrc(struct omap_globals *); > void omap2_set_globals_control(struct omap_globals *); > void omap2_set_globals_prcm(struct omap_globals *); >+void omap2_set_globals_uart(struct omap_globals *); > > /** > * omap_test_timeout - busy-loop, testing a condition >diff --git a/arch/arm/plat-omap/include/plat/serial.h b/arch/arm/plat-omap/include/plat/serial.h >index f5a4a92..c7e2b85 100644 >--- a/arch/arm/plat-omap/include/plat/serial.h >+++ b/arch/arm/plat-omap/include/plat/serial.h >@@ -15,37 +15,39 @@ > > #include <linux/init.h> > >-#if defined(CONFIG_ARCH_OMAP1) > /* OMAP1 serial ports */ >-#define OMAP_UART1_BASE 0xfffb0000 >-#define OMAP_UART2_BASE 0xfffb0800 >-#define OMAP_UART3_BASE 0xfffb9800 >-#elif defined(CONFIG_ARCH_OMAP2) >+#define OMAP1_UART1_BASE 0xfffb0000 >+#define OMAP1_UART2_BASE 0xfffb0800 >+#define OMAP1_UART3_BASE 0xfffb9800 >+ > /* OMAP2 serial ports */ >-#define OMAP_UART1_BASE 0x4806a000 >-#define OMAP_UART2_BASE 0x4806c000 >-#define OMAP_UART3_BASE 0x4806e000 >-#elif defined(CONFIG_ARCH_OMAP3) >+#define OMAP2_UART1_BASE 0x4806a000 >+#define OMAP2_UART2_BASE 0x4806c000 >+#define OMAP2_UART3_BASE 0x4806e000 >+ > /* OMAP3 serial ports */ >-#define OMAP_UART1_BASE 0x4806a000 >-#define OMAP_UART2_BASE 0x4806c000 >-#define OMAP_UART3_BASE 0x49020000 Need to add 0x4904 2000 for 3630 UART4 >-#elif defined(CONFIG_ARCH_OMAP4) >+#define OMAP3_UART1_BASE 0x4806a000 >+#define OMAP3_UART2_BASE 0x4806c000 >+#define OMAP3_UART3_BASE 0x49020000 >+ > /* OMAP4 serial ports */ >-#define OMAP_UART1_BASE 0x4806a000 >-#define OMAP_UART2_BASE 0x4806c000 >-#define OMAP_UART3_BASE 0x48020000 >-#define OMAP_UART4_BASE 0x4806e000 >-#endif >+#define OMAP4_UART1_BASE 0x4806a000 >+#define OMAP4_UART2_BASE 0x4806c000 >+#define OMAP4_UART3_BASE 0x48020000 >+#define OMAP4_UART4_BASE 0x4806e000 >+ >+#define OMAP_PORT_SHIFT 2 >+#define OMAP7XX_PORT_SHIFT 0 > > #define OMAP1510_BASE_BAUD (12000000/16) > #define OMAP16XX_BASE_BAUD (48000000/16) > #define OMAP24XX_BASE_BAUD (48000000/16) > >+/* This is only used by 8250.c for omap1510 */ > #define is_omap_port(pt) ({int __ret = 0; \ >- if ((pt)->port.mapbase == OMAP_UART1_BASE || \ >- (pt)->port.mapbase == OMAP_UART2_BASE || \ >- (pt)->port.mapbase == OMAP_UART3_BASE) \ >+ if ((pt)->port.mapbase == OMAP1_UART1_BASE || \ >+ (pt)->port.mapbase == OMAP1_UART2_BASE || \ >+ (pt)->port.mapbase == OMAP1_UART3_BASE) \ > __ret = 1; \ > __ret; \ > }) > >-- >To unsubscribe from this list: send the line "unsubscribe linux-omap" in >the body of a message to majordomo@xxxxxxxxxxxxxxx >More majordomo info at http://vger.kernel.org/majordomo-info.html ��.n��������+%������w��{.n�����{�������ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f