mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 07:38:10 +00:00
[MIPS] Add early console for Cobalt.
Signed-off-by: Peter Horton <pdh@colonel-panic.org> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
c4a1745aa0
commit
e87dddeb92
6 changed files with 60 additions and 8 deletions
|
@ -790,6 +790,7 @@ source "arch/mips/tx4927/Kconfig"
|
||||||
source "arch/mips/tx4938/Kconfig"
|
source "arch/mips/tx4938/Kconfig"
|
||||||
source "arch/mips/vr41xx/Kconfig"
|
source "arch/mips/vr41xx/Kconfig"
|
||||||
source "arch/mips/philips/pnx8550/common/Kconfig"
|
source "arch/mips/philips/pnx8550/common/Kconfig"
|
||||||
|
source "arch/mips/cobalt/Kconfig"
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
|
7
arch/mips/cobalt/Kconfig
Normal file
7
arch/mips/cobalt/Kconfig
Normal file
|
@ -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.
|
|
@ -4,4 +4,6 @@
|
||||||
|
|
||||||
obj-y := irq.o int-handler.o reset.o setup.o
|
obj-y := irq.o int-handler.o reset.o setup.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_EARLY_PRINTK) += console.o
|
||||||
|
|
||||||
EXTRA_AFLAGS := $(CFLAGS)
|
EXTRA_AFLAGS := $(CFLAGS)
|
||||||
|
|
43
arch/mips/cobalt/console.c
Normal file
43
arch/mips/cobalt/console.c
Normal file
|
@ -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");
|
||||||
|
}
|
|
@ -31,6 +31,7 @@
|
||||||
extern void cobalt_machine_restart(char *command);
|
extern void cobalt_machine_restart(char *command);
|
||||||
extern void cobalt_machine_halt(void);
|
extern void cobalt_machine_halt(void);
|
||||||
extern void cobalt_machine_power_off(void);
|
extern void cobalt_machine_power_off(void);
|
||||||
|
extern void cobalt_early_console(void);
|
||||||
|
|
||||||
int cobalt_board_id;
|
int cobalt_board_id;
|
||||||
|
|
||||||
|
@ -109,14 +110,6 @@ void __init plat_setup(void)
|
||||||
/* I/O port resource must include UART and LCD/buttons */
|
/* I/O port resource must include UART and LCD/buttons */
|
||||||
ioport_resource.end = 0x0fffffff;
|
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 */
|
/* request I/O space for devices used on all i[345]86 PCs */
|
||||||
for (i = 0; i < COBALT_IO_RESOURCES; i++)
|
for (i = 0; i < COBALT_IO_RESOURCES; i++)
|
||||||
request_resource(&ioport_resource, 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
|
#ifdef CONFIG_SERIAL_8250
|
||||||
if (cobalt_board_id > COBALT_BRD_ID_RAQ1) {
|
if (cobalt_board_id > COBALT_BRD_ID_RAQ1) {
|
||||||
|
|
||||||
|
#ifdef CONFIG_EARLY_PRINTK
|
||||||
|
cobalt_early_console();
|
||||||
|
#endif
|
||||||
|
|
||||||
uart.line = 0;
|
uart.line = 0;
|
||||||
uart.type = PORT_UNKNOWN;
|
uart.type = PORT_UNKNOWN;
|
||||||
uart.uartclk = 18432000;
|
uart.uartclk = 18432000;
|
||||||
|
|
|
@ -113,4 +113,6 @@ do { \
|
||||||
# define COBALT_KEY_SELECT (1 << 7)
|
# define COBALT_KEY_SELECT (1 << 7)
|
||||||
# define COBALT_KEY_MASK 0xfe
|
# define COBALT_KEY_MASK 0xfe
|
||||||
|
|
||||||
|
#define COBALT_UART ((volatile unsigned char *) CKSEG1ADDR(0x1c800000))
|
||||||
|
|
||||||
#endif /* __ASM_COBALT_H */
|
#endif /* __ASM_COBALT_H */
|
||||||
|
|
Loading…
Reference in a new issue