1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-10-26 16:13:55 +01:00

efi_loader: Avoid overwriting previous outputs on console screen clearing

Before clearing the screen, ensure that no previous output of firmware
or UEFI programs will be overwritten on serial devices or other
streaming consoles. This helps generating complete boot logs.

Tested regarding multi-output against qemu-x86_defconfig. Still, there
were remaining concerns about side effects, so this is provided as an
opt-in feature.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
This commit is contained in:
Jan Kiszka
2023-01-18 22:24:59 +01:00
committed by Heinrich Schuchardt
parent de94f0f320
commit e585b79ee4
2 changed files with 21 additions and 1 deletions

View File

@@ -124,6 +124,15 @@ config EFI_SET_TIME
Provide the SetTime() runtime service at boottime. This service
can be used by an EFI application to adjust the real time clock.
config EFI_SCROLL_ON_CLEAR_SCREEN
bool "Avoid overwriting previous output on clear screen"
help
Instead of erasing the screen content when the console screen should
be cleared, emit blank new lines so that previous output is scrolled
out of sight rather than overwritten. On serial consoles this allows
to capture complete boot logs (except for interactive menus etc.)
and can ease debugging related issues.
config EFI_HAVE_CAPSULE_SUPPORT
bool

View File

@@ -461,10 +461,21 @@ static efi_status_t EFIAPI efi_cout_set_attribute(
}
/**
* efi_cout_clear_screen() - clear screen
* efi_clear_screen() - clear screen
*/
static void efi_clear_screen(void)
{
if (CONFIG_IS_ENABLED(EFI_SCROLL_ON_CLEAR_SCREEN)) {
unsigned int row, screen_rows, screen_columns;
/* Avoid overwriting previous outputs on streaming consoles */
screen_rows = efi_cout_modes[efi_con_mode.mode].rows;
screen_columns = efi_cout_modes[efi_con_mode.mode].columns;
printf(ESC "[%u;%uH", screen_rows, screen_columns);
for (row = 1; row < screen_rows; row++)
printf("\n");
}
/*
* The Linux console wants both a clear and a home command. The video
* uclass does not support <ESC>[H without coordinates, yet.