powerpc: udbg updates
Subsystems (2)
PATCH 1/1 powerpc: udbg updates
The udbg low level io layer has an issue with udbg_getc() returning a char (unsigned on ppc) instead of an int, thus the -1 if you had no available input device could end up turned into 0xff, filling your display with bogus characters. This fixes it, along with adding a little blob to xmon to do a delay before exiting when getting an EOF and fixing the detection of ADB keyboards in udbg_adb.c
Signed-off-by Benjamin Herrenschmidt <[email protected]>
---
For the powerpc tree, not for 2.6.15.
arch/powerpc/kernel/prom_parse.c +1 -1
@@ -276,7 +276,7 @@ static int of_translate_one(struct devic finish:of_dump_addr ("OF: parent translation for:" , addr, pna); -DBG ("OF: with offset: %lx\n" , offset); +DBG ("OF: with offset: " PRu64"\n" , offset);/* Translate it into parent bus space */ return pbus->translate (addr, offset, pna);
arch/powerpc/kernel/udbg.c +7 -4
@@ -17,7 +17,7 @@#include <asm/processor.h> void (*udbg_putc)(char c); -char (*udbg_getc)(void ); +int (*udbg_getc)(void );int (*udbg_getc_poll)(void );/* udbg library, used by xmon et al */
@@ -57,8 +57,8 @@ int udbg_write(const char *s, int n)int udbg_read (char *buf,int buflen) { -char c, *p = buf; -int i; +char *p = buf; +int i, c;if (!udbg_getc)return 0 ;
@@ -66,8 +66,11 @@ int udbg_read(char *buf, int buflen)for (i =0 ; i < buflen; ++i) {do { c =udbg_getc (); +if (c ==-1 && i ==0 ) +return -1 ; + }while (c ==0x11 || c ==0x13 ); -if (c ==0 ) +if (c ==0 || c ==-1 )break ; *p++ = c; }
arch/powerpc/kernel/udbg_16550.c +2 -2
@@ -69,14 +69,14 @@ static int udbg_550_getc_poll(void)return -1 ; } -static char udbg_550_getc (void ) +static int udbg_550_getc (void ) {if (udbg_comport) {while ((in_8 (&udbg_comport->lsr) &LSR_DR ) ==0 )/* wait for char */ ;return in_8 (&udbg_comport->rbr); } -return 0 ; +return -1 ; } void udbg_init_uart(void __iomem *comport, unsigned int speed,
arch/powerpc/platforms/powermac/udbg_adb.c +4 -4
@@ -29,7 +29,7 @@*/ static void (*udbg_adb_old_putc)(char c); -static char (*udbg_adb_old_getc)(void ); +static int (*udbg_adb_old_getc)(void );static int (*udbg_adb_old_getc_poll)(void ); static enum {
@@ -73,7 +73,7 @@ static unsigned char xmon_shift_keytab[1"\0.\0*\0+\0\0\0\0\0/\r\0-\0" /* 0x40 - 0x4f */ "\0\0000123456789\0\0\0" ;/* 0x50 - 0x5f */ -static char udbg_adb_local_getc (void ) +static int udbg_adb_local_getc (void ) {int k, t, on;
@@ -116,7 +116,7 @@ static char udbg_adb_local_getc(void) }#endif /* CONFIG_BOOTX_TEXT */ -static char udbg_adb_getc (void ) +static int udbg_adb_getc (void ) {#ifdef CONFIG_BOOTX_TEXT if (udbg_adb_use_btext && input_type != input_adb_none)
@@ -192,7 +192,7 @@ int udbg_adb_init(int force_btext)*/ for (np =NULL ; (np =of_find_node_by_name (np,"keyboard" )) !=NULL ;) {struct device_node *parent =of_get_parent (np); -int found = (parent && !strcmp (parent->type,"adb" ) ==0 ); +int found = (parent &&strcmp (parent->type,"adb" ) ==0 );of_node_put (parent);if (found)break ;
arch/powerpc/platforms/powermac/udbg_scc.c +2 -2
@@ -47,14 +47,14 @@ static int udbg_scc_getc_poll(void)return -1 ; } -static char udbg_scc_getc (void ) +static int udbg_scc_getc (void ) {if (sccc) {while ((in_8 (sccc) &SCC_RXRDY ) ==0 ) ;return in_8 (sccd); } -return 0 ; +return -1 ; }static unsigned char scc_inittab[] = {
arch/powerpc/platforms/pseries/lpar.c +2 -2
@@ -112,7 +112,7 @@ static int udbg_hvsi_getc_poll(void)return ch; } -static char udbg_hvsi_getc (void ) +static int udbg_hvsi_getc (void ) {int ch;for (;;) {
@@ -173,7 +173,7 @@ static int udbg_getc_pollLP(void)return ch; } -static char udbg_getcLP (void ) +static int udbg_getcLP (void ) {int ch;for (;;) {
arch/powerpc/xmon/xmon.c +3 -1
@@ -450,7 +450,6 @@ int xmon_core(struct pt_regs *regs, int leave:cpu_clear (cpu, cpus_in_xmon); xmon_fault_jmp[cpu] =NULL ; -#else /* UP is simple... */ if (in_xmon) {
@@ -805,7 +804,10 @@ cmds(struct pt_regs *excp)break ;case 'x' :case 'X' : +return cmd;case EOF : +printf (" <no input ...>\n" ); +mdelay (2000 );return cmd;case '?' :printf (help_string);
include/asm-powerpc/udbg.h +1 -1
@@ -14,7 +14,7 @@#include <linux/init.h> extern void (*udbg_putc)(char c); -extern char (*udbg_getc)(void ); +extern int (*udbg_getc)(void );extern int (*udbg_getc_poll)(void );extern void udbg_puts (const char *s);
drivers/macintosh/via-pmu.c +2 -2
@@ -313,7 +313,7 @@ int __init find_via_pmu(void) goto fail; } taddr =of_translate_address (vias, reg); -if (taddr ==0 ) { +if (taddr ==OF_BAD_ADDR ) {printk (KERN_ERR "via-pmu: Can't translate address !\n" ); goto fail; }
@@ -376,7 +376,7 @@ int __init find_via_pmu(void)return 0 ; } -printk (KERN_INFO "PMU driver %d initialized for %s, firmware: %02x\n" , +printk (KERN_INFO "PMU driver v%d initialized for %s, firmware: %02x\n" ,PMU_DRIVER_VERSION , pbook_type[pmu_kind], pmu_version); sys_ctrler =SYS_CTRLER_PMU ;