From: Frank Rowand <frank.rowand@xxxxxxxxxxx> Implement early printk in the serial_txx9 driver, and enable for the Toshiba RBTX4927 board. This is needed for the connect to GDB console message. Signed-off-by: Frank Rowand <frank.rowand@xxxxxxxxxxx> --- arch/mips/Kconfig | 1 1 + 0 - 0 ! arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c | 6 6 + 0 - 0 ! drivers/serial/serial_txx9.c | 39 39 + 0 - 0 ! 3 files changed, 46 insertions(+) Index: linux-2.6.24-rc7/arch/mips/Kconfig =================================================================== --- linux-2.6.24-rc7.orig/arch/mips/Kconfig +++ linux-2.6.24-rc7/arch/mips/Kconfig @@ -631,6 +631,7 @@ config TOSHIBA_RBTX4927 select I8259 if TOSHIBA_FPCIB0 select SWAP_IO_SPACE select SYS_HAS_CPU_TX49XX + select SYS_HAS_EARLY_PRINTK select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_64BIT_KERNEL select SYS_SUPPORTS_LITTLE_ENDIAN Index: linux-2.6.24-rc7/drivers/serial/serial_txx9.c =================================================================== --- linux-2.6.24-rc7.orig/drivers/serial/serial_txx9.c +++ linux-2.6.24-rc7/drivers/serial/serial_txx9.c @@ -1198,6 +1198,45 @@ MODULE_DEVICE_TABLE(pci, serial_txx9_pci static struct platform_device *serial_txx9_plat_devs; +#ifdef CONFIG_EARLY_PRINTK + +/* + * Do NOT request the console resources, allows normal driver to initialize + * console later. + */ + +static int prom_putchar_port = -1; + +void early_printk_serial_txx9_console_setup(void) +{ + prom_putchar_port = 0; +} + +void prom_putchar(char ch) +{ + unsigned int status; + struct uart_txx9_port *up; + + if (prom_putchar_port == -1) + return; + + up = &serial_txx9_ports[prom_putchar_port]; + + if (ch == '\n') + prom_putchar('\r'); + + while (1) { + status = sio_in(up, TXX9_SICISR); + if (status & TXX9_SICISR_TRDY) { + sio_out(up, TXX9_SITFIFO, (u32)ch); + break; + } + } +} + +#endif + + static int __init serial_txx9_init(void) { int ret; Index: linux-2.6.24-rc7/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c =================================================================== --- linux-2.6.24-rc7.orig/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c +++ linux-2.6.24-rc7/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c @@ -913,6 +913,12 @@ void __init toshiba_rbtx4927_setup(void) if (strstr(argptr, "console=") == NULL) { strcat(argptr, " console=ttyS0,38400"); } +#ifdef CONFIG_EARLY_PRINTK + { + extern void early_printk_serial_txx9_console_setup(void); + early_printk_serial_txx9_console_setup(); + } +#endif #endif #endif