diff options
| -rw-r--r-- | arch/mips/Kconfig | 1 | ||||
| -rw-r--r-- | arch/mips/cobalt/Kconfig | 7 | ||||
| -rw-r--r-- | arch/mips/cobalt/Makefile | 2 | ||||
| -rw-r--r-- | arch/mips/cobalt/console.c | 43 | ||||
| -rw-r--r-- | arch/mips/cobalt/setup.c | 13 | ||||
| -rw-r--r-- | include/asm-mips/mach-cobalt/cobalt.h | 2 | 
6 files changed, 60 insertions, 8 deletions
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 3a0f89d2c8d..9d1e78f9c06 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -790,6 +790,7 @@ source "arch/mips/tx4927/Kconfig"  source "arch/mips/tx4938/Kconfig"  source "arch/mips/vr41xx/Kconfig"  source "arch/mips/philips/pnx8550/common/Kconfig" +source "arch/mips/cobalt/Kconfig"  endmenu diff --git a/arch/mips/cobalt/Kconfig b/arch/mips/cobalt/Kconfig new file mode 100644 index 00000000000..7c42b088d16 --- /dev/null +++ b/arch/mips/cobalt/Kconfig @@ -0,0 +1,7 @@ +config EARLY_PRINTK +	bool "Early console support" +	depends on MIPS_COBALT +	help +	  Provide early console support by direct access to the +	  on board UART. The UART must have been previously +	  initialised by the boot loader. diff --git a/arch/mips/cobalt/Makefile b/arch/mips/cobalt/Makefile index 3b6b7579d1d..720e757b2b6 100644 --- a/arch/mips/cobalt/Makefile +++ b/arch/mips/cobalt/Makefile @@ -4,4 +4,6 @@  obj-y	 := irq.o int-handler.o reset.o setup.o +obj-$(CONFIG_EARLY_PRINTK)	+= console.o +  EXTRA_AFLAGS := $(CFLAGS) diff --git a/arch/mips/cobalt/console.c b/arch/mips/cobalt/console.c new file mode 100644 index 00000000000..45c2d27c756 --- /dev/null +++ b/arch/mips/cobalt/console.c @@ -0,0 +1,43 @@ +/* + * (C) P. Horton 2006 + */ + +#include <linux/config.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/console.h> +#include <linux/serial_reg.h> +#include <asm/addrspace.h> +#include <asm/mach-cobalt/cobalt.h> + +static void putchar(int c) +{ +	if(c == '\n') +		putchar('\r'); + +	while(!(COBALT_UART[UART_LSR] & UART_LSR_THRE)) +		; + +	COBALT_UART[UART_TX] = c; +} + +static void cons_write(struct console *c, const char *s, unsigned n) +{ +	while(n-- && *s) +		putchar(*s++); +} + +static struct console cons_info = +{ +	.name	= "uart", +	.write	= cons_write, +	.flags	= CON_PRINTBUFFER | CON_BOOT, +	.index	= -1, +}; + +void __init cobalt_early_console(void) +{ +	register_console(&cons_info); + +	printk("Cobalt: early console registered\n"); +} diff --git a/arch/mips/cobalt/setup.c b/arch/mips/cobalt/setup.c index b9713a72305..4f9ea121002 100644 --- a/arch/mips/cobalt/setup.c +++ b/arch/mips/cobalt/setup.c @@ -31,6 +31,7 @@  extern void cobalt_machine_restart(char *command);  extern void cobalt_machine_halt(void);  extern void cobalt_machine_power_off(void); +extern void cobalt_early_console(void);  int cobalt_board_id; @@ -109,14 +110,6 @@ void __init plat_setup(void)  	/* I/O port resource must include UART and LCD/buttons */  	ioport_resource.end = 0x0fffffff; -	/* -	 * This is a prom style console. We just poke at the -	 *  UART to make it talk. -	 * Only use this console if you really screw up and can't -	 *  get to the stage of setting up a real serial console. -	 */ -	/*ns16550_setup_console();*/ -  	/* request I/O space for devices used on all i[345]86 PCs */  	for (i = 0; i < COBALT_IO_RESOURCES; i++)  		request_resource(&ioport_resource, cobalt_io_resources + i); @@ -136,6 +129,10 @@ void __init plat_setup(void)  #ifdef CONFIG_SERIAL_8250  	if (cobalt_board_id > COBALT_BRD_ID_RAQ1) { +#ifdef CONFIG_EARLY_PRINTK +		cobalt_early_console(); +#endif +  		uart.line	= 0;  		uart.type	= PORT_UNKNOWN;  		uart.uartclk	= 18432000; diff --git a/include/asm-mips/mach-cobalt/cobalt.h b/include/asm-mips/mach-cobalt/cobalt.h index 78e1df2095f..b3c5ecbec03 100644 --- a/include/asm-mips/mach-cobalt/cobalt.h +++ b/include/asm-mips/mach-cobalt/cobalt.h @@ -113,4 +113,6 @@ do {									\  # define COBALT_KEY_SELECT	(1 << 7)  # define COBALT_KEY_MASK	0xfe +#define COBALT_UART		((volatile unsigned char *) CKSEG1ADDR(0x1c800000)) +  #endif /* __ASM_COBALT_H */  |