diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2006-01-10 19:54:09 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-01-10 22:48:26 -0500 |
commit | 296167ae1799815b9ed2d135a847436502f2ee91 (patch) | |
tree | 5e9496d0a60e10a021c12117ec6bc8d513f39463 /arch/powerpc/kernel/rtas.c | |
parent | bf6a7112bda99aadd6675526423a96be6b356a3d (diff) |
[PATCH] powerpc: Make early debugging configurable via Kconfig
This patch adds Kconfig entries to control the early debugging options,
currently in setup_64.c.
Doing this via Kconfig rather than #defines means you can have one source tree,
which is buildable for multiple platforms - and you can enable the correct
early debug option for each platform via .config.
I made udbg_early_init() a static inline because otherwise GCC is to daft to
optimise it away when debugging is off.
Now that we have udbg_init_rtas() we can make call_rtas_display_status* static.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel/rtas.c')
-rw-r--r-- | arch/powerpc/kernel/rtas.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index ae2e2a31a705..68bcd2824bc6 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <asm/delay.h> | 29 | #include <asm/delay.h> |
30 | #include <asm/uaccess.h> | 30 | #include <asm/uaccess.h> |
31 | #include <asm/lmb.h> | 31 | #include <asm/lmb.h> |
32 | #include <asm/udbg.h> | ||
32 | 33 | ||
33 | struct rtas_t rtas = { | 34 | struct rtas_t rtas = { |
34 | .lock = SPIN_LOCK_UNLOCKED | 35 | .lock = SPIN_LOCK_UNLOCKED |
@@ -52,7 +53,7 @@ EXPORT_SYMBOL(rtas_flash_term_hook); | |||
52 | * are designed only for very early low-level debugging, which | 53 | * are designed only for very early low-level debugging, which |
53 | * is why the token is hard-coded to 10. | 54 | * is why the token is hard-coded to 10. |
54 | */ | 55 | */ |
55 | void call_rtas_display_status(unsigned char c) | 56 | static void call_rtas_display_status(char c) |
56 | { | 57 | { |
57 | struct rtas_args *args = &rtas.args; | 58 | struct rtas_args *args = &rtas.args; |
58 | unsigned long s; | 59 | unsigned long s; |
@@ -65,14 +66,14 @@ void call_rtas_display_status(unsigned char c) | |||
65 | args->nargs = 1; | 66 | args->nargs = 1; |
66 | args->nret = 1; | 67 | args->nret = 1; |
67 | args->rets = (rtas_arg_t *)&(args->args[1]); | 68 | args->rets = (rtas_arg_t *)&(args->args[1]); |
68 | args->args[0] = (int)c; | 69 | args->args[0] = (unsigned char)c; |
69 | 70 | ||
70 | enter_rtas(__pa(args)); | 71 | enter_rtas(__pa(args)); |
71 | 72 | ||
72 | spin_unlock_irqrestore(&rtas.lock, s); | 73 | spin_unlock_irqrestore(&rtas.lock, s); |
73 | } | 74 | } |
74 | 75 | ||
75 | void call_rtas_display_status_delay(unsigned char c) | 76 | static void call_rtas_display_status_delay(char c) |
76 | { | 77 | { |
77 | static int pending_newline = 0; /* did last write end with unprinted newline? */ | 78 | static int pending_newline = 0; /* did last write end with unprinted newline? */ |
78 | static int width = 16; | 79 | static int width = 16; |
@@ -96,6 +97,11 @@ void call_rtas_display_status_delay(unsigned char c) | |||
96 | } | 97 | } |
97 | } | 98 | } |
98 | 99 | ||
100 | void __init udbg_init_rtas(void) | ||
101 | { | ||
102 | udbg_putc = call_rtas_display_status_delay; | ||
103 | } | ||
104 | |||
99 | void rtas_progress(char *s, unsigned short hex) | 105 | void rtas_progress(char *s, unsigned short hex) |
100 | { | 106 | { |
101 | struct device_node *root; | 107 | struct device_node *root; |