Keep displaying u-boot splash screen during kernel boot on IM8QM

I am working on achieving a seamless splash screen transition (U-Boot → Plymouth → Qt) on an Apalis i.MX8QM V1.1.

i have successfully enabled u-boot splash screen / plymouth video splash screen but i have an annoying blank screen between both that’s why i am trying to hold the u-boot splash screen till kernel boots as well

i followed this post : Preserve U-Boot splash through to kernel boot with Colibri-iMX8X
this is the u-boot-patch

0001-keep-display-active.patch (1.3 KB)i also enabled simple_frame_buffer in kernel defconfig i also patched the imx8qm-apalis-v1.1-eval.dtb by editing these
/ {
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;

    simplefb_reserved: framebuffer@ff700000 {
        reg = <0x0 0xff700000 0x0 0x400000>;
        no-map;
    };
};

chosen {
    stdout-path = "/bus@5a000000/serial@5a070000";
    ranges; /* Added to allow reg mapping */
    #address-cells = <2>;
    #size-cells = <2>;

    framebuffer {
        compatible = "simple-framebuffer";
        reg = <0x0 0xff700000 0x0 0x400000>;
        width = <1024>;
        height = <600>;
        stride = <4096>;
        format = "a8r8g8b8";
        status = "okay";
    };
};

};

this is whole dts in case u need it

imx8qm-apalis-v1.1-eval.dts (203.6 KB)

