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