xref: /optee_os/core/arch/riscv/kernel/sbi_console.c (revision d1c9f59a15c8d80c8ac3cd4407cd6f67c6790a5f)
19afe87e0SMarouene Boubakri // SPDX-License-Identifier: BSD-2-Clause
29afe87e0SMarouene Boubakri /*
39afe87e0SMarouene Boubakri  * Copyright 2022 NXP
49afe87e0SMarouene Boubakri  */
59afe87e0SMarouene Boubakri 
69afe87e0SMarouene Boubakri #include <assert.h>
79afe87e0SMarouene Boubakri #include <compiler.h>
89afe87e0SMarouene Boubakri #include <config.h>
99afe87e0SMarouene Boubakri #include <console.h>
109afe87e0SMarouene Boubakri #include <drivers/serial.h>
119afe87e0SMarouene Boubakri #include <kernel/spinlock.h>
129afe87e0SMarouene Boubakri #include <riscv.h>
139afe87e0SMarouene Boubakri #include <sbi.h>
149afe87e0SMarouene Boubakri #include <trace.h>
159afe87e0SMarouene Boubakri #include <util.h>
169afe87e0SMarouene Boubakri 
179afe87e0SMarouene Boubakri struct sbi_console_data {
189afe87e0SMarouene Boubakri 	struct serial_chip chip;
199afe87e0SMarouene Boubakri };
209afe87e0SMarouene Boubakri 
219afe87e0SMarouene Boubakri static struct sbi_console_data console_data __nex_bss;
22*d1c9f59aSYu Chien Peter Lin static struct serial_ops sbi_console_ops __nex_bss;
239afe87e0SMarouene Boubakri 
sbi_console_putc_legacy(struct serial_chip * chip __unused,int ch)24*d1c9f59aSYu Chien Peter Lin static void sbi_console_putc_legacy(struct serial_chip *chip __unused, int ch)
259afe87e0SMarouene Boubakri {
269afe87e0SMarouene Boubakri 	sbi_console_putchar(ch);
279afe87e0SMarouene Boubakri }
289afe87e0SMarouene Boubakri 
sbi_console_putc(struct serial_chip * chip __unused,int ch)29*d1c9f59aSYu Chien Peter Lin static void sbi_console_putc(struct serial_chip *chip __unused, int ch)
30*d1c9f59aSYu Chien Peter Lin {
31*d1c9f59aSYu Chien Peter Lin 	sbi_dbcn_write_byte(ch);
32*d1c9f59aSYu Chien Peter Lin }
339afe87e0SMarouene Boubakri 
sbi_console_init(struct sbi_console_data * pd)349afe87e0SMarouene Boubakri static void sbi_console_init(struct sbi_console_data *pd)
359afe87e0SMarouene Boubakri {
36*d1c9f59aSYu Chien Peter Lin 	if (sbi_probe_extension(SBI_EXT_DBCN))
37*d1c9f59aSYu Chien Peter Lin 		sbi_console_ops.putc = sbi_console_putc;
38*d1c9f59aSYu Chien Peter Lin 	else
39*d1c9f59aSYu Chien Peter Lin 		sbi_console_ops.putc = sbi_console_putc_legacy;
40*d1c9f59aSYu Chien Peter Lin 
419afe87e0SMarouene Boubakri 	pd->chip.ops = &sbi_console_ops;
429afe87e0SMarouene Boubakri }
439afe87e0SMarouene Boubakri 
plat_console_init(void)4455ab8f06SAlvin Chang void plat_console_init(void)
459afe87e0SMarouene Boubakri {
469afe87e0SMarouene Boubakri 	sbi_console_init(&console_data);
479afe87e0SMarouene Boubakri 	register_serial_console(&console_data.chip);
489afe87e0SMarouene Boubakri }
49