diff --git a/src/arch/riscv/interface/sbi/sbi_console.c b/src/arch/riscv/interface/sbi/sbi_console.c index c993ebc0a..afbe4286e 100644 --- a/src/arch/riscv/interface/sbi/sbi_console.c +++ b/src/arch/riscv/interface/sbi/sbi_console.c @@ -41,6 +41,8 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #define CONSOLE_SBI ( CONSOLE_USAGE_ALL & ~CONSOLE_USAGE_LOG ) #endif +extern void early_uart_putchar ( int character ); + /** Buffered input character (if any) */ static unsigned char sbi_console_input; @@ -52,6 +54,9 @@ static unsigned char sbi_console_input; static void sbi_putchar ( int character ) { struct sbi_return ret; + /* Write byte to early UART, if enabled */ + early_uart_putchar ( character ); + /* Write byte to console */ ret = sbi_ecall_1 ( SBI_DBCN, SBI_DBCN_WRITE_BYTE, character ); if ( ! ret.error ) diff --git a/src/arch/riscv/prefix/libprefix.S b/src/arch/riscv/prefix/libprefix.S index 41e63b3f1..cf62338b5 100644 --- a/src/arch/riscv/prefix/libprefix.S +++ b/src/arch/riscv/prefix/libprefix.S @@ -243,6 +243,32 @@ early_uart_sifive_wait_\@: bltz a1, early_uart_sifive_wait_\@ .endm +/***************************************************************************** + * + * Print single character to early UART (from C code) + * + ***************************************************************************** + * + * This function is called by the SBI console driver to output a + * character to the early UART (if enabled). + * + * The standard C ABI applies to this function. + * + * Parameters: + * + * a0 - Character to print + * + * Returns: none + * + */ + + .section ".prefix.early_uart_putchar", "ax", @progbits + .globl early_uart_putchar +early_uart_putchar: + print_char_uart + ret + .size early_uart_putchar, . - early_uart_putchar + /***************************************************************************** * * Print message to debug console