these are my last logs
oot@apalis-imx8-15543973:~# ls -d /proc/device-tree/chosen/framebuffer*
/proc/device-tree/chosen/framebuffer
root@apalis-imx8-15543973:~# dmesg | grep -i “framebuffer|dpu|drm”
[ 0.133697] platform bus@57240000:ldb@572410e0: Fixing up cyclic dependency with 57180000.dpu
[ 0.191366] simple-framebuffer ff700000.framebuffer: framebuffer at 0xff700000, 0x400000 bytes
[ 0.191376] simple-framebuffer ff700000.framebuffer: format=a8r8g8b8, mode=1024x600x32, linelength=4096
[ 0.191539] simple-framebuffer ff700000.framebuffer: fb0: simplefb registered!
[ 0.762888] dpu-core 56180000.dpu: driver probed
[ 0.764889] dpu-core 57180000.dpu: driver probed
[ 3.180549] systemd[1]: Starting Load Kernel Module drm…
[ 3.235526] systemd[1]: modprobe@drm.service: Deactivated successfully.
[ 3.236487] systemd[1]: Finished Load Kernel Module drm.
[ 3.414759] [drm] Initialized vivante 1.0.0 20170808 for 80000000.imx8_gpu1_ss on minor 0
[ 4.718214] imx-drm display-subsystem: bound imx-drm-dpu-bliteng.2 (ops 0xffff800008d1a090)
[ 4.718608] imx-drm display-subsystem: bound imx-drm-dpu-bliteng.5 (ops 0xffff800008d1a090)
[ 4.719858] imx-drm display-subsystem: bound imx-dpu-crtc.0 (ops 0xffff800008d19d50)
[ 4.724696] imx-drm display-subsystem: bound imx-dpu-crtc.1 (ops 0xffff800008d19d50)
[ 4.726268] imx-drm display-subsystem: bound imx-dpu-crtc.3 (ops 0xffff800008d19d50)
[ 4.726703] imx-drm display-subsystem: bound imx-dpu-crtc.4 (ops 0xffff800008d19d50)
[ 4.727449] imx-drm display-subsystem: bound bus@57240000:ldb@572410e0 (ops 0xffff800000d0b0f8)
[ 4.729403] [drm] Initialized imx-drm 1.0.0 20120507 for display-subsystem on minor 1
[ 4.733525] imx-drm display-subsystem: [drm] fb1: imx-drmdrmfb frame buffer device
[ 5.850061] dpu-core 57180000.dpu: failed to wait for FrameGen1 frame counter moving
[ 6.974133] [drm] [CRTC:125:crtc-3] dpu_crtc_atomic_enable: wait for content shdld done timeout
[ 7.074289] dpu-core 57180000.dpu: failed to wait for FrameGen1 secondary syncup
[ 7.074314] [drm] [CRTC:125:crtc-3] dpu_crtc_atomic_enable: FrameGen requests to read empty FIFO
[ 15.222062] dpu-core 57180000.dpu: failed to wait for FrameGen1 frame counter moving
[ 16.254107] [drm] [CRTC:125:crtc-3] dpu_crtc_atomic_flush: wait for content shdld done timeout
[ 17.822112] [drm] [CRTC:125:crtc-3] dpu_crtc_atomic_flush: wait for content shdld done timeout
[ 19.134099] [drm] [CRTC:125:crtc-3] dpu_crtc_atomic_flush: wait for content shdld done timeout
root@apalis-imx8-15543973:~# dmesg | grep “simple-framebuffer”
[ 0.191366] simple-framebuffer ff700000.framebuffer: framebuffer at 0xff700000, 0x400000 bytes
[ 0.191376] simple-framebuffer ff700000.framebuffer: format=a8r8g8b8, mode=1024x600x32, linelength=4096
[ 0.191539] simple-framebuffer ff700000.framebuffer: fb0: simplefb registered!
root@apalis-imx8-15543973:~# dmesg | grep -i “simple”
[ 0.191366] simple-framebuffer ff700000.framebuffer: framebuffer at 0xff700000, 0x400000 bytes
[ 0.191376] simple-framebuffer ff700000.framebuffer: format=a8r8g8b8, mode=1024x600x32, linelength=4096
[ 0.191539] simple-framebuffer ff700000.framebuffer: fb0: simplefb registered!
[ 7.182166] Modules linked in: btusb btintel bluetooth sd_mod t10_pi snd_soc_imx_audmix fsl_jr_uio caam_jr caamkeyblob_desc caamhash_desc caamalg_desc crypto_engine authenc libdes snd_soc_simple_card crct10dif_ce snd_soc_simple_card_utils snd_soc_imx_spdif panel_lvds mwifiex_pcie mwifiex cfg80211 rfkill ahci_imx libahci_platform libahci uas libata usb_storage scsi_mod scsi_common hid_multitouch atmel_mxt_ts snd_soc_sgtl5000 imx8qxp_adc snd_soc_fsl_audmix snd_soc_fsl_spdif snd_soc_fsl_sai snd_soc_fsl_asrc imx_pcm_dma snd_soc_core mxc_jpeg_encdec snd_compress snd_pcm_dmaengine v4l2_jpeg snd_pcm snd_timer snd imx8_media_dev(C) imx8qm_ldb phy_mixel_lvds caam error rpmsg_ctrl rpmsg_char imx_rpmsg_tty galcore(O) fuse
[ 17.926161] Modules linked in: rfcomm algif_hash algif_skcipher af_alg btusb btintel bluetooth sd_mod t10_pi snd_soc_imx_audmix fsl_jr_uio caam_jr caamkeyblob_desc caamhash_desc caamalg_desc crypto_engine authenc libdes snd_soc_simple_card crct10dif_ce snd_soc_simple_card_utils snd_soc_imx_spdif panel_lvds mwifiex_pcie mwifiex cfg80211 rfkill ahci_imx libahci_platform libahci uas libata usb_storage scsi_mod scsi_common hid_multitouch atmel_mxt_ts snd_soc_sgtl5000 imx8qxp_adc snd_soc_fsl_audmix snd_soc_fsl_spdif snd_soc_fsl_sai snd_soc_fsl_asrc imx_pcm_dma snd_soc_core mxc_jpeg_encdec snd_compress snd_pcm_dmaengine v4l2_jpeg snd_pcm snd_timer snd imx8_media_dev(C) imx8qm_ldb phy_mixel_lvds caam error rpmsg_ctrl rpmsg_char imx_rpmsg_tty galcore(O) fuse
[ 19.238159] Modules linked in: rfcomm algif_hash algif_skcipher af_alg btusb btintel bluetooth sd_mod t10_pi snd_soc_imx_audmix fsl_jr_uio caam_jr caamkeyblob_desc caamhash_desc caamalg_desc crypto_engine authenc libdes snd_soc_simple_card crct10dif_ce snd_soc_simple_card_utils snd_soc_imx_spdif panel_lvds mwifiex_pcie mwifiex cfg80211 rfkill ahci_imx libahci_platform libahci uas libata usb_storage scsi_mod scsi_common hid_multitouch atmel_mxt_ts snd_soc_sgtl5000 imx8qxp_adc snd_soc_fsl_audmix snd_soc_fsl_spdif snd_soc_fsl_sai snd_soc_fsl_asrc imx_pcm_dma snd_soc_core mxc_jpeg_encdec snd_compress snd_pcm_dmaengine v4l2_jpeg snd_pcm snd_timer snd imx8_media_dev(C) imx8qm_ldb phy_mixel_lvds caam error rpmsg_ctrl rpmsg_char imx_rpmsg_tty galcore(O) fuse
root@apalis-imx8-15543973:~#

