Commit bf6a7112 authored by Michael Ellerman's avatar Michael Ellerman Committed by Paul Mackerras

[PATCH] powerpc: Early debugging support for iSeries

Connect iSeries up to the standard early debugging infrastructure.

To actually use this you need to enable the iSeries early debugging
in setup_64.c. Then after the messages are logged hit Ctrl-x Ctrl-x on
your console to dump the Hypervisor console buffer.
Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent f481f1ed
...@@ -75,22 +75,26 @@ ...@@ -75,22 +75,26 @@
* but your kernel will not boot on anything else if you do so * but your kernel will not boot on anything else if you do so
*/ */
/* This one is for use on LPAR machines that support an HVC console /* For use on LPAR machines that support an HVC console on vterm 0 */
* on vterm 0
*/
extern void udbg_init_debug_lpar(void); extern void udbg_init_debug_lpar(void);
/* This one is for use on Apple G5 machines
*/ /* This one is for use on Apple G5 machines */
extern void udbg_init_pmac_realmode(void); extern void udbg_init_pmac_realmode(void);
/* That's RTAS panel debug */ /* That's RTAS panel debug */
extern void call_rtas_display_status_delay(unsigned char c); extern void call_rtas_display_status_delay(unsigned char c);
/* Here's maple real mode debug */ /* Here's maple real mode debug */
extern void udbg_init_maple_realmode(void); 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) #define EARLY_DEBUG_INIT() do {} while(0)
#if 0 #if 0
#define EARLY_DEBUG_INIT() udbg_init_debug_lpar() #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_maple_realmode()
#define EARLY_DEBUG_INIT() udbg_init_pmac_realmode() #define EARLY_DEBUG_INIT() udbg_init_pmac_realmode()
#define EARLY_DEBUG_INIT() \ #define EARLY_DEBUG_INIT() \
......
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
#include <asm/iseries/mf.h> #include <asm/iseries/mf.h>
#include <asm/iseries/hv_lp_event.h> #include <asm/iseries/hv_lp_event.h>
#include <asm/iseries/lpar_map.h> #include <asm/iseries/lpar_map.h>
#include <asm/udbg.h>
#include "naca.h" #include "naca.h"
#include "setup.h" #include "setup.h"
...@@ -62,10 +63,8 @@ ...@@ -62,10 +63,8 @@
#include "call_sm.h" #include "call_sm.h"
#include "call_hpt.h" #include "call_hpt.h"
extern void hvlog(char *fmt, ...);
#ifdef DEBUG #ifdef DEBUG
#define DBG(fmt...) hvlog(fmt) #define DBG(fmt...) udbg_printf(fmt)
#else #else
#define DBG(fmt...) #define DBG(fmt...)
#endif #endif
...@@ -984,3 +983,16 @@ static int __init early_parsemem(char *p) ...@@ -984,3 +983,16 @@ static int __init early_parsemem(char *p)
return 0; return 0;
} }
early_param("mem", early_parsemem); early_param("mem", early_parsemem);
static void hvputc(char c)
{
if (c == '\n')
hvputc('\r');
HvCall_writeLogBuffer(&c, 1);
}
void __init udbg_init_iseries(void)
{
udbg_putc = hvputc;
}
...@@ -131,7 +131,7 @@ static void initDataEvent(struct viocharlpevent *viochar, HvLpIndex lp); ...@@ -131,7 +131,7 @@ static void initDataEvent(struct viocharlpevent *viochar, HvLpIndex lp);
static struct tty_driver *viotty_driver; static struct tty_driver *viotty_driver;
void hvlog(char *fmt, ...) static void hvlog(char *fmt, ...)
{ {
int i; int i;
unsigned long flags; unsigned long flags;
...@@ -147,7 +147,7 @@ void hvlog(char *fmt, ...) ...@@ -147,7 +147,7 @@ void hvlog(char *fmt, ...)
spin_unlock_irqrestore(&consoleloglock, flags); spin_unlock_irqrestore(&consoleloglock, flags);
} }
void hvlogOutput(const char *buf, int count) static void hvlogOutput(const char *buf, int count)
{ {
unsigned long flags; unsigned long flags;
int begin; int begin;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment