[PATCH v2] efi_loader: Improve console screen clearing and reset

Heinrich Schuchardt xypron.glpk at gmx.de
Fri May 6 18:46:30 CEST 2022


On 5/6/22 16:50, Jan Kiszka wrote:
> From: Jan Kiszka <jan.kiszka at siemens.com>
>
> 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.
>
> Signed-off-by: Jan Kiszka <jan.kiszka at siemens.com>
> ---
>
> Changes in v2:
>   - rebased and tested against more scenarios, sucessfully
>
>   lib/efi_loader/efi_console.c | 16 +++++++++++++---
>   1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/lib/efi_loader/efi_console.c b/lib/efi_loader/efi_console.c
> index 60a3fc85ac4..0270b20bafe 100644
> --- a/lib/efi_loader/efi_console.c
> +++ b/lib/efi_loader/efi_console.c
> @@ -463,8 +463,18 @@ static efi_status_t EFIAPI efi_cout_set_attribute(
>   static efi_status_t EFIAPI efi_cout_clear_screen(
>   			struct efi_simple_text_output_protocol *this)
>   {
> +	unsigned int row;
> +
>   	EFI_ENTRY("%p", this);
>
> +	/* Avoid overwriting previous outputs on streaming consoles */
> +	for (row = 1; row < efi_cout_modes[efi_con_mode.mode].rows; row++)
> +		printf("\n");

Unfortunately you seem to have missed to consider my review comments in
https://lists.denx.de/pipermail/u-boot/2022-April/482754.html

Best regards

Heinrich

> +
> +	/* Set default colors if not done yet */
> +	if (efi_con_mode.attribute == 0)
> +		efi_cout_set_attribute(this, 0x07);
> +
>   	/*
>   	 * The Linux console wants both a clear and a home command. The video
>   	 * uclass does not support <ESC>[H without coordinates, yet.
> @@ -522,9 +532,9 @@ static efi_status_t EFIAPI efi_cout_reset(
>   {
>   	EFI_ENTRY("%p, %d", this, extended_verification);
>
> -	/* Set default colors */
> -	efi_con_mode.attribute = 0x07;
> -	printf(ESC "[0;37;40m");
> +	/* Trigger reset to default colors */
> +	efi_con_mode.attribute = 0;
> +
>   	/* Clear screen */
>   	EFI_CALL(efi_cout_clear_screen(this));
>



More information about the U-Boot mailing list