summaryrefslogtreecommitdiffstats
path: root/arch/microblaze/kernel/early_printk.c
diff options
context:
space:
mode:
authorMichal Simek <monstr@monstr.eu>2011-04-04 15:45:06 +0200
committerMichal Simek <monstr@monstr.eu>2011-07-25 09:23:47 +0200
commite721a45fbed13a52093d2cc1962dbb8a754462ea (patch)
treee4796291b72cdad4d7b64e1c9d19269008005fa8 /arch/microblaze/kernel/early_printk.c
parent95ce618f85a86a7383c1a3e39278be3de84b1b99 (diff)
microblaze: Get early printk console earlier
1. Register early console as standard console 2. Enable CON_BOOT console flag to ensure auto-unregistering by the kernel 3. remap_early_printk function remap physical console baseaddr to virtual space Usage specific function for console remap is done after memory initialization with IRQ turn off that's why there is not necessary to protect it. The reason for remapping is that the kernel use TLB 63 for 1:1 address mapping to be able to use console in very early boot-up phase. But allocating one TLB just for console caused performance degression that's why ioremaps create new mapping and TLB 63 is automatically released and ready to use. Signed-off-by: Michal Simek <monstr@monstr.eu> CC: Russell King <linux@arm.linux.org.uk> CC: Ralf Baechle <ralf@linux-mips.org> CC: Ingo Molnar <mingo@redhat.com> CC: Alan Cox <alan@linux.intel.com> CC: <linux-serial@vger.kernel.org> CC: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/microblaze/kernel/early_printk.c')
-rw-r--r--arch/microblaze/kernel/early_printk.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/arch/microblaze/kernel/early_printk.c b/arch/microblaze/kernel/early_printk.c
index c3616a080eb..8f8384e98bf 100644
--- a/arch/microblaze/kernel/early_printk.c
+++ b/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)