Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 17859
b: refs/heads/master
c: 296167a
h: refs/heads/master
i:
  17857: 698a54f
  17855: ac0799b
v: v3
  • Loading branch information
Michael Ellerman authored and Paul Mackerras committed Jan 11, 2006
1 parent fd3cd2f commit b7e77d2
Show file tree
Hide file tree
Showing 9 changed files with 89 additions and 44 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: bf6a7112bda99aadd6675526423a96be6b356a3d
refs/heads/master: 296167ae1799815b9ed2d135a847436502f2ee91
42 changes: 42 additions & 0 deletions trunk/arch/powerpc/Kconfig.debug
Original file line number Diff line number Diff line change
Expand Up @@ -115,4 +115,46 @@ config PPC_OCP
depends on IBM_OCP || XILINX_OCP
default y

choice
prompt "Early debugging (dangerous)"
bool
optional
help
Enable early debugging. Careful, if you enable debugging for the
wrong type of machine your kernel _will not boot_.

config PPC_EARLY_DEBUG_LPAR
bool "LPAR HV Console"
depends on PPC_PSERIES
help
Select this to enable early debugging for a machine with a HVC
console on vterm 0.

config PPC_EARLY_DEBUG_G5
bool "Apple G5"
depends on PPC_PMAC64
help
Select this to enable early debugging for Apple G5 machines.

config PPC_EARLY_DEBUG_RTAS
bool "RTAS Panel"
depends on PPC_RTAS
help
Select this to enable early debugging via the RTAS panel.

config PPC_EARLY_DEBUG_MAPLE
bool "Maple real mode"
depends on PPC_MAPLE
help
Select this to enable early debugging for Maple.

config PPC_EARLY_DEBUG_ISERIES
bool "iSeries HV Console"
depends on PPC_ISERIES
help
Select this to enable early debugging for legacy iSeries. You need
to hit "Ctrl-x Ctrl-x" to see the messages on the console.

endchoice

endmenu
12 changes: 9 additions & 3 deletions trunk/arch/powerpc/kernel/rtas.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include <asm/delay.h>
#include <asm/uaccess.h>
#include <asm/lmb.h>
#include <asm/udbg.h>

struct rtas_t rtas = {
.lock = SPIN_LOCK_UNLOCKED
Expand All @@ -52,7 +53,7 @@ EXPORT_SYMBOL(rtas_flash_term_hook);
* are designed only for very early low-level debugging, which
* is why the token is hard-coded to 10.
*/
void call_rtas_display_status(unsigned char c)
static void call_rtas_display_status(char c)
{
struct rtas_args *args = &rtas.args;
unsigned long s;
Expand All @@ -65,14 +66,14 @@ void call_rtas_display_status(unsigned char c)
args->nargs = 1;
args->nret = 1;
args->rets = (rtas_arg_t *)&(args->args[1]);
args->args[0] = (int)c;
args->args[0] = (unsigned char)c;

enter_rtas(__pa(args));

spin_unlock_irqrestore(&rtas.lock, s);
}

void call_rtas_display_status_delay(unsigned char c)
static void call_rtas_display_status_delay(char c)
{
static int pending_newline = 0; /* did last write end with unprinted newline? */
static int width = 16;
Expand All @@ -96,6 +97,11 @@ void call_rtas_display_status_delay(unsigned char c)
}
}

void __init udbg_init_rtas(void)
{
udbg_putc = call_rtas_display_status_delay;
}

