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