1 // SPDX-License-Identifier: BSD-2-Clause 2 /* 3 * Copyright 2022 NXP 4 */ 5 6 #include <assert.h> 7 #include <compiler.h> 8 #include <config.h> 9 #include <console.h> 10 #include <drivers/serial.h> 11 #include <kernel/spinlock.h> 12 #include <riscv.h> 13 #include <sbi.h> 14 #include <trace.h> 15 #include <util.h> 16 17 #ifdef CFG_RISCV_SBI_CONSOLE 18 19 struct sbi_console_data { 20 struct serial_chip chip; 21 }; 22 23 static struct sbi_console_data console_data __nex_bss; 24 static unsigned int sbi_console_global_lock __nex_bss = SPINLOCK_UNLOCK; 25 sbi_console_lock_global(void)26static void sbi_console_lock_global(void) 27 { 28 cpu_spin_lock(&sbi_console_global_lock); 29 } 30 sbi_console_unlock_global(void)31static void sbi_console_unlock_global(void) 32 { 33 cpu_spin_unlock(&sbi_console_global_lock); 34 } 35 sbi_console_flush(struct serial_chip * chip __unused)36static void sbi_console_flush(struct serial_chip *chip __unused) 37 { 38 } 39 sbi_console_putc(struct serial_chip * chip __unused,int ch)40static void sbi_console_putc(struct serial_chip *chip __unused, 41 int ch) 42 { 43 sbi_console_lock_global(); 44 sbi_console_putchar(ch); 45 sbi_console_unlock_global(); 46 } 47 48 static const struct serial_ops sbi_console_ops = { 49 .flush = sbi_console_flush, 50 .putc = sbi_console_putc, 51 }; 52 sbi_console_init(struct sbi_console_data * pd)53static void sbi_console_init(struct sbi_console_data *pd) 54 { 55 pd->chip.ops = &sbi_console_ops; 56 } 57 console_init(void)58void console_init(void) 59 { 60 sbi_console_init(&console_data); 61 register_serial_console(&console_data.chip); 62 } 63 64 #endif /*CFG_RISCV_SBI_CONSOLE*/ 65 66