[PATCH] powerpc: Early debugging support for iSeries
authorMichael Ellerman <michael@ellerman.id.au>
Wed, 11 Jan 2006 00:54:08 +0000 (11:54 +1100)
committerPaul Mackerras <paulus@samba.org>
Wed, 11 Jan 2006 03:48:13 +0000 (14:48 +1100)
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: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/kernel/setup_64.c
arch/powerpc/platforms/iseries/setup.c
drivers/char/viocons.c

index c4b76961d6de78f57e86c256211d4e0844f7ed22..177d8249078da37bd9dbc957fd7b51c77342cfca 100644 (file)
  * 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
- * on vterm 0
- */
+/* 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
- */
+
+/* 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()                                             \
index ad5ef80500ce50d74f9c58b0e97d7a0ff8584782..25cdebdf6f2e85adfab4d68795df58695bcfa0e1 100644 (file)
@@ -52,6 +52,7 @@
 #include <asm/iseries/mf.h>
 #include <asm/iseries/hv_lp_event.h>
 #include <asm/iseries/lpar_map.h>
+#include <asm/udbg.h>
 
 #include "naca.h"
 #include "setup.h"
 #include "call_sm.h"
 #include "call_hpt.h"
 
-extern void hvlog(char *fmt, ...);
-
 #ifdef DEBUG
-#define DBG(fmt...) hvlog(fmt)
+#define DBG(fmt...) udbg_printf(fmt)
 #else
 #define DBG(fmt...)
 #endif
@@ -984,3 +983,16 @@ static int __init early_parsemem(char *p)
        return 0;
 }
 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;
+}
index cb82ebf4cb0787b8fcd7e28e24118b1c334be725..bead38a4a68ad354303991e3f2a6d78968930888 100644 (file)
@@ -131,7 +131,7 @@ static void initDataEvent(struct viocharlpevent *viochar, HvLpIndex lp);
 
 static struct tty_driver *viotty_driver;
 
-void hvlog(char *fmt, ...)
+static void hvlog(char *fmt, ...)
 {
        int i;
        unsigned long flags;
@@ -147,7 +147,7 @@ void hvlog(char *fmt, ...)
        spin_unlock_irqrestore(&consoleloglock, flags);
 }
 
-void hvlogOutput(const char *buf, int count)
+static void hvlogOutput(const char *buf, int count)
 {
        unsigned long flags;
        int begin;