[PATCH 1/4] omap: Clean the serial port defines
Pandita, Vikram
vikram.pandita at ti.com
Mon Jan 18 19:39:09 EST 2010
>-----Original Message-----
>From: linux-omap-owner at vger.kernel.org [mailto:linux-omap-owner at vger.kernel.org] On Behalf Of Tony
>Lindgren
>Sent: Friday, January 15, 2010 7:35 PM
>To: linux-arm-kernel at lists.infradead.org
>Cc: linux-omap at vger.kernel.org
>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 at atomide.com>
<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 at vger.kernel.org
>More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the linux-arm-kernel
mailing list