xref: /optee_os/core/arch/riscv/kernel/sbi_console.c (revision d1c9f59a15c8d80c8ac3cd4407cd6f67c6790a5f)
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 struct serial_ops sbi_console_ops __nex_bss;
23 
sbi_console_putc_legacy(struct serial_chip * chip __unused,int ch)24 static void sbi_console_putc_legacy(struct serial_chip *chip __unused, int ch)
25 {
26 	sbi_console_putchar(ch);
27 }
28 
sbi_console_putc(struct serial_chip * chip __unused,int ch)29 static void sbi_console_putc(struct serial_chip *chip __unused, int ch)
30 {
31 	sbi_dbcn_write_byte(ch);
32 }
33 
sbi_console_init(struct sbi_console_data * pd)34 static void sbi_console_init(struct sbi_console_data *pd)
35 {
36 	if (sbi_probe_extension(SBI_EXT_DBCN))
37 		sbi_console_ops.putc = sbi_console_putc;
38 	else
39 		sbi_console_ops.putc = sbi_console_putc_legacy;
40 
41 	pd->chip.ops = &sbi_console_ops;
42 }
43 
plat_console_init(void)44 void plat_console_init(void)
45 {
46 	sbi_console_init(&console_data);
47 	register_serial_console(&console_data.chip);
48 }
49