When the video framebuffer comes from the bloblist, we should not change
relocaddr to this address, since it interfers with the normal memory
allocation.

This fixes a boot loop in qemu-x86_64

Signed-off-by: Simon Glass <s...@chromium.org>
Fixes: 5bc610a7d9d ("common: board_f: Pass frame buffer info from SPL to 
u-boot")
Suggested-by: Nikhil M Jain <n-ja...@ti.com>
---

Changes in v3:
- Reword the Kconfig help as suggested

Changes in v2:
- Add a Kconfig as the suggested conditional did not work

 common/board_f.c      | 3 ++-
 drivers/video/Kconfig | 9 +++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/common/board_f.c b/common/board_f.c
index 7d2c380e91e..5173d0a0c2d 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -419,7 +419,8 @@ static int reserve_video(void)
                if (!ho)
                        return log_msg_ret("blf", -ENOENT);
                video_reserve_from_bloblist(ho);
-               gd->relocaddr = ho->fb;
+               if (IS_ENABLED(CONFIG_VIDEO_RESERVE_SPL))
+                       gd->relocaddr = ho->fb;
        } else if (CONFIG_IS_ENABLED(VIDEO)) {
                ulong addr;
                int ret;
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index b41dc60cec5..f2e56204d52 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -1106,6 +1106,15 @@ config SPL_VIDEO_REMOVE
          if this  option is enabled video driver will be removed at the end of
          SPL stage, beforeloading the next stage.
 
+config VIDEO_RESERVE_SPL
+       bool
+       help
+         This adjusts reserve_video() to redirect memory reservation when it
+         sees a video handoff blob (BLOBLISTT_U_BOOT_VIDEO). This avoids the
+         memory used for framebuffer from being allocated by U-Boot proper,
+         thus preventing any further memory reservations done by U-Boot proper
+         from overwriting the framebuffer.
+
 if SPL_SPLASH_SCREEN
 
 config SPL_SPLASH_SCREEN_ALIGN
-- 
2.41.0.487.g6d72f3e995-goog

Reply via email to