 93fd03a8c6
			
		
	
	
	93fd03a8c6
	
	
	
		
			
			This patch allows an earlyprintk console if CONFIG_DEBUG_LL is enabled, using the printch asm function. The patch is based on the original work by Sascha Hauer. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Cc: Sascha Hauer <s.hauer@pengutronix.de> Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Acked-by: Pavel Machek <pavel@ucw.cz>
		
			
				
	
	
		
			57 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *  linux/arch/arm/kernel/early_printk.c
 | |
|  *
 | |
|  *  Copyright (C) 2009 Sascha Hauer <s.hauer@pengutronix.de>
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License version 2 as
 | |
|  * published by the Free Software Foundation.
 | |
|  */
 | |
| 
 | |
| #include <linux/kernel.h>
 | |
| #include <linux/console.h>
 | |
| #include <linux/init.h>
 | |
| 
 | |
| extern void printch(int);
 | |
| 
 | |
| static void early_write(const char *s, unsigned n)
 | |
| {
 | |
| 	while (n-- > 0) {
 | |
| 		if (*s == '\n')
 | |
| 			printch('\r');
 | |
| 		printch(*s);
 | |
| 		s++;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| static void early_console_write(struct console *con, const char *s, unsigned n)
 | |
| {
 | |
| 	early_write(s, n);
 | |
| }
 | |
| 
 | |
| static struct console early_console = {
 | |
| 	.name =		"earlycon",
 | |
| 	.write =	early_console_write,
 | |
| 	.flags =	CON_PRINTBUFFER | CON_BOOT,
 | |
| 	.index =	-1,
 | |
| };
 | |
| 
 | |
| asmlinkage void early_printk(const char *fmt, ...)
 | |
| {
 | |
| 	char buf[512];
 | |
| 	int n;
 | |
| 	va_list ap;
 | |
| 
 | |
| 	va_start(ap, fmt);
 | |
| 	n = vscnprintf(buf, sizeof(buf), fmt, ap);
 | |
| 	early_write(buf, n);
 | |
| 	va_end(ap);
 | |
| }
 | |
| 
 | |
| static int __init setup_early_printk(char *buf)
 | |
| {
 | |
| 	register_console(&early_console);
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| early_param("earlyprintk", setup_early_printk);
 |