void rtas_progress(char *s, unsigned short hex)
{
struct device_node *root;
Expand Down
38 changes: 2 additions & 36 deletions trunk/arch/powerpc/kernel/setup_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,37 +70,6 @@
#define DBG(fmt...)
#endif

/*
* Here are some early debugging facilities. You can enable one
* but your kernel will not boot on anything else if you do so
*/

/* For use on LPAR machines that support an HVC console on vterm 0 */
extern void udbg_init_debug_lpar(void);

/* This one is for use on Apple G5 machines */
extern void udbg_init_pmac_realmode(void);

/* That's RTAS panel debug */
extern void call_rtas_display_status_delay(unsigned char c);

/* Here's maple real mode debug */
extern void udbg_init_maple_realmode(void);

/* For iSeries - hit Ctrl-x Ctrl-x to see the output */
extern void udbg_init_iseries(void);

#define EARLY_DEBUG_INIT() do {} while(0)

#if 0
#define EARLY_DEBUG_INIT() udbg_init_debug_lpar()
#define EARLY_DEBUG_INIT() udbg_init_iseries()
#define EARLY_DEBUG_INIT() udbg_init_maple_realmode()
#define EARLY_DEBUG_INIT() udbg_init_pmac_realmode()
#define EARLY_DEBUG_INIT() \
do { udbg_putc = call_rtas_display_status_delay; } while(0)
#endif

int have_of = 1;
int boot_cpuid = 0;
int boot_cpuid_phys = 0;
Expand Down Expand Up @@ -241,11 +210,8 @@ void __init early_setup(unsigned long dt_ptr)
struct paca_struct *lpaca = get_paca();
static struct machdep_calls **mach;

/*
* Enable early debugging if any specified (see top of
* this file)
*/
EARLY_DEBUG_INIT();
/* Enable early debugging if any specified (see udbg.h) */
udbg_early_init();

DBG(" -> early_setup()\n");

Expand Down
25 changes: 25 additions & 0 deletions trunk/arch/powerpc/kernel/udbg.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,36 @@
#include <linux/sched.h>
#include <linux/console.h>
#include <asm/processor.h>
#include <asm/udbg.h>

void (*udbg_putc)(char c);
int (*udbg_getc)(void);
int (*udbg_getc_poll)(void);

/*
* Early debugging facilities. You can enable _one_ of these via .config,
* if you do so your kernel _will not boot_ on anything else. Be careful.
*/
void __init udbg_early_init(void)
{
#if defined(CONFIG_PPC_EARLY_DEBUG_LPAR)
/* For LPAR machines that have an HVC console on vterm 0 */
udbg_init_debug_lpar();
#elif defined(CONFIG_PPC_EARLY_DEBUG_G5)
/* For use on Apple G5 machines */
udbg_init_pmac_realmode();
#elif defined(CONFIG_PPC_EARLY_DEBUG_RTAS)
/* RTAS panel debug */
udbg_init_rtas();
#elif defined(CONFIG_PPC_EARLY_DEBUG_MAPLE)
/* Maple real mode debug */
udbg_init_maple_realmode();
#elif defined(CONFIG_PPC_EARLY_DEBUG_ISERIES)
/* For iSeries - hit Ctrl-x Ctrl-x to see the output */
udbg_init_iseries();
#endif
}

/* udbg library, used by xmon et al */
void udbg_puts(const char *s)
{
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/powerpc/kernel/udbg_16550.c
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ void udbg_maple_real_putc(unsigned char c)
}
}

void udbg_init_maple_realmode(void)
void __init udbg_init_maple_realmode(void)
{
udbg_comport = (volatile struct NS16550 __iomem *)0xf40003f8;

Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/powerpc/platforms/powermac/udbg_scc.c
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ static void udbg_real_scc_putc(char c)
udbg_real_scc_putc('\r');
}

void udbg_init_pmac_realmode(void)
void __init udbg_init_pmac_realmode(void)
{
sccc = (volatile u8 __iomem *)0x80013020ul;
sccd = (volatile u8 __iomem *)0x80013030ul;
Expand Down
1 change: 0 additions & 1 deletion trunk/include/asm-powerpc/rtas.h
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,6 @@ extern struct rtas_t rtas;
extern void enter_rtas(unsigned long);
extern int rtas_token(const char *service);
extern int rtas_call(int token, int, int, int *, ...);
extern void call_rtas_display_status(unsigned char);
extern void rtas_restart(char *cmd);
extern void rtas_power_off(void);
extern void rtas_halt(void);
Expand Down
9 changes: 8 additions & 1 deletion trunk/include/asm-powerpc/udbg.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* c 2001 PPC 64 Team, IBM Corp
* (c) 2001, 2006 IBM Corporation.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
Expand Down Expand Up @@ -36,5 +36,12 @@ extern void udbg_scc_init(int force_scc);
extern int udbg_adb_init(int force_btext);
extern void udbg_adb_init_early(void);

extern void __init udbg_early_init(void);
extern void __init udbg_init_debug_lpar(void);
extern void __init udbg_init_pmac_realmode(void);
extern void __init udbg_init_maple_realmode(void);
extern void __init udbg_init_iseries(void);
extern void __init udbg_init_rtas(void);

#endif /* __KERNEL__ */
#endif /* _ASM_POWERPC_UDBG_H */

0 comments on commit b7e77d2

Please sign in to comment.