25 #ifndef __MACH_TEGRA_UNCOMPRESS_H
26 #define __MACH_TEGRA_UNCOMPRESS_H
28 #include <linux/types.h>
34 #define BIT(x) (1 << (x))
35 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
37 #define DEBUG_UART_SHIFT 2
41 static void putc(
int c)
51 static inline void flush(
void)
55 static inline void save_uart_address(
void)
75 TEGRA_CLK_RESET_BASE + 0x10,
81 TEGRA_CLK_RESET_BASE + 0x10,
87 TEGRA_CLK_RESET_BASE + 0x14,
93 TEGRA_CLK_RESET_BASE + 0x18,
99 TEGRA_CLK_RESET_BASE + 0x18,
104 static inline bool uart_clocked(
int i)
115 #ifdef CONFIG_TEGRA_DEBUG_UART_AUTO_ODMDATA
116 int auto_odmdata(
void)
119 u32 odmdata = pmc[0xa0 / 4];
130 switch ((odmdata >> 18) & 3) {
138 return (odmdata >> 15) & 7;
142 #ifdef CONFIG_TEGRA_DEBUG_UART_AUTO_SCRATCH
143 int auto_scratch(
void)
162 if (!uart_clocked(i))
165 uart = (
volatile u8 *)uarts[i].base;
182 int uart_id, auto_uart_id;
186 #if defined(CONFIG_TEGRA_DEBUG_UARTA)
188 #elif defined(CONFIG_TEGRA_DEBUG_UARTB)
190 #elif defined(CONFIG_TEGRA_DEBUG_UARTC)
192 #elif defined(CONFIG_TEGRA_DEBUG_UARTD)
194 #elif defined(CONFIG_TEGRA_DEBUG_UARTE)
200 #if defined(CONFIG_TEGRA_DEBUG_UART_AUTO_ODMDATA)
201 auto_uart_id = auto_odmdata();
202 #elif defined(CONFIG_TEGRA_DEBUG_UART_AUTO_SCRATCH)
203 auto_uart_id = auto_scratch();
207 if (auto_uart_id != -1)
208 uart_id = auto_uart_id;
210 if (uart_id < 0 || uart_id >=
ARRAY_SIZE(uarts) ||
211 !uart_clocked(uart_id))
214 uart = (
volatile u8 *)uarts[uart_id].base;
220 chip = (apb_misc[0x804 / 4] >> 8) & 0xff;
228 uart[UART_DLM << DEBUG_UART_SHIFT] = div >> 8;