Update the video driver to support this feature and enable it on samus.
Also remove the multi-line scrolling since normal scrolling is fast enough
now.

With this change, the time taken to print the environment to the display
without CONFIG_CONSOLE_SCROLL_LINES is reduced from about 430ms to 12ms.

Signed-off-by: Simon Glass <s...@chromium.org>
---

 configs/chromebook_samus_defconfig |  2 +-
 drivers/video/broadwell_igd.c      | 16 +++++++++++++++-
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/configs/chromebook_samus_defconfig 
b/configs/chromebook_samus_defconfig
index fb4d88028c..13058ea7d7 100644
--- a/configs/chromebook_samus_defconfig
+++ b/configs/chromebook_samus_defconfig
@@ -67,7 +67,7 @@ CONFIG_SPI=y
 CONFIG_TPM_TIS_LPC=y
 CONFIG_USB_STORAGE=y
 CONFIG_USB_KEYBOARD=y
+CONFIG_VIDEO_COPY=y
 CONFIG_FRAMEBUFFER_SET_VESA_MODE=y
 CONFIG_FRAMEBUFFER_VESA_MODE_11A=y
-CONFIG_CONSOLE_SCROLL_LINES=5
 CONFIG_TPM=y
diff --git a/drivers/video/broadwell_igd.c b/drivers/video/broadwell_igd.c
index 8e8fe9d9b3..df6a761d2d 100644
--- a/drivers/video/broadwell_igd.c
+++ b/drivers/video/broadwell_igd.c
@@ -664,6 +664,7 @@ static int broadwell_igd_probe(struct udevice *dev)
        struct video_uc_platdata *plat = dev_get_uclass_platdata(dev);
        struct video_priv *uc_priv = dev_get_uclass_priv(dev);
        bool is_broadwell;
+       ulong fbbase;
        int ret;
 
        if (!ll_boot_init()) {
@@ -690,7 +691,8 @@ static int broadwell_igd_probe(struct udevice *dev)
                return ret;
 
        /* Use write-combining for the graphics memory, 256MB */
-       ret = mtrr_add_request(MTRR_TYPE_WRCOMB, plat->base, 256 << 20);
+       fbbase = IS_ENABLED(CONFIG_VIDEO_COPY) ? plat->copy_base : plat->base;
+       ret = mtrr_add_request(MTRR_TYPE_WRCOMB, fbbase, 256 << 20);
        if (!ret)
                ret = mtrr_commit(true);
        if (ret && ret != -ENOSYS) {
@@ -752,6 +754,17 @@ static int broadwell_igd_ofdata_to_platdata(struct udevice 
*dev)
        return 0;
 }
 
+static int broadwell_igd_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 video_ops broadwell_igd_ops = {
 };
 
@@ -766,6 +779,7 @@ U_BOOT_DRIVER(broadwell_igd) = {
        .of_match = broadwell_igd_ids,
        .ops    = &broadwell_igd_ops,
        .ofdata_to_platdata = broadwell_igd_ofdata_to_platdata,
+       .bind   = broadwell_igd_bind,
        .probe  = broadwell_igd_probe,
        .priv_auto_alloc_size   = sizeof(struct broadwell_igd_priv),
        .platdata_auto_alloc_size       = sizeof(struct broadwell_igd_plat),
-- 
2.26.2.761.g0e0b3e54be-goog

Reply via email to