and finally this is what’s currently happening only u-boot splash screen is showing then nothing a blank screen till boot finishes no plymouth no qt app and the u-boot splash screen did not last any longer same behavior

NB : using apalis imx8qm board / u-boot 2022.04 / bsp “TDX Wayland with XWayland 6.7.0-devel-20251211112738+build.0 (kirkstone) apalis-imx8-15543973 -
Apalis-iMX8_Reference-Multimedia-Image“

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


I understand you’re trying to achieve a seamless splash screen transition on your Apalis iMX8QM V1.1. Based on the documentation and community discussions, there are some important limitations to be aware of.

Current Status of U-Boot Splash Screen on iMX8

According to the community discussions, U-boot splash screen is not supported for iMX8 based modules(1). The documentation specifically states that mainline U-boot doesn’t support video displays on i.MX8-based modules, and it’s unclear if it’s supported downstream(1).

Technical Analysis of Your Implementation

Looking at your logs, I can see that:

  1. Simple framebuffer is registering correctly:

    [    0.191366] simple-framebuffer ff700000.framebuffer: framebuffer at 0xff700000, 0x400000 bytes
    [    0.191539] simple-framebuffer ff700000.framebuffer: fb0: simplefb registered!
    
  2. DPU (Display Processing Unit) errors are occurring:

    [    5.850061] dpu-core 57180000.dpu: failed to wait for FrameGen1 frame counter moving
    [    6.974133] [drm] [CRTC:125:crtc-3] dpu_crtc_atomic_enable: wait for content shdld done timeout
    

These DPU errors suggest that the display subsystem handover from U-Boot to the kernel isn’t working properly(1).

Alternative Approaches

Since U-Boot splash screen support is not available for iMX8 modules(1), consider these alternatives:

1. Boot Time Optimization

Focus on reducing the overall boot time to minimize the blank screen duration. The documentation provides several resources for boot time optimization(1).

2. Early User Space Splash

Implement an early user space application that displays immediately after kernel boot, before your main Qt application loads.

3. Hardware Considerations

Your Apalis iMX8QM V1.1 module is documented in the revision history(2), and while it supports advanced display capabilities through the dual GC7000 GPU(3), the U-Boot display initialization limitations remain.

Current Limitations

The documentation indicates that for iMX8 modules(1):

  • U-boot Splash Screen is very static and requires U-boot recompilation
  • Linux Kernel Splash Screen is also very limited, static, and requires Kernel recompilation
  • There’s no mechanism for smooth transition of video handling between U-boot and Linux Kernel

Recommendation

Given the technical limitations with U-Boot splash screen support on iMX8, I recommend focusing on boot time optimization techniques rather than attempting to preserve the U-Boot framebuffer through to kernel boot. The DPU timeout errors in your logs suggest fundamental compatibility issues with this approach on the iMX8 platform.

Best regards, Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.