]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
minnowmax: Enable the copy framebuffer
authorSimon Glass <sjg@chromium.org>
Fri, 3 Jul 2020 03:12:36 +0000 (21:12 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Thu, 9 Jul 2020 04:33:24 +0000 (12:33 +0800)
Update the video driver to support this feature and enable it on
minnowmax to speed up the display.

With this change, the time taken to print the environment to the display
without CONFIG_CONSOLE_SCROLL_LINES is reduced from over 13 seconds to
300ms, at 1280x1024.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Anatolij Gustschin <agust@denx.de>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
configs/minnowmax_defconfig
drivers/video/vesa.c

index 40ed9e4120de0e1c09c7ea18c53bd0fd750b678d..4fbc920dd0dc8cc2c9cb854d633bdd31f897b41d 100644 (file)
@@ -59,7 +59,7 @@ CONFIG_RTL8169=y
 CONFIG_SPI=y
 CONFIG_USB_STORAGE=y
 CONFIG_USB_KEYBOARD=y
+CONFIG_VIDEO_COPY=y
 CONFIG_FRAMEBUFFER_SET_VESA_MODE=y
 CONFIG_FRAMEBUFFER_VESA_MODE_11B=y
-CONFIG_CONSOLE_SCROLL_LINES=5
 # CONFIG_GZIP is not set
index 6c03611e80c8e4419bc352408eb1b89250c18e15..9656326bdb110a0d6a00a36ca16d1e6d4d5f505a 100644 (file)
@@ -5,12 +5,39 @@
 
 #include <common.h>
 #include <dm.h>
+#include <log.h>
 #include <pci.h>
 #include <vbe.h>
+#include <video.h>
+#include <asm/mtrr.h>
 
 static int vesa_video_probe(struct udevice *dev)
 {
-       return vbe_setup_video(dev, NULL);
+       struct video_uc_platdata *plat = dev_get_uclass_platdata(dev);
+       ulong fbbase;
+       int ret;
+
+       ret = vbe_setup_video(dev, NULL);
+       if (ret)
+               return log_ret(ret);
+
+       /* Use write-combining for the graphics memory, 256MB */
+       fbbase = IS_ENABLED(CONFIG_VIDEO_COPY) ? plat->copy_base : plat->base;
+       mtrr_add_request(MTRR_TYPE_WRCOMB, fbbase, 256 << 20);
+       mtrr_commit(true);
+
+       return 0;
+}
+
+static int vesa_video_bind(struct udevice *dev)
+{
+       struct video_uc_platdata *uc_plat = dev_get_uclass_platdata(dev);
+
+       /* Set the maximum supported resolution */
+       uc_plat->size = 2560 * 1600 * 4;
+       log_debug("%s: Frame buffer size %x\n", __func__, uc_plat->size);
+
+       return 0;
 }
 
 static const struct udevice_id vesa_video_ids[] = {
@@ -22,6 +49,7 @@ U_BOOT_DRIVER(vesa_video) = {
        .name   = "vesa_video",
        .id     = UCLASS_VIDEO,
        .of_match = vesa_video_ids,
+       .bind   = vesa_video_bind,
        .probe  = vesa_video_probe,
 };