aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-davinci/include/mach/uncompress.h
diff options
context:
space:
mode:
authorCyril Chemparathy <cyril@ti.com>2010-05-18 12:51:17 -0400
committerKevin Hilman <khilman@deeprootsystems.com>2010-06-21 15:48:30 -0400
commitdc2eb76c40590a3c080294d1fbd000c8f70d88a9 (patch)
tree8c7bccdd0eb4dfba763cd19216d8c0a13dfb5d51 /arch/arm/mach-davinci/include/mach/uncompress.h
parent7e27d6e778cd87b6f2415515d7127eba53fe5d02 (diff)
Davinci: generalized debug macros
This patch adopts a debug uart selection similar to the OMAP model. During the boot process, the uncompress code determines the physical and virtual base addresses of the board-specific debug uart. These addresses are then passed on to the in-kernel debug macros through a small chunk of memory placed just below the page tables (@0x80003ff8). Signed-off-by: Cyril Chemparathy <cyril@ti.com> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
Diffstat (limited to 'arch/arm/mach-davinci/include/mach/uncompress.h')
-rw-r--r--arch/arm/mach-davinci/include/mach/uncompress.h80
1 files changed, 59 insertions, 21 deletions
diff --git a/arch/arm/mach-davinci/include/mach/uncompress.h b/arch/arm/mach-davinci/include/mach/uncompress.h
index 33796b4db17f..20c23a3bc907 100644
--- a/arch/arm/mach-davinci/include/mach/uncompress.h
+++ b/arch/arm/mach-davinci/include/mach/uncompress.h
@@ -1,8 +1,17 @@
1/* 1/*
2 * Serial port stubs for kernel decompress status messages 2 * Serial port stubs for kernel decompress status messages
3 * 3 *
4 * Author: Anant Gole 4 * Initially based on:
5 * (C) Copyright (C) 2006, Texas Instruments, Inc 5 * arch/arm/plat-omap/include/mach/uncompress.h
6 *
7 * Original copyrights follow.
8 *
9 * Copyright (C) 2000 RidgeRun, Inc.
10 * Author: Greg Lonnon <glonnon@ridgerun.com>
11 *
12 * Rewritten by:
13 * Author: <source@mvista.com>
14 * 2004 (c) MontaVista Software, Inc.
6 * 15 *
7 * This file is licensed under the terms of the GNU General Public License 16 * This file is licensed under the terms of the GNU General Public License
8 * version 2. This program is licensed "as is" without any warranty of any 17 * version 2. This program is licensed "as is" without any warranty of any
@@ -11,30 +20,17 @@
11 20
12#include <linux/types.h> 21#include <linux/types.h>
13#include <linux/serial_reg.h> 22#include <linux/serial_reg.h>
14#include <mach/serial.h>
15 23
16#include <asm/mach-types.h> 24#include <asm/mach-types.h>
17 25
18extern unsigned int __machine_arch_type; 26#include <mach/serial.h>
19 27
20static u32 *uart; 28static u32 *uart;
21 29static u32 *uart_info = (u32 *)(DAVINCI_UART_INFO);
22static u32 *get_uart_base(void)
23{
24 if (__machine_arch_type == MACH_TYPE_DAVINCI_DA830_EVM ||
25 __machine_arch_type == MACH_TYPE_DAVINCI_DA850_EVM)
26 return (u32 *)DA8XX_UART2_BASE;
27 else
28 return (u32 *)DAVINCI_UART0_BASE;
29}
30 30
31/* PORT_16C550A, in polled non-fifo mode */ 31/* PORT_16C550A, in polled non-fifo mode */
32
33static void putc(char c) 32static void putc(char c)
34{ 33{
35 if (!uart)
36 uart = get_uart_base();
37
38 while (!(uart[UART_LSR] & UART_LSR_THRE)) 34 while (!(uart[UART_LSR] & UART_LSR_THRE))
39 barrier(); 35 barrier();
40 uart[UART_TX] = c; 36 uart[UART_TX] = c;
@@ -42,12 +38,54 @@ static void putc(char c)
42 38
43static inline void flush(void) 39static inline void flush(void)
44{ 40{
45 if (!uart)
46 uart = get_uart_base();
47
48 while (!(uart[UART_LSR] & UART_LSR_THRE)) 41 while (!(uart[UART_LSR] & UART_LSR_THRE))
49 barrier(); 42 barrier();
50} 43}
51 44
52#define arch_decomp_setup() 45static inline void set_uart_info(u32 phys, void * __iomem virt)
46{
47 uart = (u32 *)phys;
48 uart_info[0] = phys;
49 uart_info[1] = (u32)virt;
50}
51
52#define _DEBUG_LL_ENTRY(machine, phys, virt) \
53 if (machine_is_##machine()) { \
54 set_uart_info(phys, virt); \
55 break; \
56 }
57
58#define DEBUG_LL_DAVINCI(machine, port) \
59 _DEBUG_LL_ENTRY(machine, DAVINCI_UART##port##_BASE, \
60 IO_ADDRESS(DAVINCI_UART##port##_BASE))
61
62#define DEBUG_LL_DA8XX(machine, port) \
63 _DEBUG_LL_ENTRY(machine, DA8XX_UART##port##_BASE, \
64 IO_ADDRESS(DA8XX_UART##port##_BASE))
65
66static inline void __arch_decomp_setup(unsigned long arch_id)
67{
68 /*
69 * Initialize the port based on the machine ID from the bootloader.
70 * Note that we're using macros here instead of switch statement
71 * as machine_is functions are optimized out for the boards that
72 * are not selected.
73 */
74 do {
75 /* Davinci boards */
76 DEBUG_LL_DAVINCI(davinci_evm, 0);
77 DEBUG_LL_DAVINCI(sffsdr, 0);
78 DEBUG_LL_DAVINCI(neuros_osd2, 0);
79 DEBUG_LL_DAVINCI(davinci_dm355_evm, 0);
80 DEBUG_LL_DAVINCI(dm355_leopard, 0);
81 DEBUG_LL_DAVINCI(davinci_dm6467_evm, 0);
82 DEBUG_LL_DAVINCI(davinci_dm365_evm, 0);
83
84 /* DA8xx boards */
85 DEBUG_LL_DA8XX(davinci_da830_evm, 2);
86 DEBUG_LL_DA8XX(davinci_da850_evm, 2);
87 } while (0);
88}
89
90#define arch_decomp_setup() __arch_decomp_setup(arch_id)
53#define arch_decomp_wdog() 91#define arch_decomp_wdog()