Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[POWERPC] Celleb: support udbg

This patch adds udbg support for Celleb platform.

Signed-off-by: Kou Ishizaki <kou.ishizaki@toshiba.co.jp>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>

authored by

Ishizaki Kou and committed by
Paul Mackerras
d7480a9f fe4a0cf1

+100
+2
arch/powerpc/kernel/udbg.c
··· 45 45 #elif defined(CONFIG_PPC_EARLY_DEBUG_ISERIES) 46 46 /* For iSeries - hit Ctrl-x Ctrl-x to see the output */ 47 47 udbg_init_iseries(); 48 + #elif defined(CONFIG_PPC_EARLY_DEBUG_BEAT) 49 + udbg_init_debug_beat(); 48 50 #endif 49 51 } 50 52
+97
arch/powerpc/platforms/celleb/udbg_beat.c
··· 1 + /* 2 + * udbg function for Beat 3 + * 4 + * (C) Copyright 2006 TOSHIBA CORPORATION 5 + * 6 + * This program is free software; you can redistribute it and/or modify 7 + * it under the terms of the GNU General Public License as published by 8 + * the Free Software Foundation; either version 2 of the License, or 9 + * (at your option) any later version. 10 + * 11 + * This program is distributed in the hope that it will be useful, 12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 + * GNU General Public License for more details. 15 + * 16 + * You should have received a copy of the GNU General Public License along 17 + * with this program; if not, write to the Free Software Foundation, Inc., 18 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 + */ 20 + 21 + #include <linux/kernel.h> 22 + #include <linux/console.h> 23 + 24 + #include <asm/machdep.h> 25 + #include <asm/prom.h> 26 + #include <asm/udbg.h> 27 + 28 + #include "beat.h" 29 + 30 + #define celleb_vtermno 0 31 + 32 + static void udbg_putc_beat(char c) 33 + { 34 + unsigned long rc; 35 + 36 + if (c == '\n') 37 + udbg_putc_beat('\r'); 38 + 39 + rc = beat_put_term_char(celleb_vtermno, 1, (uint64_t)c << 56, 0); 40 + } 41 + 42 + /* Buffered chars getc */ 43 + static long inbuflen; 44 + static long inbuf[2]; /* must be 2 longs */ 45 + 46 + static int udbg_getc_poll_beat(void) 47 + { 48 + /* The interface is tricky because it may return up to 16 chars. 49 + * We save them statically for future calls to udbg_getc(). 50 + */ 51 + char ch, *buf = (char *)inbuf; 52 + int i; 53 + long rc; 54 + if (inbuflen == 0) { 55 + /* get some more chars. */ 56 + inbuflen = 0; 57 + rc = beat_get_term_char(celleb_vtermno, &inbuflen, inbuf+0, inbuf+1); 58 + if (rc != 0) 59 + inbuflen = 0; /* otherwise inbuflen is garbage */ 60 + } 61 + if (inbuflen <= 0 || inbuflen > 16) { 62 + /* Catch error case as well as other oddities (corruption) */ 63 + inbuflen = 0; 64 + return -1; 65 + } 66 + ch = buf[0]; 67 + for (i = 1; i < inbuflen; i++) /* shuffle them down. */ 68 + buf[i-1] = buf[i]; 69 + inbuflen--; 70 + return ch; 71 + } 72 + 73 + static int udbg_getc_beat(void) 74 + { 75 + int ch; 76 + for (;;) { 77 + ch = udbg_getc_poll_beat(); 78 + if (ch == -1) { 79 + /* This shouldn't be needed...but... */ 80 + volatile unsigned long delay; 81 + for (delay=0; delay < 2000000; delay++) 82 + ; 83 + } else { 84 + return ch; 85 + } 86 + } 87 + } 88 + 89 + /* call this from early_init() for a working debug console on 90 + * vterm capable LPAR machines 91 + */ 92 + void __init udbg_init_debug_beat(void) 93 + { 94 + udbg_putc = udbg_putc_beat; 95 + udbg_getc = udbg_getc_beat; 96 + udbg_getc_poll = udbg_getc_poll_beat; 97 + }
+1
include/asm-powerpc/udbg.h
··· 44 44 extern void __init udbg_init_iseries(void); 45 45 extern void __init udbg_init_rtas_panel(void); 46 46 extern void __init udbg_init_rtas_console(void); 47 + extern void __init udbg_init_debug_beat(void); 47 48 48 49 #endif /* __KERNEL__ */ 49 50 #endif /* _ASM_POWERPC_UDBG_H */