On 8/6/21 9:58 AM, Art Nikpal wrote:
Why should a user set this up?

only if user need it! by default is 0 no limit

EFI console not usable for some cases: big screen sizes + mux with
serial console

for example

EFI console - fullscreen (1080P) vidconsole - SLUGGISH FRAMERATES AND NOT USABLE

CONFIG_CONSOLE_MUX=y
CONFIG_CONSOLE_NORMAL=y
CONFIG_EFI_CONSOLE_MAX_ROWS=0
CONFIG_EFI_CONSOLE_MAX_COLS=0

https://dl.khadas.com/test/uboot_efi_examples/media/07-EFI_console_example_normal_vidconsole_and_serial_multiplex_adaptation_utf_safe_SLOW_NOT_USABLE.mp4

EFI console - vidconsole with row and column limits - USABLE FRAMERATES

CONFIG_CONSOLE_MUX=y
CONFIG_CONSOLE_NORMAL=y
CONFIG_EFI_CONSOLE_MAX_ROWS=90
CONFIG_EFI_CONSOLE_MAX_COLS=25

https://dl.khadas.com/test/uboot_efi_examples/media/06-EFI_console_example_normal_vidconsole_and_serial_multiplex_adaptation_utf_safe_and_max_cols_90_limit_USABLE.mp4

Please check more information and examples about this

+ https://dl.khadas.com/test/uboot_efi_examples/#readme


On Thu, Aug 5, 2021 at 7:59 PM Heinrich Schuchardt <[email protected]> wrote:

On 8/4/21 12:22 PM, Artem Lapkin wrote:
Setup the max rows and columns limit for the EFI console output.

Why should a user set this up?

The size of serial console depends on the remote computers console
windows size.

The size of a video console depends on the attached monitor.

So we have to detect the size dynamically. Hardcoding it does not make
any sense.

Best regards

Heinrich


Signed-off-by: Artem Lapkin <[email protected]>
---
   lib/efi_loader/Kconfig       | 12 ++++++++++++
   lib/efi_loader/efi_console.c |  5 +++++
   2 files changed, 17 insertions(+)

diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
index dacc3b5881..7d00d6cde5 100644
--- a/lib/efi_loader/Kconfig
+++ b/lib/efi_loader/Kconfig
@@ -381,4 +381,16 @@ config EFI_ESRT
       help
         Enabling this option creates the ESRT UEFI system table.

+config EFI_CONSOLE_MAX_ROWS
+     int "setup console max rows"

This allows negative values.

Add an allowable range, e.g:

        range 0 65535

+     default 0
+     help
+       Set console max rows limit or set to zero to disable limit.
+
+config EFI_CONSOLE_MAX_COLS
+     int "setup console max cols"

        range 0 65535

+     default 0
+     help
+       Set console max rows limit or set to zero to disable limit.
+
   endif
diff --git a/lib/efi_loader/efi_console.c b/lib/efi_loader/efi_console.c
index 847069212e..b5d79d788f 100644
--- a/lib/efi_loader/efi_console.c
+++ b/lib/efi_loader/efi_console.c
@@ -351,6 +351,11 @@ static void query_console_size(void)
       } else if (query_console_serial(&rows, &cols))
               return;

+     if (CONFIG_EFI_CONSOLE_MAX_ROWS > 0)
+             rows = min(rows, CONFIG_EFI_CONSOLE_MAX_ROWS);
+     if (CONFIG_EFI_CONSOLE_MAX_COLS > 0)
+             cols = min(cols, CONFIG_EFI_CONSOLE_MAX_COLS);
+

We should not neither call query_vidconsole() nor query_console_serial()
if both CONFIG_EFI_CONSOLE_MAX_ROWS and CONFIG_EFI_CONSOLE_MAX_COLS are set.

The UEFI specification requires that a device providing the
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL must at least support a mode with size
80x25. But some LCD screens are smaller. So if
CONFIG_EFI_CONSOLE_MAX_ROWS or CONFIG_EFI_CONSOLE_MAX_COLS doesn't fit
into 80x25, we should use CONFIG_EFI_CONSOLE_MAX_ROWS and
CONFIG_EFI_CONSOLE_MAX_COLS for mode 0.

Best regards

Heinrich

       /* Test if we can have Mode 1 */
       if (cols >= 80 && rows >= 50) {
               efi_cout_modes[1].present = 1;


Reply via email to