diff options
author | Devarsh Thakkar <devarsht@ti.com> | 2024-02-22 18:38:08 +0530 |
---|---|---|
committer | Anatolij Gustschin <agust@denx.de> | 2024-04-21 09:07:02 +0200 |
commit | 86281e4705418b54404889c290ef3154fb1ebafc (patch) | |
tree | 4c062a3baa1e306ca4b04c02275cf5148b9e5e84 | |
parent | 91e9687b49e7929effcc4464659c31d2ccb46e7b (diff) | |
download | u-boot-86281e4705418b54404889c290ef3154fb1ebafc.zip u-boot-86281e4705418b54404889c290ef3154fb1ebafc.tar.gz u-boot-86281e4705418b54404889c290ef3154fb1ebafc.tar.bz2 |
boot: fdt_simplefb: Enumerate framebuffer info from video handoff
Enable and update simple-framebuffer node using the video handoff
bloblist if video was enabled at SPL stage and corresponding video
bloblist was received at u-boot proper with necessary parameters.
Signed-off-by: Devarsh Thakkar <devarsht@ti.com>
Reviewed-by: Nikhil M Jain <n-jain1@ti.com>
-rw-r--r-- | boot/fdt_simplefb.c | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/boot/fdt_simplefb.c b/boot/fdt_simplefb.c index 069ced7..b0221ea 100644 --- a/boot/fdt_simplefb.c +++ b/boot/fdt_simplefb.c @@ -12,6 +12,8 @@ #include <asm/global_data.h> #include <linux/libfdt.h> #include <video.h> +#include <spl.h> +#include <bloblist.h> DECLARE_GLOBAL_DATA_PTR; @@ -26,15 +28,29 @@ static int fdt_simplefb_configure_node(void *blob, int off) struct udevice *dev; int ret; - ret = uclass_first_device_err(UCLASS_VIDEO, &dev); - if (ret) - return ret; - uc_priv = dev_get_uclass_priv(dev); - plat = dev_get_uclass_plat(dev); - xsize = uc_priv->xsize; - ysize = uc_priv->ysize; - bpix = uc_priv->bpix; - fb_base = plat->base; + if (IS_ENABLED(CONFIG_SPL_VIDEO_HANDOFF) && spl_phase() > PHASE_SPL) { + struct video_handoff *ho; + + ho = bloblist_find(BLOBLISTT_U_BOOT_VIDEO, sizeof(*ho)); + if (!ho) + return log_msg_ret("Missing video bloblist", -ENOENT); + + xsize = ho->xsize; + ysize = ho->ysize; + bpix = ho->bpix; + fb_base = ho->fb; + } else { + ret = uclass_first_device_err(UCLASS_VIDEO, &dev); + if (ret) + return ret; + uc_priv = dev_get_uclass_priv(dev); + plat = dev_get_uclass_plat(dev); + xsize = uc_priv->xsize; + ysize = uc_priv->ysize; + bpix = uc_priv->bpix; + fb_base = plat->base; + } + switch (bpix) { case 4: /* VIDEO_BPP16 */ name = "r5g6b5"; |