xref: /linux/drivers/tty/serial/earlycon-riscv-sbi.c (revision 27de1f541f1f911bc2242ae68ef7375247b36c7d)
1*27de1f54SAnup Patel // SPDX-License-Identifier: GPL-2.0
2*27de1f54SAnup Patel /*
3*27de1f54SAnup Patel  * RISC-V SBI based earlycon
4*27de1f54SAnup Patel  *
5*27de1f54SAnup Patel  * Copyright (C) 2018 Anup Patel <anup@brainfault.org>
6*27de1f54SAnup Patel  */
7*27de1f54SAnup Patel #include <linux/kernel.h>
8*27de1f54SAnup Patel #include <linux/console.h>
9*27de1f54SAnup Patel #include <linux/init.h>
10*27de1f54SAnup Patel #include <linux/serial_core.h>
11*27de1f54SAnup Patel #include <asm/sbi.h>
12*27de1f54SAnup Patel 
13*27de1f54SAnup Patel static void sbi_console_write(struct console *con,
14*27de1f54SAnup Patel 			      const char *s, unsigned int n)
15*27de1f54SAnup Patel {
16*27de1f54SAnup Patel 	int i;
17*27de1f54SAnup Patel 
18*27de1f54SAnup Patel 	for (i = 0; i < n; ++i)
19*27de1f54SAnup Patel 		sbi_console_putchar(s[i]);
20*27de1f54SAnup Patel }
21*27de1f54SAnup Patel 
22*27de1f54SAnup Patel static int __init early_sbi_setup(struct earlycon_device *device,
23*27de1f54SAnup Patel 				  const char *opt)
24*27de1f54SAnup Patel {
25*27de1f54SAnup Patel 	device->con->write = sbi_console_write;
26*27de1f54SAnup Patel 	return 0;
27*27de1f54SAnup Patel }
28*27de1f54SAnup Patel EARLYCON_DECLARE(sbi, early_sbi_setup);
29