218 lines
7.2 KiB
Diff
218 lines
7.2 KiB
Diff
From 51f967864f0e30225c8a8e50e0bbaf92258c0032 Mon Sep 17 00:00:00 2001
|
|
From: Vikram Pandita <vikram.pandita@ti.com>
|
|
Date: Thu, 20 Aug 2009 16:13:20 -0500
|
|
Subject: [PATCH 1/5] OMAP1/2/3/4: DEBUG_LL: cleanup
|
|
|
|
This patch cleans up the DEBUG_LL infrastructure for omap boards.
|
|
|
|
The three stages of log printing infrastructure is using their own #defines
|
|
The patch integrates the three stages to use the same variable.
|
|
|
|
Three stages are:
|
|
Stage 1: Prints - Uncompressing Linux......
|
|
File getting used: arch/arm/plat-omap/include/mach/uncompress.h
|
|
Stage 2: Prints - <5>Linux version 2.6.31
|
|
File getting used: arch/arm/plat-omap/include/mach/debug-macro.S
|
|
Stage 3: Kernel ttyS console takes over
|
|
|
|
On enabling the DEBUG_LL menuconfig item
|
|
[Kernel Hacking -> Kernel low-level debugging functions]
|
|
|
|
the following entry gets auto selected
|
|
[Systerm Type -> TI OMAP Implementations -> Low-level Debug console UART]
|
|
|
|
This is the physical address of the UART getting used for the board.
|
|
The physical address of debug uart is provided as a menuconfig option now.
|
|
|
|
Issue with current system:
|
|
(a) Zoom2 board has a detachable debug board having the TL16CP754 Quad uart chip.
|
|
If the debug board is not attached, _NO_ debug uart is available.
|
|
OMAP internal uarts are not used for traces on zoom2 board.
|
|
Current framework does not account for boards that may not have a debug uart
|
|
at all. The Stage 1 always accesses one of the uarts. Thats fixed now.
|
|
|
|
(b) this patch does a cleanup of arch/arm/plat-omap/include/mach/debug-macro.S
|
|
|
|
Signed-off-by: Vikram Pandita <vikram.pandita@ti.com>
|
|
---
|
|
arch/arm/plat-omap/Kconfig | 50 ++++++++++++++++++-------
|
|
arch/arm/plat-omap/include/mach/common.h | 7 +++
|
|
arch/arm/plat-omap/include/mach/debug-macro.S | 40 ++++----------------
|
|
arch/arm/plat-omap/include/mach/uncompress.h | 12 +----
|
|
4 files changed, 54 insertions(+), 55 deletions(-)
|
|
|
|
diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig
|
|
index ab9f9ef..2fefb64 100644
|
|
--- a/arch/arm/plat-omap/Kconfig
|
|
+++ b/arch/arm/plat-omap/Kconfig
|
|
@@ -162,21 +162,43 @@ config OMAP_DM_TIMER
|
|
help
|
|
Select this option if you want to use OMAP Dual-Mode timers.
|
|
|
|
-choice
|
|
- prompt "Low-level debug console UART"
|
|
- depends on ARCH_OMAP
|
|
- default OMAP_LL_DEBUG_UART1
|
|
-
|
|
-config OMAP_LL_DEBUG_UART1
|
|
- bool "UART1"
|
|
-
|
|
-config OMAP_LL_DEBUG_UART2
|
|
- bool "UART2"
|
|
|
|
-config OMAP_LL_DEBUG_UART3
|
|
- bool "UART3"
|
|
-
|
|
-endchoice
|
|
+config OMAP_DEBUG_LL_UART_PHY_ADDR
|
|
+ hex "Low-level debug console UART Physical Address"
|
|
+ depends on ARCH_OMAP && DEBUG_LL
|
|
+
|
|
+ default "0xfffb0800" if ARCH_OMAP1 && (MACH_OMAP_PALMTT || MACH_SX1)
|
|
+ default "0xfffb0000" if ARCH_OMAP1
|
|
+ default "0x4806e000" if ARCH_OMAP2 && MACH_NOKIA_N8X0
|
|
+ default "0x4806a000" if ARCH_OMAP2
|
|
+ default "0x49020000" if ARCH_OMAP3 && (MACH_NOKIA_RX51 || MACH_OMAP_BEAGLE)
|
|
+ default "0x49020000" if ARCH_OMAP3 && (MACH_OMAP3_PANDORA || MACH_OMAP_LDP || MACH_OVERO)
|
|
+ default "0x10000000" if ARCH_OMAP3 && MACH_OMAP_ZOOM2
|
|
+ default "0x4806a000" if ARCH_OMAP3
|
|
+ default "0x4806a000" if ARCH_OMAP4
|
|
+ help
|
|
+ Specify the Physical address of Low level debug UART
|
|
+ Specify 0x0 in case you do not want DEBUG_LL functions to iterfere with your board uarts
|
|
+
|
|
+ OMAP1:
|
|
+ -------------------
|
|
+ UART1 -> 0xfffb0000 (default)
|
|
+ UART2 -> 0xfffb0800
|
|
+ UART3 -> 0xfffb9800 (sx1, palmtt)
|
|
+
|
|
+ OMAP2:
|
|
+ -------------------
|
|
+ UART1 -> 0x4806a000 (default)
|
|
+ UART2 -> 0x4806c000
|
|
+ UART3 -> 0x4806e000 (N8X0)
|
|
+
|
|
+ OMAP3/4:
|
|
+ -------------------
|
|
+ UART1 -> 0x4806a000 (default: except following)
|
|
+ UART2 -> 0x4806c000
|
|
+ UART3 -> 0x49020000 (rx51, beagle, pendora, ldp, overo)
|
|
+ UART4 -> 0x4806e000
|
|
+ UART_EXT -> 0x10000000 (zoom2: Debug uart is on external debug board)
|
|
|
|
config OMAP_SERIAL_WAKE
|
|
bool "Enable wake-up events for serial ports"
|
|
diff --git a/arch/arm/plat-omap/include/mach/common.h b/arch/arm/plat-omap/include/mach/common.h
|
|
index fdeab42..f29d31f 100644
|
|
--- a/arch/arm/plat-omap/include/mach/common.h
|
|
+++ b/arch/arm/plat-omap/include/mach/common.h
|
|
@@ -68,4 +68,11 @@ void omap2_set_globals_sdrc(struct omap_globals *);
|
|
void omap2_set_globals_control(struct omap_globals *);
|
|
void omap2_set_globals_prcm(struct omap_globals *);
|
|
|
|
+/* In case Low Level debug is not defined
|
|
+ * make the low level uart address as zero
|
|
+ */
|
|
+#if !defined(CONFIG_DEBUG_LL)
|
|
+#define CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR 0
|
|
+#endif
|
|
+
|
|
#endif /* __ARCH_ARM_MACH_OMAP_COMMON_H */
|
|
diff --git a/arch/arm/plat-omap/include/mach/debug-macro.S b/arch/arm/plat-omap/include/mach/debug-macro.S
|
|
index ac24050..f546d6c 100644
|
|
--- a/arch/arm/plat-omap/include/mach/debug-macro.S
|
|
+++ b/arch/arm/plat-omap/include/mach/debug-macro.S
|
|
@@ -10,43 +10,19 @@
|
|
* published by the Free Software Foundation.
|
|
*
|
|
*/
|
|
+#include "io.h"
|
|
|
|
.macro addruart,rx
|
|
mrc p15, 0, \rx, c1, c0
|
|
tst \rx, #1 @ MMU enabled?
|
|
#ifdef CONFIG_ARCH_OMAP1
|
|
- moveq \rx, #0xff000000 @ physical base address
|
|
- movne \rx, #0xfe000000 @ virtual base
|
|
- orr \rx, \rx, #0x00fb0000
|
|
-#ifdef CONFIG_OMAP_LL_DEBUG_UART3
|
|
- orr \rx, \rx, #0x00009000 @ UART 3
|
|
-#endif
|
|
-#if defined(CONFIG_OMAP_LL_DEBUG_UART2) || defined(CONFIG_OMAP_LL_DEBUG_UART3)
|
|
- orr \rx, \rx, #0x00000800 @ UART 2 & 3
|
|
-#endif
|
|
-
|
|
-#elif CONFIG_ARCH_OMAP2
|
|
- moveq \rx, #0x48000000 @ physical base address
|
|
- movne \rx, #0xd8000000 @ virtual base
|
|
- orr \rx, \rx, #0x0006a000
|
|
-#ifdef CONFIG_OMAP_LL_DEBUG_UART2
|
|
- add \rx, \rx, #0x00002000 @ UART 2
|
|
-#endif
|
|
-#ifdef CONFIG_OMAP_LL_DEBUG_UART3
|
|
- add \rx, \rx, #0x00004000 @ UART 3
|
|
-#endif
|
|
-
|
|
-#elif defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)
|
|
- moveq \rx, #0x48000000 @ physical base address
|
|
- movne \rx, #0xd8000000 @ virtual base
|
|
- orr \rx, \rx, #0x0006a000
|
|
-#ifdef CONFIG_OMAP_LL_DEBUG_UART2
|
|
- add \rx, \rx, #0x00002000 @ UART 2
|
|
-#endif
|
|
-#ifdef CONFIG_OMAP_LL_DEBUG_UART3
|
|
- add \rx, \rx, #0x00fb0000 @ UART 3
|
|
- add \rx, \rx, #0x00006000
|
|
-#endif
|
|
+ /* omap1 */
|
|
+ ldr \rx, =CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR @ physical base address
|
|
+ subne \rx, #CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR, #OMAP1_IO_OFFSET @ virtual base
|
|
+#else
|
|
+ /* omap2/omap3/omap4 */
|
|
+ ldr \rx, =CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR @ physical base address
|
|
+ orrne \rx, \rx, #OMAP2_IO_OFFSET @ virtual base
|
|
#endif
|
|
.endm
|
|
|
|
diff --git a/arch/arm/plat-omap/include/mach/uncompress.h b/arch/arm/plat-omap/include/mach/uncompress.h
|
|
index 0814c5f..0e21eb3 100644
|
|
--- a/arch/arm/plat-omap/include/mach/uncompress.h
|
|
+++ b/arch/arm/plat-omap/include/mach/uncompress.h
|
|
@@ -38,14 +38,8 @@ static void putc(int c)
|
|
return;
|
|
#endif
|
|
|
|
-#ifdef CONFIG_ARCH_OMAP
|
|
-#ifdef CONFIG_OMAP_LL_DEBUG_UART3
|
|
- uart = (volatile u8 *)(OMAP_UART3_BASE);
|
|
-#elif defined(CONFIG_OMAP_LL_DEBUG_UART2)
|
|
- uart = (volatile u8 *)(OMAP_UART2_BASE);
|
|
-#else
|
|
- uart = (volatile u8 *)(OMAP_UART1_BASE);
|
|
-#endif
|
|
+#if defined(CONFIG_DEBUG_LL)
|
|
+ uart = (volatile u8 *)(CONFIG_OMAP_DEBUG_LL_UART_PHY_ADDR);
|
|
|
|
#ifdef CONFIG_ARCH_OMAP1
|
|
/* Determine which serial port to use */
|
|
@@ -62,7 +56,6 @@ static void putc(int c)
|
|
return;
|
|
} while (0);
|
|
#endif /* CONFIG_ARCH_OMAP1 */
|
|
-#endif
|
|
|
|
/*
|
|
* Now, xmit each character
|
|
@@ -70,6 +63,7 @@ static void putc(int c)
|
|
while (!(uart[UART_LSR << shift] & UART_LSR_THRE))
|
|
barrier();
|
|
uart[UART_TX << shift] = c;
|
|
+#endif /* CONFIG_DEBUG_LL */
|
|
}
|
|
|
|
static inline void flush(void)
|
|
--
|
|
1.6.3.2
|
|
|