Skip to content

Commit

Permalink
[MIPS] Add early console for Cobalt.
Browse files Browse the repository at this point in the history
    
Signed-off-by: Peter Horton <[email protected]>
Signed-off-by: Ralf Baechle <[email protected]>
  • Loading branch information
Peter Horton authored and ralfbaechle committed Mar 21, 2006
1 parent c4a1745 commit e87ddde
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 8 deletions.
1 change: 1 addition & 0 deletions arch/mips/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
7 changes: 7 additions & 0 deletions arch/mips/cobalt/Kconfig
Original file line number Diff line number Diff line change
@@ -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.
2 changes: 2 additions & 0 deletions arch/mips/cobalt/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@

obj-y := irq.o int-handler.o reset.o setup.o

obj-$(CONFIG_EARLY_PRINTK) += console.o

EXTRA_AFLAGS := $(CFLAGS)
43 changes: 43 additions & 0 deletions arch/mips/cobalt/console.c
Original file line number Diff line number Diff line change
@@ -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");
}
13 changes: 5 additions & 8 deletions arch/mips/cobalt/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand All @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions include/asm-mips/mach-cobalt/cobalt.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

0 comments on commit e87ddde

Please sign in to comment.