diff options
Diffstat (limited to 'arch/arm/boot/compressed/misc.c')
-rw-r--r-- | arch/arm/boot/compressed/misc.c | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c index 5ab94584baee..0af3772efcb7 100644 --- a/arch/arm/boot/compressed/misc.c +++ b/arch/arm/boot/compressed/misc.c | |||
@@ -20,24 +20,45 @@ unsigned int __machine_arch_type; | |||
20 | 20 | ||
21 | #include <linux/string.h> | 21 | #include <linux/string.h> |
22 | 22 | ||
23 | #include <asm/arch/uncompress.h> | ||
24 | |||
25 | #ifdef STANDALONE_DEBUG | 23 | #ifdef STANDALONE_DEBUG |
26 | #define putstr printf | 24 | #define putstr printf |
27 | #endif | 25 | #else |
26 | |||
27 | static void putstr(const char *ptr); | ||
28 | |||
29 | #include <linux/compiler.h> | ||
30 | #include <asm/arch/uncompress.h> | ||
28 | 31 | ||
29 | #ifdef CONFIG_DEBUG_ICEDCC | 32 | #ifdef CONFIG_DEBUG_ICEDCC |
30 | #define putstr icedcc_putstr | 33 | static void icedcc_putc(int ch) |
31 | #define putc icedcc_putc | 34 | { |
35 | int status, i = 0x4000000; | ||
32 | 36 | ||
33 | extern void icedcc_putc(int ch); | 37 | do { |
38 | if (--i < 0) | ||
39 | return; | ||
34 | 40 | ||
35 | static void | 41 | asm("mrc p14, 0, %0, c0, c0, 0" : "=r" (status)); |
36 | icedcc_putstr(const char *ptr) | 42 | } while (status & 2); |
43 | |||
44 | asm("mcr p15, 0, %0, c1, c0, 0" : : "r" (ch)); | ||
45 | } | ||
46 | |||
47 | #define putc(ch) icedcc_putc(ch) | ||
48 | #define flush() do { } while (0) | ||
49 | #endif | ||
50 | |||
51 | static void putstr(const char *ptr) | ||
37 | { | 52 | { |
38 | for (; *ptr != '\0'; ptr++) { | 53 | char c; |
39 | icedcc_putc(*ptr); | 54 | |
55 | while ((c = *ptr++) != '\0') { | ||
56 | if (c == '\n') | ||
57 | putc('\r'); | ||
58 | putc(c); | ||
40 | } | 59 | } |
60 | |||
61 | flush(); | ||
41 | } | 62 | } |
42 | 63 | ||
43 | #endif | 64 | #endif |