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 struct sbi_console_data { 18 struct serial_chip chip; 19 }; 20 21 static struct sbi_console_data console_data __nex_bss; 22 static unsigned int sbi_console_global_lock __nex_bss = SPINLOCK_UNLOCK; 23 24 static void sbi_console_lock_global(void) 25 { 26 cpu_spin_lock(&sbi_console_global_lock); 27 } 28 29 static void sbi_console_unlock_global(void) 30 { 31 cpu_spin_unlock(&sbi_console_global_lock); 32 } 33 34 static void sbi_console_flush(struct serial_chip *chip __unused) 35 { 36 } 37 38 static void sbi_console_putc(struct serial_chip *chip __unused, 39 int ch) 40 { 41 sbi_console_lock_global(); 42 sbi_console_putchar(ch); 43 sbi_console_unlock_global(); 44 } 45 46 static const struct serial_ops sbi_console_ops = { 47 .flush = sbi_console_flush, 48 .putc = sbi_console_putc, 49 }; 50 51 static void sbi_console_init(struct sbi_console_data *pd) 52 { 53 pd->chip.ops = &sbi_console_ops; 54 } 55 56 void plat_console_init(void) 57 { 58 sbi_console_init(&console_data); 59 register_serial_console(&console_data.chip); 60 } 61