From cf6aa4a5c333d235e1d146ba74bf07a3e4edcfe0 Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Mon, 4 Apr 2011 15:45:06 +0200 Subject: [PATCH] --- yaml --- r: 260732 b: refs/heads/master c: e721a45fbed13a52093d2cc1962dbb8a754462ea h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/microblaze/include/asm/setup.h | 1 + trunk/arch/microblaze/kernel/early_printk.c | 20 ++++++++++++++++---- trunk/arch/microblaze/kernel/setup.c | 5 +++++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 987af7d2df5a..e0ba13f376d8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 95ce618f85a86a7383c1a3e39278be3de84b1b99 +refs/heads/master: e721a45fbed13a52093d2cc1962dbb8a754462ea diff --git a/trunk/arch/microblaze/include/asm/setup.h b/trunk/arch/microblaze/include/asm/setup.h index 8f3968971e4e..904e5ef6a11b 100644 --- a/trunk/arch/microblaze/include/asm/setup.h +++ b/trunk/arch/microblaze/include/asm/setup.h @@ -23,6 +23,7 @@ extern char cmd_line[COMMAND_LINE_SIZE]; void early_printk(const char *fmt, ...); int setup_early_printk(char *opt); +void remap_early_printk(void); void disable_early_printk(void); #if defined(CONFIG_EARLY_PRINTK) diff --git a/trunk/arch/microblaze/kernel/early_printk.c b/trunk/arch/microblaze/kernel/early_printk.c index c3616a080ebf..8f8384e98bf7 100644 --- a/trunk/arch/microblaze/kernel/early_printk.c +++ b/trunk/arch/microblaze/kernel/early_printk.c @@ -60,7 +60,7 @@ static void early_printk_uartlite_write(struct console *unused, static struct console early_serial_uartlite_console = { .name = "earlyser", .write = early_printk_uartlite_write, - .flags = CON_PRINTBUFFER, + .flags = CON_PRINTBUFFER | CON_BOOT, .index = -1, }; #endif /* CONFIG_SERIAL_UARTLITE_CONSOLE */ @@ -104,7 +104,7 @@ static void early_printk_uart16550_write(struct console *unused, static struct console early_serial_uart16550_console = { .name = "earlyser", .write = early_printk_uart16550_write, - .flags = CON_PRINTBUFFER, + .flags = CON_PRINTBUFFER | CON_BOOT, .index = -1, }; #endif /* CONFIG_SERIAL_8250_CONSOLE */ @@ -141,7 +141,7 @@ int __init setup_early_printk(char *opt) early_printk("early_printk_console is enabled at 0x%08x\n", base_addr); - /* register_console(early_console); */ + register_console(early_console); return 0; } @@ -160,7 +160,7 @@ int __init setup_early_printk(char *opt) early_printk("early_printk_console is enabled at 0x%08x\n", base_addr); - /* register_console(early_console); */ + register_console(early_console); return 0; } @@ -169,6 +169,18 @@ int __init setup_early_printk(char *opt) return 1; } +/* Remap early console to virtual address and do not allocate one TLB + * only for early console because of performance degression */ +void __init remap_early_printk(void) +{ + if (!early_console_initialized || !early_console) + return; + printk(KERN_INFO "early_printk_console remaping from 0x%x to ", + base_addr); + base_addr = (u32) ioremap(base_addr, PAGE_SIZE); + printk(KERN_CONT "0x%x\n", base_addr); +} + void __init disable_early_printk(void) { if (!early_console_initialized || !early_console) diff --git a/trunk/arch/microblaze/kernel/setup.c b/trunk/arch/microblaze/kernel/setup.c index 8e2c09b7ff26..0e654a12d37e 100644 --- a/trunk/arch/microblaze/kernel/setup.c +++ b/trunk/arch/microblaze/kernel/setup.c @@ -59,6 +59,11 @@ void __init setup_arch(char **cmdline_p) setup_memory(); +#ifdef CONFIG_EARLY_PRINTK + /* remap early console to virtual address */ + remap_early_printk(); +#endif + xilinx_pci_init(); #if defined(CONFIG_SELFMOD_INTC) || defined(CONFIG_SELFMOD_TIMER)