diff options
| -rw-r--r-- | arch/powerpc/kernel/setup-common.c | 25 | ||||
| -rw-r--r-- | arch/powerpc/kernel/setup_32.c | 8 | ||||
| -rw-r--r-- | arch/powerpc/kernel/setup_64.c | 12 | ||||
| -rw-r--r-- | arch/powerpc/xmon/xmon.c | 33 | ||||
| -rw-r--r-- | include/asm-powerpc/xmon.h | 6 |
5 files changed, 44 insertions, 40 deletions
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 0af3fc1bdcc9..89cfaf49d3de 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c | |||
| @@ -442,31 +442,6 @@ void __init smp_setup_cpu_maps(void) | |||
| 442 | } | 442 | } |
| 443 | #endif /* CONFIG_SMP */ | 443 | #endif /* CONFIG_SMP */ |
| 444 | 444 | ||
| 445 | int __initdata do_early_xmon; | ||
| 446 | #ifdef CONFIG_XMON | ||
| 447 | extern int xmon_no_auto_backtrace; | ||
| 448 | |||
| 449 | static int __init early_xmon(char *p) | ||
| 450 | { | ||
| 451 | /* ensure xmon is enabled */ | ||
| 452 | if (p) { | ||
| 453 | if (strncmp(p, "on", 2) == 0) | ||
| 454 | xmon_init(1); | ||
| 455 | if (strncmp(p, "off", 3) == 0) | ||
| 456 | xmon_init(0); | ||
| 457 | if (strncmp(p, "nobt", 4) == 0) | ||
| 458 | xmon_no_auto_backtrace = 1; | ||
| 459 | if (strncmp(p, "early", 5) != 0) | ||
| 460 | return 0; | ||
| 461 | } | ||
| 462 | xmon_init(1); | ||
| 463 | do_early_xmon = 1; | ||
| 464 | |||
| 465 | return 0; | ||
| 466 | } | ||
| 467 | early_param("xmon", early_xmon); | ||
| 468 | #endif | ||
| 469 | |||
| 470 | static __init int add_pcspkr(void) | 445 | static __init int add_pcspkr(void) |
| 471 | { | 446 | { |
| 472 | struct device_node *np; | 447 | struct device_node *np; |
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index 79a17795d17b..191d0ab09222 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c | |||
| @@ -238,12 +238,11 @@ void __init setup_arch(char **cmdline_p) | |||
| 238 | 238 | ||
| 239 | smp_setup_cpu_maps(); | 239 | smp_setup_cpu_maps(); |
| 240 | 240 | ||
| 241 | #ifdef CONFIG_XMON_DEFAULT | ||
| 242 | xmon_init(1); | ||
| 243 | #endif | ||
| 244 | /* Register early console */ | 241 | /* Register early console */ |
| 245 | register_early_udbg_console(); | 242 | register_early_udbg_console(); |
| 246 | 243 | ||
| 244 | xmon_setup(); | ||
| 245 | |||
| 247 | #if defined(CONFIG_KGDB) | 246 | #if defined(CONFIG_KGDB) |
| 248 | if (ppc_md.kgdb_map_scc) | 247 | if (ppc_md.kgdb_map_scc) |
| 249 | ppc_md.kgdb_map_scc(); | 248 | ppc_md.kgdb_map_scc(); |
| @@ -280,9 +279,6 @@ void __init setup_arch(char **cmdline_p) | |||
| 280 | init_mm.end_data = (unsigned long) _edata; | 279 | init_mm.end_data = (unsigned long) _edata; |
| 281 | init_mm.brk = klimit; | 280 | init_mm.brk = klimit; |
| 282 | 281 | ||
| 283 | if (do_early_xmon) | ||
| 284 | debugger(NULL); | ||
| 285 | |||
| 286 | /* set up the bootmem stuff with available memory */ | 282 | /* set up the bootmem stuff with available memory */ |
| 287 | do_init_bootmem(); | 283 | do_init_bootmem(); |
| 288 | if ( ppc_md.progress ) ppc_md.progress("setup_arch: bootmem", 0x3eab); | 284 | if ( ppc_md.progress ) ppc_md.progress("setup_arch: bootmem", 0x3eab); |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index cda2dbe70a76..4b2e32eab9dc 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
| @@ -391,18 +391,14 @@ void __init setup_system(void) | |||
| 391 | find_legacy_serial_ports(); | 391 | find_legacy_serial_ports(); |
| 392 | 392 | ||
| 393 | /* | 393 | /* |
| 394 | * Initialize xmon | ||
| 395 | */ | ||
| 396 | #ifdef CONFIG_XMON_DEFAULT | ||
| 397 | xmon_init(1); | ||
| 398 | #endif | ||
| 399 | /* | ||
| 400 | * Register early console | 394 | * Register early console |
| 401 | */ | 395 | */ |
| 402 | register_early_udbg_console(); | 396 | register_early_udbg_console(); |
| 403 | 397 | ||
| 404 | if (do_early_xmon) | 398 | /* |
| 405 | debugger(NULL); | 399 | * Initialize xmon |
| 400 | */ | ||
| 401 | xmon_setup(); | ||
| 406 | 402 | ||
| 407 | check_smt_enabled(); | 403 | check_smt_enabled(); |
| 408 | smp_setup_cpu_maps(); | 404 | smp_setup_cpu_maps(); |
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c index 8adad1444a51..b54ff980ecd4 100644 --- a/arch/powerpc/xmon/xmon.c +++ b/arch/powerpc/xmon/xmon.c | |||
| @@ -2,6 +2,8 @@ | |||
| 2 | * Routines providing a simple monitor for use on the PowerMac. | 2 | * Routines providing a simple monitor for use on the PowerMac. |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 1996-2005 Paul Mackerras. | 4 | * Copyright (C) 1996-2005 Paul Mackerras. |
| 5 | * Copyright (C) 2001 PPC64 Team, IBM Corp | ||
| 6 | * Copyrignt (C) 2006 Michael Ellerman, IBM Corp | ||
| 5 | * | 7 | * |
| 6 | * This program is free software; you can redistribute it and/or | 8 | * This program is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU General Public License | 9 | * modify it under the terms of the GNU General Public License |
| @@ -2597,3 +2599,34 @@ static int __init setup_xmon_sysrq(void) | |||
| 2597 | } | 2599 | } |
| 2598 | __initcall(setup_xmon_sysrq); | 2600 | __initcall(setup_xmon_sysrq); |
| 2599 | #endif /* CONFIG_MAGIC_SYSRQ */ | 2601 | #endif /* CONFIG_MAGIC_SYSRQ */ |
| 2602 | |||
| 2603 | int __initdata xmon_early, xmon_off; | ||
| 2604 | |||
| 2605 | static int __init early_parse_xmon(char *p) | ||
| 2606 | { | ||
| 2607 | if (!p || strncmp(p, "early", 5) == 0) { | ||
| 2608 | /* just "xmon" is equivalent to "xmon=early" */ | ||
| 2609 | xmon_init(1); | ||
| 2610 | xmon_early = 1; | ||
| 2611 | } else if (strncmp(p, "on", 2) == 0) | ||
| 2612 | xmon_init(1); | ||
| 2613 | else if (strncmp(p, "off", 3) == 0) | ||
| 2614 | xmon_off = 1; | ||
| 2615 | else if (strncmp(p, "nobt", 4) == 0) | ||
| 2616 | xmon_no_auto_backtrace = 1; | ||
| 2617 | else | ||
| 2618 | return 1; | ||
| 2619 | |||
| 2620 | return 0; | ||
| 2621 | } | ||
| 2622 | early_param("xmon", early_parse_xmon); | ||
| 2623 | |||
| 2624 | void __init xmon_setup(void) | ||
| 2625 | { | ||
| 2626 | #ifdef CONFIG_XMON_DEFAULT | ||
| 2627 | if (!xmon_off) | ||
| 2628 | xmon_init(1); | ||
| 2629 | #endif | ||
| 2630 | if (xmon_early) | ||
| 2631 | debugger(NULL); | ||
| 2632 | } | ||
diff --git a/include/asm-powerpc/xmon.h b/include/asm-powerpc/xmon.h index c02dd0ce13ac..f1d337ed68d5 100644 --- a/include/asm-powerpc/xmon.h +++ b/include/asm-powerpc/xmon.h | |||
| @@ -12,7 +12,11 @@ | |||
| 12 | 12 | ||
| 13 | #ifdef __KERNEL__ | 13 | #ifdef __KERNEL__ |
| 14 | 14 | ||
| 15 | extern void xmon_init(int); | 15 | #ifdef CONFIG_XMON |
| 16 | extern void xmon_setup(void); | ||
| 17 | #else | ||
| 18 | static inline void xmon_setup(void) { }; | ||
| 19 | #endif | ||
| 16 | 20 | ||
| 17 | #endif /* __KERNEL __ */ | 21 | #endif /* __KERNEL __ */ |
| 18 | #endif /* __ASM_POWERPC_XMON_H */ | 22 | #endif /* __ASM_POWERPC_XMON_H */ |
