]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
common: board_f: Pass frame buffer info from SPL to u-boot
authorNikhil M Jain <n-jain1@ti.com>
Tue, 18 Jul 2023 08:57:31 +0000 (14:27 +0530)
committerTom Rini <trini@konsulko.com>
Fri, 21 Jul 2023 19:32:12 +0000 (15:32 -0400)
U-boot proper can use frame buffer address passed from SPL to reserve
the memory area used by framebuffer set in SPL so that splash image
set in SPL continues to get displayed while u-boot proper is running.

Put the framebuffer address and size in a bloblist to make them
available at u-boot proper, if in u-boot proper CONFIG_VIDEO is defined.

Signed-off-by: Nikhil M Jain <n-jain1@ti.com>
Reviewed-by: Devarsh Thakkar <devarsht@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
common/board_f.c
drivers/video/video-uclass.c

index e5969ec9a27b762e426a114f24f9fb99b146ed3e..7d2c380e91e29f817fdc3dc576e1fa1f26da6b17 100644 (file)
@@ -411,7 +411,16 @@ __weak int arch_reserve_mmu(void)
 
 static int reserve_video(void)
 {
-       if (IS_ENABLED(CONFIG_VIDEO)) {
+       if (IS_ENABLED(CONFIG_SPL_VIDEO) && spl_phase() > PHASE_SPL &&
+           CONFIG_IS_ENABLED(BLOBLIST)) {
+               struct video_handoff *ho;
+
+               ho = bloblist_find(BLOBLISTT_U_BOOT_VIDEO, sizeof(*ho));
+               if (!ho)
+                       return log_msg_ret("blf", -ENOENT);
+               video_reserve_from_bloblist(ho);
+               gd->relocaddr = ho->fb;
+       } else if (CONFIG_IS_ENABLED(VIDEO)) {
                ulong addr;
                int ret;
 
index 435dab1f195c40c32659150345add3754a516781..949595f1bc69b2d0bccd4f013f969129ee0988fa 100644 (file)
@@ -6,12 +6,14 @@
 #define LOG_CATEGORY UCLASS_VIDEO
 
 #include <common.h>
+#include <bloblist.h>
 #include <console.h>
 #include <cpu_func.h>
 #include <dm.h>
 #include <log.h>
 #include <malloc.h>
 #include <mapmem.h>
+#include <spl.h>
 #include <stdio_dev.h>
 #include <video.h>
 #include <video_console.h>
@@ -139,6 +141,16 @@ int video_reserve(ulong *addrp)
        debug("Video frame buffers from %lx to %lx\n", gd->video_bottom,
              gd->video_top);
 
+       if (spl_phase() == PHASE_SPL && CONFIG_IS_ENABLED(BLOBLIST)) {
+               struct video_handoff *ho;
+
+               ho = bloblist_add(BLOBLISTT_U_BOOT_VIDEO, sizeof(*ho), 0);
+               if (!ho)
+                       return log_msg_ret("blf", -ENOENT);
+               ho->fb = *addrp;
+               ho->size = size;
+       }
+
        return 0;
 }