Commit c8f1c8be authored by Milton Miller's avatar Milton Miller Committed by Paul Mackerras

[PATCH] ppc64: Take udbg out of ppc_md

Take udbg out of ppc_md. Allows us to not overwrite early udbg inits
when assigning ppc_md.
Signed-off-by: default avatarMilton Miller <miltonm@bga.com>
Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 7f853352
...@@ -192,9 +192,9 @@ static unsigned char udbg_getcLP(void) ...@@ -192,9 +192,9 @@ static unsigned char udbg_getcLP(void)
void udbg_init_debug_lpar(void) void udbg_init_debug_lpar(void)
{ {
vtermno = 0; vtermno = 0;
ppc_md.udbg_putc = udbg_putcLP; udbg_putc = udbg_putcLP;
ppc_md.udbg_getc = udbg_getcLP; udbg_getc = udbg_getcLP;
ppc_md.udbg_getc_poll = udbg_getc_pollLP; udbg_getc_poll = udbg_getc_pollLP;
} }
/* returns 0 if couldn't find or use /chosen/stdout as console */ /* returns 0 if couldn't find or use /chosen/stdout as console */
...@@ -227,18 +227,18 @@ int find_udbg_vterm(void) ...@@ -227,18 +227,18 @@ int find_udbg_vterm(void)
termno = (u32 *)get_property(stdout_node, "reg", NULL); termno = (u32 *)get_property(stdout_node, "reg", NULL);
if (termno) { if (termno) {
vtermno = termno[0]; vtermno = termno[0];
ppc_md.udbg_putc = udbg_putcLP; udbg_putc = udbg_putcLP;
ppc_md.udbg_getc = udbg_getcLP; udbg_getc = udbg_getcLP;
ppc_md.udbg_getc_poll = udbg_getc_pollLP; udbg_getc_poll = udbg_getc_pollLP;
found = 1; found = 1;
} }
} else if (device_is_compatible(stdout_node, "hvterm-protocol")) { } else if (device_is_compatible(stdout_node, "hvterm-protocol")) {
termno = (u32 *)get_property(stdout_node, "reg", NULL); termno = (u32 *)get_property(stdout_node, "reg", NULL);
if (termno) { if (termno) {
vtermno = termno[0]; vtermno = termno[0];
ppc_md.udbg_putc = udbg_hvsi_putc; udbg_putc = udbg_hvsi_putc;
ppc_md.udbg_getc = udbg_hvsi_getc; udbg_getc = udbg_hvsi_getc;
ppc_md.udbg_getc_poll = udbg_hvsi_getc_poll; udbg_getc_poll = udbg_hvsi_getc_poll;
found = 1; found = 1;
} }
} }
......
...@@ -332,16 +332,13 @@ static void __init pmac_init_early(void) ...@@ -332,16 +332,13 @@ static void __init pmac_init_early(void)
sccdbg = 1; sccdbg = 1;
udbg_init_scc(NULL); udbg_init_scc(NULL);
} }
else {
#ifdef CONFIG_BOOTX_TEXT #ifdef CONFIG_BOOTX_TEXT
else {
init_boot_display(); init_boot_display();
ppc_md.udbg_putc = btext_putc; udbg_putc = btext_putc;
ppc_md.udbg_getc = NULL;
ppc_md.udbg_getc_poll = NULL;
#endif /* CONFIG_BOOTX_TEXT */
} }
#endif /* CONFIG_BOOTX_TEXT */
/* Setup interrupt mapping options */ /* Setup interrupt mapping options */
ppc64_interrupt_controller = IC_OPEN_PIC; ppc64_interrupt_controller = IC_OPEN_PIC;
......
...@@ -89,7 +89,7 @@ extern void udbg_init_maple_realmode(void); ...@@ -89,7 +89,7 @@ extern void udbg_init_maple_realmode(void);
#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() \
do { ppc_md.udbg_putc = call_rtas_display_status_delay; } while(0) do { udbg_putc = call_rtas_display_status_delay; } while(0)
#endif #endif
/* extern void *stab; */ /* extern void *stab; */
...@@ -425,12 +425,6 @@ void __init early_setup(unsigned long dt_ptr) ...@@ -425,12 +425,6 @@ void __init early_setup(unsigned long dt_ptr)
} }
ppc_md = **mach; ppc_md = **mach;
/* our udbg callbacks got overriden by the above, let's put them
* back in. Ultimately, I want those things to be split from the
* main ppc_md
*/
EARLY_DEBUG_INIT();
DBG("Found, Initializing memory management...\n"); DBG("Found, Initializing memory management...\n");
/* /*
......
...@@ -20,14 +20,18 @@ ...@@ -20,14 +20,18 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/prom.h> #include <asm/prom.h>
void (*udbg_putc)(unsigned char c);
unsigned char (*udbg_getc)(void);
int (*udbg_getc_poll)(void);
void udbg_puts(const char *s) void udbg_puts(const char *s)
{ {
if (ppc_md.udbg_putc) { if (udbg_putc) {
char c; char c;
if (s && *s != '\0') { if (s && *s != '\0') {
while ((c = *s++) != '\0') while ((c = *s++) != '\0')
ppc_md.udbg_putc(c); udbg_putc(c);
} }
} }
#if 0 #if 0
...@@ -42,12 +46,12 @@ int udbg_write(const char *s, int n) ...@@ -42,12 +46,12 @@ int udbg_write(const char *s, int n)
int remain = n; int remain = n;
char c; char c;
if (!ppc_md.udbg_putc) if (!udbg_putc)
return 0; return 0;
if (s && *s != '\0') { if (s && *s != '\0') {
while (((c = *s++) != '\0') && (remain-- > 0)) { while (((c = *s++) != '\0') && (remain-- > 0)) {
ppc_md.udbg_putc(c); udbg_putc(c);
} }
} }
...@@ -59,12 +63,12 @@ int udbg_read(char *buf, int buflen) ...@@ -59,12 +63,12 @@ int udbg_read(char *buf, int buflen)
char c, *p = buf; char c, *p = buf;
int i; int i;
if (!ppc_md.udbg_getc) if (!udbg_getc)
return 0; return 0;
for (i = 0; i < buflen; ++i) { for (i = 0; i < buflen; ++i) {
do { do {
c = ppc_md.udbg_getc(); c = udbg_getc();
} while (c == 0x11 || c == 0x13); } while (c == 0x11 || c == 0x13);
if (c == 0) if (c == 0)
break; break;
......
...@@ -99,9 +99,9 @@ void udbg_init_uart(void __iomem *comport, unsigned int speed) ...@@ -99,9 +99,9 @@ void udbg_init_uart(void __iomem *comport, unsigned int speed)
out_8(&udbg_comport->lcr, 0x03); /* 8 data, 1 stop, no parity */ out_8(&udbg_comport->lcr, 0x03); /* 8 data, 1 stop, no parity */
out_8(&udbg_comport->mcr, 0x03); /* RTS/DTR */ out_8(&udbg_comport->mcr, 0x03); /* RTS/DTR */
out_8(&udbg_comport->fcr ,0x07); /* Clear & enable FIFOs */ out_8(&udbg_comport->fcr ,0x07); /* Clear & enable FIFOs */
ppc_md.udbg_putc = udbg_550_putc; udbg_putc = udbg_550_putc;
ppc_md.udbg_getc = udbg_550_getc; udbg_getc = udbg_550_getc;
ppc_md.udbg_getc_poll = udbg_550_getc_poll; udbg_getc_poll = udbg_550_getc_poll;
} }
} }
...@@ -121,8 +121,8 @@ void udbg_init_maple_realmode(void) ...@@ -121,8 +121,8 @@ void udbg_init_maple_realmode(void)
{ {
udbg_comport = (volatile struct NS16550 __iomem *)0xf40003f8; udbg_comport = (volatile struct NS16550 __iomem *)0xf40003f8;
ppc_md.udbg_putc = udbg_maple_real_putc; udbg_putc = udbg_maple_real_putc;
ppc_md.udbg_getc = NULL; udbg_getc = NULL;
ppc_md.udbg_getc_poll = NULL; udbg_getc_poll = NULL;
} }
#endif /* CONFIG_PPC_MAPLE */ #endif /* CONFIG_PPC_MAPLE */
...@@ -111,9 +111,9 @@ void udbg_init_scc(struct device_node *np) ...@@ -111,9 +111,9 @@ void udbg_init_scc(struct device_node *np)
for (i = 0; i < sizeof(scc_inittab); ++i) for (i = 0; i < sizeof(scc_inittab); ++i)
out_8(sccc, scc_inittab[i]); out_8(sccc, scc_inittab[i]);
ppc_md.udbg_putc = udbg_scc_putc; udbg_putc = udbg_scc_putc;
ppc_md.udbg_getc = udbg_scc_getc; udbg_getc = udbg_scc_getc;
ppc_md.udbg_getc_poll = udbg_scc_getc_poll; udbg_getc_poll = udbg_scc_getc_poll;
udbg_puts("Hello World !\n"); udbg_puts("Hello World !\n");
} }
...@@ -132,7 +132,7 @@ void udbg_init_pmac_realmode(void) ...@@ -132,7 +132,7 @@ void udbg_init_pmac_realmode(void)
sccc = (volatile u8 __iomem *)0x80013020ul; sccc = (volatile u8 __iomem *)0x80013020ul;
sccd = (volatile u8 __iomem *)0x80013030ul; sccd = (volatile u8 __iomem *)0x80013030ul;
ppc_md.udbg_putc = udbg_real_scc_putc; udbg_putc = udbg_real_scc_putc;
ppc_md.udbg_getc = NULL; udbg_getc = NULL;
ppc_md.udbg_getc_poll = NULL; udbg_getc_poll = NULL;
} }
...@@ -61,8 +61,8 @@ xmon_read(void *handle, void *ptr, int nb) ...@@ -61,8 +61,8 @@ xmon_read(void *handle, void *ptr, int nb)
int int
xmon_read_poll(void) xmon_read_poll(void)
{ {
if (ppc_md.udbg_getc_poll) if (udbg_getc_poll)
return ppc_md.udbg_getc_poll(); return udbg_getc_poll();
return -1; return -1;
} }
......
...@@ -103,11 +103,6 @@ struct machdep_calls { ...@@ -103,11 +103,6 @@ struct machdep_calls {
void (*progress)(char *, unsigned short); void (*progress)(char *, unsigned short);
/* Debug interface. Low level I/O to some terminal device */
void (*udbg_putc)(unsigned char c);
unsigned char (*udbg_getc)(void);
int (*udbg_getc_poll)(void);
/* Interface for platform error logging */ /* Interface for platform error logging */
void (*log_error)(char *buf, unsigned int err_type, int fatal); void (*log_error)(char *buf, unsigned int err_type, int fatal);
......
...@@ -12,17 +12,20 @@ ...@@ -12,17 +12,20 @@
* 2 of the License, or (at your option) any later version. * 2 of the License, or (at your option) any later version.
*/ */
void udbg_init_uart(void __iomem *comport, unsigned int speed); extern void (*udbg_putc)(unsigned char c);
void udbg_putc(unsigned char c); extern unsigned char (*udbg_getc)(void);
unsigned char udbg_getc(void); extern int (*udbg_getc_poll)(void);
int udbg_getc_poll(void);
void udbg_puts(const char *s); extern void udbg_puts(const char *s);
int udbg_write(const char *s, int n); extern int udbg_write(const char *s, int n);
int udbg_read(char *buf, int buflen); extern int udbg_read(char *buf, int buflen);
struct console; struct console;
void udbg_console_write(struct console *con, const char *s, unsigned int n); extern void udbg_console_write(struct console *con, const char *s, unsigned int n);
void udbg_printf(const char *fmt, ...); extern void udbg_printf(const char *fmt, ...);
void udbg_ppcdbg(unsigned long flags, const char *fmt, ...); extern void udbg_ppcdbg(unsigned long flags, const char *fmt, ...);
unsigned long udbg_ifdebug(unsigned long flags); extern unsigned long udbg_ifdebug(unsigned long flags);
extern void udbg_init_uart(void __iomem *comport, unsigned int speed);
#endif #endif
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