]> git.sur5r.net Git - u-boot/commitdiff
efi_loader: Correctly figure out size for vidconsole
authorRob Clark <robdclark@gmail.com>
Wed, 13 Sep 2017 22:05:43 +0000 (18:05 -0400)
committerAlexander Graf <agraf@suse.de>
Wed, 20 Sep 2017 09:28:39 +0000 (11:28 +0200)
If stdout is vidconsole, we cannot rely on ANSI escape sequences to
query the size, as vidconsole cannot reply on stdin.  Instead special-
case this if stdout is vidconsole.

Signed-off-by: Rob Clark <robdclark@gmail.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
lib/efi_loader/efi_console.c

index 6502081706e5ef5aab1a76a49b1148830cd587dd..d596c5824133f8bb4ee65b8942744341bf5ea9e6 100644 (file)
@@ -8,7 +8,10 @@
 
 #include <common.h>
 #include <charset.h>
+#include <dm/device.h>
 #include <efi_loader.h>
+#include <stdio_dev.h>
+#include <video_console.h>
 
 static bool console_size_queried;
 
@@ -222,12 +225,23 @@ static efi_status_t EFIAPI efi_cout_query_mode(
        EFI_ENTRY("%p, %ld, %p, %p", this, mode_number, columns, rows);
 
        if (!console_size_queried) {
+               const char *stdout_name = env_get("stdout");
                int rows, cols;
 
                console_size_queried = true;
 
-               if (query_console_serial(&rows, &cols))
+               if (stdout_name && !strcmp(stdout_name, "vidconsole") &&
+                   IS_ENABLED(CONFIG_DM_VIDEO)) {
+                       struct stdio_dev *stdout_dev =
+                               stdio_get_by_name("vidconsole");
+                       struct udevice *dev = stdout_dev->priv;
+                       struct vidconsole_priv *priv =
+                               dev_get_uclass_priv(dev);
+                       rows = priv->rows;
+                       cols = priv->cols;
+               } else if (query_console_serial(&rows, &cols)) {
                        goto out;
+               }
 
                /* Test if we can have Mode 1 */
                if (cols >= 80 && rows >= 50) {