[ARM] tegra: initial tegra support
[linux-2.6.git] / arch / arm / mach-tegra / include / mach / uncompress.h
1 /*
2  * arch/arm/mach-tegra/include/mach/uncompress.h
3  *
4  * Copyright (C) 2010 Google, Inc.
5  *
6  * Author:
7  *      Colin Cross <ccross@google.com>
8  *      Erik Gilling <konkers@google.com>
9  *
10  * This software is licensed under the terms of the GNU General Public
11  * License version 2, as published by the Free Software Foundation, and
12  * may be copied, distributed, and modified under those terms.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  */
20
21 #ifndef __MACH_TEGRA_UNCOMPRESS_H
22 #define __MACH_TEGRA_UNCOMPRESS_H
23
24 #include <linux/types.h>
25 #include <linux/serial_reg.h>
26
27 #include <mach/iomap.h>
28
29 #if defined(CONFIG_TEGRA_DEBUG_UARTA)
30 #define DEBUG_UART_BASE TEGRA_UARTA_BASE
31 #elif defined(CONFIG_TEGRA_DEBUG_UARTB)
32 #define DEBUG_UART_BASE TEGRA_UARTB_BASE
33 #elif defined(CONFIG_TEGRA_DEBUG_UARTC)
34 #define DEBUG_UART_BASE TEGRA_UARTC_BASE
35 #elif defined(CONFIG_TEGRA_DEBUG_UARTD)
36 #define DEBUG_UART_BASE TEGRA_UARTD_BASE
37 #elif defined(CONFIG_TEGRA_DEBUG_UARTE)
38 #define DEBUG_UART_BASE TEGRA_UARTE_BASE
39 #else
40 #define DEBUG_UART_BASE NULL
41 #endif
42
43 static void putc(int c)
44 {
45         volatile u8 *uart = (volatile u8 *)DEBUG_UART_BASE;
46         int shift = 2;
47
48         if (uart == NULL)
49                 return;
50
51         while (!(uart[UART_LSR << shift] & UART_LSR_THRE))
52                 barrier();
53         uart[UART_TX << shift] = c;
54 }
55
56 static inline void flush(void)
57 {
58 }
59
60 static inline void arch_decomp_setup(void)
61 {
62         volatile u8 *uart = (volatile u8 *)DEBUG_UART_BASE;
63         int shift = 2;
64
65         if (uart == NULL)
66                 return;
67
68         uart[UART_LCR << shift] |= UART_LCR_DLAB;
69         uart[UART_DLL << shift] = 0x75;
70         uart[UART_DLM << shift] = 0x0;
71         uart[UART_LCR << shift] = 3;
72 }
73
74 static inline void arch_decomp_wdog(void)
75 {
76 }
77
78 #endif