From 12441dce064add85279b17ce5a7115a85297ca7d Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Tue, 27 Jul 2021 13:46:55 +0000 Subject: [PATCH] console/hw-debug_sink: Update for fast/slow console distinction Change-Id: I9ac110c7b812f912f0f87cbe4aa218d4a78e6aaf Signed-off-by: Nico Huber Reviewed-on: https://review.coreboot.org/c/coreboot/+/56665 Tested-by: build bot (Jenkins) Reviewed-by: Angel Pons --- src/console/hw-debug_sink.adb | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/console/hw-debug_sink.adb b/src/console/hw-debug_sink.adb index f30b73f4ce..6a2889de8f 100644 --- a/src/console/hw-debug_sink.adb +++ b/src/console/hw-debug_sink.adb @@ -1,7 +1,9 @@ -- SPDX-License-Identifier: GPL-2.0-only with Interfaces.C; +with CB.Config; +use CB; use type Interfaces.C.int; package body HW.Debug_Sink is @@ -13,21 +15,43 @@ package body HW.Debug_Sink is Msg_Level_BIOS_DEBUG : constant := 7; + CONSOLE_LOG_FAST : constant := 1; + CONSOLE_LOG_ALL : constant := 2; + + procedure cbmemc_tx_byte (chr : Interfaces.C.char); + pragma Import (C, cbmemc_tx_byte, "cbmemc_tx_byte"); + procedure console_tx_byte (chr : Interfaces.C.char); pragma Import (C, console_tx_byte, "console_tx_byte"); - procedure Put (Item : String) is + procedure Put (Item : String) + is + console_log : constant Interfaces.C.int := + console_log_level (Msg_Level_BIOS_DEBUG); begin - if console_log_level (Msg_Level_BIOS_DEBUG) /= 0 then + if console_log = CONSOLE_LOG_FAST then + if Config.CONSOLE_CBMEM then + for Idx in Item'Range loop + cbmemc_tx_byte (Interfaces.C.To_C (Item (Idx))); + end loop; + end if; + elsif console_log = CONSOLE_LOG_ALL then for Idx in Item'Range loop console_tx_byte (Interfaces.C.To_C (Item (Idx))); end loop; end if; end Put; - procedure Put_Char (Item : Character) is + procedure Put_Char (Item : Character) + is + console_log : constant Interfaces.C.int := + console_log_level (Msg_Level_BIOS_DEBUG); begin - if console_log_level (Msg_Level_BIOS_DEBUG) /= 0 then + if console_log = CONSOLE_LOG_FAST then + if Config.CONSOLE_CBMEM then + cbmemc_tx_byte (Interfaces.C.To_C (Item)); + end if; + elsif console_log = CONSOLE_LOG_ALL then console_tx_byte (Interfaces.C.To_C (Item)); end if; end Put_Char;