mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	hvc: dcc: Add earlycon support
Add DCC earlycon support for early printks. The patch is useful for SoC bringup where HW serial console is broken. Signed-off-by: Michal Simek <michal.simek@xilinx.com> Link: https://lore.kernel.org/r/41e2920a6348e65b2e986b0e65b66531e87cd756.1570543923.git.michal.simek@xilinx.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									33364d63c7
								
							
						
					
					
						commit
						d1a1af2cdf
					
				
					 1 changed files with 28 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -1,7 +1,10 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0
 | 
			
		||||
/* Copyright (c) 2010, 2014 The Linux Foundation. All rights reserved.  */
 | 
			
		||||
 | 
			
		||||
#include <linux/console.h>
 | 
			
		||||
#include <linux/init.h>
 | 
			
		||||
#include <linux/serial.h>
 | 
			
		||||
#include <linux/serial_core.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/dcc.h>
 | 
			
		||||
#include <asm/processor.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -12,6 +15,31 @@
 | 
			
		|||
#define DCC_STATUS_RX		(1 << 30)
 | 
			
		||||
#define DCC_STATUS_TX		(1 << 29)
 | 
			
		||||
 | 
			
		||||
static void dcc_uart_console_putchar(struct uart_port *port, int ch)
 | 
			
		||||
{
 | 
			
		||||
	while (__dcc_getstatus() & DCC_STATUS_TX)
 | 
			
		||||
		cpu_relax();
 | 
			
		||||
 | 
			
		||||
	__dcc_putchar(ch);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void dcc_early_write(struct console *con, const char *s, unsigned n)
 | 
			
		||||
{
 | 
			
		||||
	struct earlycon_device *dev = con->data;
 | 
			
		||||
 | 
			
		||||
	uart_console_write(&dev->port, s, n, dcc_uart_console_putchar);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int __init dcc_early_console_setup(struct earlycon_device *device,
 | 
			
		||||
					  const char *opt)
 | 
			
		||||
{
 | 
			
		||||
	device->con->write = dcc_early_write;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EARLYCON_DECLARE(dcc, dcc_early_console_setup);
 | 
			
		||||
 | 
			
		||||
static int hvc_dcc_put_chars(uint32_t vt, const char *buf, int count)
 | 
			
		||||
{
 | 
			
		||||
	int i;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue