]>
Commit | Line | Data |
---|---|---|
1da177e4 | 1 | /* |
a09e64fb | 2 | * arch/arm/plat-omap/include/mach/uncompress.h |
1da177e4 LT |
3 | * |
4 | * Serial port stubs for kernel decompress status messages | |
5 | * | |
6 | * Initially based on: | |
a09e64fb | 7 | * linux-2.4.15-rmk1-dsplinux1.6/arch/arm/plat-omap/include/mach1510/uncompress.h |
1da177e4 LT |
8 | * Copyright (C) 2000 RidgeRun, Inc. |
9 | * Author: Greg Lonnon <glonnon@ridgerun.com> | |
10 | * | |
11 | * Rewritten by: | |
12 | * Author: <source@mvista.com> | |
13 | * 2004 (c) MontaVista Software, Inc. | |
14 | * | |
15 | * This file is licensed under the terms of the GNU General Public License | |
16 | * version 2. This program is licensed "as is" without any warranty of any | |
17 | * kind, whether express or implied. | |
18 | */ | |
19 | ||
1da177e4 LT |
20 | #include <linux/types.h> |
21 | #include <linux/serial_reg.h> | |
0c8219f0 | 22 | |
96554d70 | 23 | #include <asm/memory.h> |
0c8219f0 TL |
24 | #include <asm/mach-types.h> |
25 | ||
ce491cf8 | 26 | #include <plat/serial.h> |
1da177e4 | 27 | |
35ddf7c0 TL |
28 | #define MDR1_MODE_MASK 0x07 |
29 | ||
0c8219f0 TL |
30 | static volatile u8 *uart_base; |
31 | static int uart_shift; | |
1da177e4 | 32 | |
0c8219f0 | 33 | /* |
96554d70 | 34 | * Store the DEBUG_LL uart number into memory. |
0c8219f0 | 35 | * See also debug-macro.S, and serial.c for related code. |
0c8219f0 | 36 | */ |
96554d70 | 37 | static void set_omap_uart_info(unsigned char port) |
1da177e4 | 38 | { |
96554d70 | 39 | *(volatile u32 *)OMAP_UART_INFO = port; |
0c8219f0 | 40 | } |
1da177e4 | 41 | |
0c8219f0 TL |
42 | static void putc(int c) |
43 | { | |
44 | if (!uart_base) | |
1da177e4 | 45 | return; |
1da177e4 | 46 | |
35ddf7c0 TL |
47 | /* Check for UART 16x mode */ |
48 | if ((uart_base[UART_OMAP_MDR1 << uart_shift] & MDR1_MODE_MASK) != 0) | |
49 | return; | |
50 | ||
0c8219f0 | 51 | while (!(uart_base[UART_LSR << uart_shift] & UART_LSR_THRE)) |
a081568d | 52 | barrier(); |
0c8219f0 | 53 | uart_base[UART_TX << uart_shift] = c; |
a081568d RK |
54 | } |
55 | ||
56 | static inline void flush(void) | |
57 | { | |
1da177e4 LT |
58 | } |
59 | ||
0c8219f0 TL |
60 | /* |
61 | * Macros to configure UART1 and debug UART | |
62 | */ | |
96554d70 | 63 | #define _DEBUG_LL_ENTRY(mach, dbg_uart, dbg_shft, dbg_id) \ |
0c8219f0 | 64 | if (machine_is_##mach()) { \ |
0c8219f0 TL |
65 | uart_base = (volatile u8 *)(dbg_uart); \ |
66 | uart_shift = (dbg_shft); \ | |
67 | port = (dbg_id); \ | |
96554d70 | 68 | set_omap_uart_info(port); \ |
0c8219f0 TL |
69 | break; \ |
70 | } | |
71 | ||
72 | #define DEBUG_LL_OMAP7XX(p, mach) \ | |
96554d70 TL |
73 | _DEBUG_LL_ENTRY(mach, OMAP1_UART##p##_BASE, OMAP7XX_PORT_SHIFT, \ |
74 | OMAP1UART##p) | |
0c8219f0 TL |
75 | |
76 | #define DEBUG_LL_OMAP1(p, mach) \ | |
96554d70 TL |
77 | _DEBUG_LL_ENTRY(mach, OMAP1_UART##p##_BASE, OMAP_PORT_SHIFT, \ |
78 | OMAP1UART##p) | |
0c8219f0 TL |
79 | |
80 | #define DEBUG_LL_OMAP2(p, mach) \ | |
96554d70 TL |
81 | _DEBUG_LL_ENTRY(mach, OMAP2_UART##p##_BASE, OMAP_PORT_SHIFT, \ |
82 | OMAP2UART##p) | |
0c8219f0 TL |
83 | |
84 | #define DEBUG_LL_OMAP3(p, mach) \ | |
96554d70 TL |
85 | _DEBUG_LL_ENTRY(mach, OMAP3_UART##p##_BASE, OMAP_PORT_SHIFT, \ |
86 | OMAP3UART##p) | |
0c8219f0 TL |
87 | |
88 | #define DEBUG_LL_OMAP4(p, mach) \ | |
96554d70 TL |
89 | _DEBUG_LL_ENTRY(mach, OMAP4_UART##p##_BASE, OMAP_PORT_SHIFT, \ |
90 | OMAP4UART##p) | |
0c8219f0 TL |
91 | |
92 | /* Zoom2/3 shift is different for UART1 and external port */ | |
93 | #define DEBUG_LL_ZOOM(mach) \ | |
96554d70 | 94 | _DEBUG_LL_ENTRY(mach, ZOOM_UART_BASE, ZOOM_PORT_SHIFT, ZOOM_UART) |
0c8219f0 TL |
95 | |
96 | static inline void __arch_decomp_setup(unsigned long arch_id) | |
97 | { | |
98 | int port = 0; | |
99 | ||
100 | /* | |
101 | * Initialize the port based on the machine ID from the bootloader. | |
102 | * Note that we're using macros here instead of switch statement | |
103 | * as machine_is functions are optimized out for the boards that | |
104 | * are not selected. | |
105 | */ | |
106 | do { | |
107 | /* omap7xx/8xx based boards using UART1 with shift 0 */ | |
108 | DEBUG_LL_OMAP7XX(1, herald); | |
109 | DEBUG_LL_OMAP7XX(1, omap_perseus2); | |
110 | ||
111 | /* omap15xx/16xx based boards using UART1 */ | |
112 | DEBUG_LL_OMAP1(1, ams_delta); | |
113 | DEBUG_LL_OMAP1(1, nokia770); | |
114 | DEBUG_LL_OMAP1(1, omap_h2); | |
115 | DEBUG_LL_OMAP1(1, omap_h3); | |
116 | DEBUG_LL_OMAP1(1, omap_innovator); | |
117 | DEBUG_LL_OMAP1(1, omap_osk); | |
118 | DEBUG_LL_OMAP1(1, omap_palmte); | |
119 | DEBUG_LL_OMAP1(1, omap_palmz71); | |
120 | ||
121 | /* omap15xx/16xx based boards using UART2 */ | |
122 | DEBUG_LL_OMAP1(2, omap_palmtt); | |
123 | ||
124 | /* omap15xx/16xx based boards using UART3 */ | |
125 | DEBUG_LL_OMAP1(3, sx1); | |
126 | ||
127 | /* omap2 based boards using UART1 */ | |
128 | DEBUG_LL_OMAP2(1, omap2evm); | |
129 | DEBUG_LL_OMAP2(1, omap_2430sdp); | |
130 | DEBUG_LL_OMAP2(1, omap_apollon); | |
131 | DEBUG_LL_OMAP2(1, omap_h4); | |
132 | ||
133 | /* omap2 based boards using UART3 */ | |
134 | DEBUG_LL_OMAP2(3, nokia_n800); | |
135 | DEBUG_LL_OMAP2(3, nokia_n810); | |
136 | DEBUG_LL_OMAP2(3, nokia_n810_wimax); | |
137 | ||
138 | /* omap3 based boards using UART1 */ | |
139 | DEBUG_LL_OMAP2(1, omap3evm); | |
140 | DEBUG_LL_OMAP3(1, omap_3430sdp); | |
141 | DEBUG_LL_OMAP3(1, omap_3630sdp); | |
d40f3f15 TN |
142 | DEBUG_LL_OMAP3(1, omap3530_lv_som); |
143 | DEBUG_LL_OMAP3(1, omap3_torpedo); | |
0c8219f0 TL |
144 | |
145 | /* omap3 based boards using UART3 */ | |
146 | DEBUG_LL_OMAP3(3, cm_t35); | |
d04b620e | 147 | DEBUG_LL_OMAP3(3, cm_t3517); |
0c8219f0 | 148 | DEBUG_LL_OMAP3(3, igep0020); |
e844b1da | 149 | DEBUG_LL_OMAP3(3, igep0030); |
0c8219f0 TL |
150 | DEBUG_LL_OMAP3(3, nokia_rx51); |
151 | DEBUG_LL_OMAP3(3, omap3517evm); | |
152 | DEBUG_LL_OMAP3(3, omap3_beagle); | |
153 | DEBUG_LL_OMAP3(3, omap3_pandora); | |
154 | DEBUG_LL_OMAP3(3, omap_ldp); | |
155 | DEBUG_LL_OMAP3(3, overo); | |
156 | DEBUG_LL_OMAP3(3, touchbook); | |
157 | ||
158 | /* omap4 based boards using UART3 */ | |
159 | DEBUG_LL_OMAP4(3, omap_4430sdp); | |
b5be6b66 | 160 | DEBUG_LL_OMAP4(3, omap4_panda); |
0c8219f0 TL |
161 | |
162 | /* zoom2/3 external uart */ | |
163 | DEBUG_LL_ZOOM(omap_zoom2); | |
164 | DEBUG_LL_ZOOM(omap_zoom3); | |
165 | ||
166 | } while (0); | |
167 | } | |
168 | ||
169 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) | |
170 | ||
1da177e4 LT |
171 | /* |
172 | * nothing to do | |
173 | */ | |
1da177e4 | 174 | #define arch_decomp_wdog() |