Keep uboot splash screen during kernel boot on IM8QM

Hi,

For my project I need to display a boot logo during startup. For that I integrated my own logo into uboot and it works fine (I do it follow henrique.tx patches in this link: U-boot splash screen dual LVDS Apalis imx8 - #34 by henrique.tx).

The problem resides when linux takes over the framebuffer, it flickers because the kernel does the framebuffer initialization again. Kernel booting log show these error:
"root@apalis-imx8-15097164:~# dmesg | grep lvds
[ 0.455092] platform panel-lvds: Fixing up cyclic dependency with bus@57240000:ldb@572410e0
[ 1.381218] lvds1_pixel_clk: failed to set clock parent -16
[ 1.386851] clk: failed to reparent lvds1_pixel_clk to lvds1_bypass_clk: -16
[ 2.120392] lvds1_phy_clk: failed to set clock parent -16
[ 2.125841] clk: failed to reparent lvds1_phy_clk to lvds1_bypass_clk: -16
[ 2.169435] lvds1_pixel_clk: failed to set clock parent -16
[ 2.175051…19] lvds1_pixel_clk: failed to set clock parent -16
[ 3.419357] clk: failed to reparent lvds1_pixel_clk to lvds1_bypass_clk: -16
…[ 9.234296] clk: failed to reparent lvds1_pixel_clk to lvds1_bypass_clk: -16
[ 9.248813] lvds1_pixel_clk: failed to set clock parent -16
[ 9.254509] clk: failed to reparent lvds1_pixel_clk to lvds1_bypass_clk: -16
[ 9.433436] lvds1_pixel_clk: failed to set clock parent -16
[ 9.442421] clk: failed to reparent lvds1_pixel_clk to lvds1_bypass_clk: -16

"

Are there anyway to keep uboot splash screen still display when kernel is booting?

Hi, I’m the Toradex AI Assistant. The Toradex Support team will follow up with you shortly!

Did you like my answer?

:+1: :-1:


Hello!

Thank you for your question about U-Boot splash screen support on i.MX8-based modules. Currently, there are some limitations in this area:

  1. Mainline U-Boot does not support video displays on i.MX8-based modules.
  2. There is no mechanism for a smooth transition of video handling between U-Boot and the Linux kernel.
  3. The support for splash screens varies across different modules and display interfaces, so there isn’t a universal solution.

For your specific case with the i.MX8QM, while some display controller drivers are available in BSP 6’s U-Boot, seamless display transitions are still not fully supported.

As an alternative, you might consider using Plymouth for splash screen implementation. Although Plymouth operates from userspace and may take longer to display, it offers a more stable solution for splash screens. If you’re interested in optimizing boot time with Plymouth, there are resources available to help reduce the delay in displaying the splash screen.

If you need more information about implementing Plymouth, feel free to ask!

Best regards,
Toradex AI Assistant.

Please, also check if these links can help you solve your problem:

Unable to see the u-boot logo by Manipulating Splash Screen in U-Boot at Runtime.

Plymouth does not start at the time kernel start booting, It take long time to show. So, i want a way to keep uboot splash screen still displays in kernel booting.

Hi @victorduong , thanks for reaching out. Let me check and we will get back to you.

Can you let us know the output of “tdx-info” command to get the full information of your system?

Thanks,
Alvaro.

Hi @victorduong , I was checking the other ticket with @henrique.tx. I’m thinking that this issue could be prevented if use simple-framebuffer in Uboot. What do you think @henrique.tx ?

Can you try the following?

1. Enable simple-framebuffer in the Linux kernel

Ensure the following are set in your kernel config:

CONFIG_FB_SIMPLE=y
CONFIG_DRM_SIMPLEDRM=y
CONFIG_FRAMEBUFFER_CONSOLE=y

2. Patch the device tree in U-Boot to provide simple-framebuffer

You need to update your U-Boot or Linux device tree to include a chosen node with a framebuffer subnode like:

/ {
    chosen {
        framebuffer@0 {
            compatible = "simple-framebuffer";
            reg = <0xXXXXXXXX 0xYYYYYYYY>; // framebuffer address and size
            width = <1920>;
            height = <1080>;
            stride = <1920 * 3>; // assuming 24bpp
            format = "r8g8b8";
        };
    };
};

U-Boot can populate this node dynamically during runtime if your patches support it. You can verify this by checking the flattened device tree passed to Linux (/proc/device-tree/chosen/framebuffer@0).


3. Prevent Linux from resetting the display

  • Make sure the LVDS panel settings in the Linux device tree match exactly what U-Boot uses (timings, bus format, etc.).

  • Add to kernel command line (The following is an example):

setenv tdxargs "video=LVDS-1:1920x1080@60e fbcon=map:1 fbcon=font:VGA8x8"

4. Optional: Suppress kernel console on framebuffer

To avoid any text appearing, add:

quiet loglevel=3

Hi @alvaro.tx,

This is my system information:
root@apalis-imx8-07314753:~# tdx-info

Software summary

Bootloader: U-Boot
Kernel version: 5.15.177-6.7.0-devel+git.5a6602cc6c32 #1 SMP PREEMPT Fri Mar 21 16:22:58 UTC 2025
Kernel command line: root=PARTUUID=ec9ac34c-02 ro rootwait console=tty1 console=ttyLP1,115200 consoleblank=0 earlycon video=LVDS-1:1024x768@60e fbcon=map:1 fbcon=font:VGA8x8
Distro name: NAME=“TDX Wayland with XWayland”
Distro version: VERSION_ID=6.7.0-devel-20250321025050-build.0
Distro variant: -
Hostname: apalis-imx8-07314753

Hardware info

HW model: Toradex Apalis iMX8QP V1.1 on Apalis Evaluation Board
Toradex version: 0049 V1.1C
Serial number: 07314753
Processor arch: aarch64

1 Like

Thanks for the information @victorduong. Can you check my previous post about simple-framebuffer and try to implement it and see if it solves the flicker? I don’t think there are other alternatives for a smooth transition between U-Boot and Linux kernel.