aboutsummaryrefslogtreecommitdiffstats
path: root/meta/packages/linux/linux-omap3-pm-git/zoom2/0001-OMAP1-2-3-4-DEBUG_LL-cleanup.patch
blob: e1e216c915df90bd2a2c5dcf6a1a9f18ac676e64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
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