xref: /optee_os/core/drivers/ffa_console.c (revision d4a87690eba3c5031f5ac9c7592bb7d2d150697d)
1*d4a87690SSungbae Yoo // SPDX-License-Identifier: BSD-2-Clause
2*d4a87690SSungbae Yoo /*
3*d4a87690SSungbae Yoo  * Copyright (c) 2024, NVIDIA CORPORATION
4*d4a87690SSungbae Yoo  */
5*d4a87690SSungbae Yoo 
6*d4a87690SSungbae Yoo #include <compiler.h>
7*d4a87690SSungbae Yoo #include <console.h>
8*d4a87690SSungbae Yoo #include <drivers/ffa_console.h>
9*d4a87690SSungbae Yoo #include <drivers/serial.h>
10*d4a87690SSungbae Yoo #include <kernel/thread_arch.h>
11*d4a87690SSungbae Yoo 
12*d4a87690SSungbae Yoo #define FFA_CONSOLE_LOG_32		(0x8400008A)
13*d4a87690SSungbae Yoo 
14*d4a87690SSungbae Yoo static void ffa_console_putc(struct serial_chip *chip __unused, int ch)
15*d4a87690SSungbae Yoo {
16*d4a87690SSungbae Yoo 	thread_hvc(FFA_CONSOLE_LOG_32, 1, ch, 0);
17*d4a87690SSungbae Yoo }
18*d4a87690SSungbae Yoo 
19*d4a87690SSungbae Yoo static const struct serial_ops ffa_console_ops = {
20*d4a87690SSungbae Yoo 	.putc = ffa_console_putc,
21*d4a87690SSungbae Yoo };
22*d4a87690SSungbae Yoo DECLARE_KEEP_PAGER(ffa_console_ops);
23*d4a87690SSungbae Yoo 
24*d4a87690SSungbae Yoo static struct serial_chip ffa_console = {
25*d4a87690SSungbae Yoo 	.ops = &ffa_console_ops
26*d4a87690SSungbae Yoo };
27*d4a87690SSungbae Yoo 
28*d4a87690SSungbae Yoo void ffa_console_init(void)
29*d4a87690SSungbae Yoo {
30*d4a87690SSungbae Yoo 	register_serial_console(&ffa_console);
31*d4a87690SSungbae Yoo }
32