[PATCH v3 5/9] board_f: Fix corruption of relocaddr

Simon Glass sjg at chromium.org
Mon Jul 31 17:59:56 CEST 2023


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 <sjg at chromium.org>
Fixes: 5bc610a7d9d ("common: board_f: Pass frame buffer info from SPL to u-boot")
Suggested-by: Nikhil M Jain <n-jain1 at 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



More information about the U-Boot mailing list