Colibri IMX8X- Splash screen works on parallel LCD but not on-module lvds (X2)

Hi,

We are using the Coilibri IMX8DX 1 GB WB module on a custom carrier board. I have two device tree overlays created for the display:

  1. Parallel rgb running to an LVDS circuit on our PCB

  2. LVDS from the on-module connector X2

Ideally we would like to use the on-module LVDS so that we can get rid of external LVDS circuitry.

I can build both scenarios using a similar tcbuild.yaml (with torizoncore-builder) to make a Torizon image, and the only difference is which of the two overlays are included.

In scenario #1 everything works correctly. In scenario #2 however the splash screen does not work. Once the boot is complete the display does work correctly and shows everything fine, but it would be nice to have the splash screen during boot to show the user that the device is booting. Does anyone know why this might be happening, or what to check in the boot?

I have verified that the screen power on X2 and the backlight power elsewhere are coming on early in boot as expected, but the screen stays dark. Attached is the overlay file for the on-module LVDS scenario.

LVDS_X2_Overlay.dts (3.0 KB)

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 can help troubleshoot your splash screen issue with the on-module LVDS on the Colibri iMX8DX.

Understanding the Issue

Your situation shows that:

  • Parallel RGB → external LVDS circuit: splash screen works
  • On-module LVDS (X2): splash screen doesn’t appear, but display works after boot completes

This suggests a timing issue during the early boot stage where the splash screen is displayed.

Key Points to Investigate

1. Check Applied Overlays

First, verify your overlay was applied successfully. From monthly 6.1.0-devel-202212 onwards, you can check this by examining /proc/device-tree/chosen/overlays/(1):

# ls /proc/device-tree/chosen/overlays/
# cat /proc/device-tree/chosen/overlays/<your_overlay_name>.dtbo

If the value is 0, the overlay was applied successfully(1).

2. Boot Log Analysis

The splash screen is displayed very early in the boot process. Connect via serial console and examine the boot logs for:

  • Display initialization messages
  • Any errors or warnings related to LVDS or display subsystem
  • Timing of when the LVDS interface becomes active vs. when splash is attempted

3. Device Tree Overlay Verification

Without seeing your actual overlay file (the attachment isn’t accessible to me), here are critical areas to verify:

Ensure the LVDS controller is enabled early enough:

  • Check that your overlay doesn’t have dependencies that delay LVDS initialization
  • Verify the status = "okay" property is set correctly for the LVDS nodes

Compare timing parameters:

  • The parallel RGB might have different initialization timing than the on-module LVDS
  • Early boot splash requires the display to be ready when the splash service starts

4. Platform-Specific Considerations

Could you clarify which version of Torizon OS you’re running? This will help provide more specific guidance, as display subsystem behavior can vary between versions.

Recommended Next Steps

  1. Share your boot logs (via serial console) showing the LVDS initialization sequence
  2. Confirm your Torizon OS version using tdx-info(1)
  3. Compare the device tree overlay structure between your working parallel RGB overlay and the LVDS overlay to identify any structural differences

The fact that the display works correctly after boot completion indicates your overlay and hardware configuration are fundamentally correct—this is purely a timing/initialization sequence issue during early boot.

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.

Checking /proc/device-tree/… shows the overlay is applied successfully, as expected.

tdx-info shows the following:

Software summary
------------------------------------------------------------
Bootloader:               U-Boot
Kernel version:           6.6.138-7.6.1 #1-Torizon SMP PREEMPT Fri May  8 12:46:27 UTC 2026
Kernel command line:      root=LABEL=otaroot rootfstype=ext4 quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3 ostree=/ostree/boot.1/torizon/b819d4eb47e551c9830f93a5bd9453438636a06b82b980f7385447854bb45ce4/0
Distro name:              NAME="Torizon OS"
Distro version:           VERSION_ID=7.6.1-build.38
Distro variant:           VARIANT="Docker"
Hostname:                 colibri-imx8x-15639680
------------------------------------------------------------

Hardware info
------------------------------------------------------------
HW model:                 Toradex Colibri iMX8DX on Colibri Evaluation Board V3
Toradex version:          0051 V1.0E
Serial number:            15639680
Processor arch:           aarch64
------------------------------------------------------------

Attached is the boot log for the non-working case. When I compare dmsg between the two cases there isn’t anything obvious yet that points to the root cause.
dmesg_lvds.txt (35.6 KB)

Thank you for providing the additional details. Your system is running Torizon OS 7.6.1, and the overlay is confirmed as applied successfully.

Analysis of Your Situation

Based on your boot log and the fact that the display works after boot completes but the splash screen doesn’t appear, this is indeed an early boot initialization timing issue specific to the on-module LVDS path.

Key Observations

Looking at your configuration:

  • Kernel command line includes splash fbcon=map:3 which should enable the splash screen
  • The overlay applies successfully (verified via /proc/device-tree)
  • Display functions correctly once the system is fully booted
  • Only the early splash screen phase fails with on-module LVDS

Potential Root Causes

1. Framebuffer Console Mapping

The fbcon=map:3 parameter in your kernel command line maps the framebuffer console to a specific framebuffer device. With different display paths (parallel RGB vs. on-module LVDS), the framebuffer device enumeration order may differ.

Check this:

ls -la /dev/fb*

Compare the framebuffer devices available between your working (parallel RGB) and non-working (on-module LVDS) configurations. The splash screen may be attempting to render on the wrong framebuffer device.

2. Display Initialization Timing

The on-module LVDS controller may initialize later in the boot sequence than the parallel RGB path, missing the window when Plymouth (the splash screen service) attempts to display.

3. Device Tree Overlay Structure

Without seeing the actual content of your overlay, here are critical elements to verify:

Ensure your LVDS nodes have proper status:

&ldb1_phy {
    status = "okay";
};

&ldb1 {
    status = "okay";
};

&ldb1_ch0 {
    status = "okay";
};

Check panel timing parameters are correctly defined in your overlay.

Recommended Troubleshooting Steps

1. Compare Framebuffer Enumeration

Boot both configurations and compare:

cat /proc/fb
dmesg | grep -i framebuffer

2. Adjust Framebuffer Console Mapping

If the framebuffer device number differs between configurations, you may need to adjust the fbcon=map: parameter. You can modify this using TorizonCore Builder by customizing the kernel command line(1).

3. Review Your Device Tree Overlay

Since I cannot access your attached .dts file, could you share the key sections of your LVDS overlay, particularly:

  • The LVDS controller and PHY node configurations
  • Panel timing definitions
  • Any dependencies or references to other nodes

4. Check for Known Issues

There have been splash screen issues reported on various platforms. For reference, similar issues were fixed in recent releases:

  • Splash screen issues on DSI-to-LVDS configurations have been addressed(2)(3)
  • Platform-specific splash screen fixes continue to be implemented

5. Enable Early Console Output

Add earlyprintk to your kernel command line to get more detailed initialization logs that might reveal timing issues.

Next Steps

To help diagnose this further, please provide:

  1. Framebuffer device information from both working and non-working configurations
  2. Key sections of your LVDS device tree overlay (especially LVDS controller, PHY, and panel nodes)
  3. Comparison of dmesg | grep -E "(lvds|ldb|display|framebuffer)" output between both scenarios

This will help identify whether it’s a framebuffer mapping issue, timing issue, or overlay configuration issue.

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.

Greetings @tpeterson,

I double-checked on our own setup, using our LVDS display with the LVDS connector on our Iris V2 carrier board, which should use the same native LVDS display interface from the module. This setup works to show the splash screen.

Of course it’s not an exact 1 to 1 with your setup. But I can only reproduce with the hardware I have access to. I’m just saying this to say that splash screen on the native LVDS for Colibri iMX8X “should” work, at least on a basic level.

Now what stuck out to me was this part of your statement here:

Once the boot is complete the display does work correctly and shows everything fine

This tells me your overlay is correct, otherwise you wouldn’t see anything at all on this display. I believe what might be happening is that your setup/hardware needs additional drivers. What I mean is that we start the splash screen early during the initramfs before the system and kernel are fully ready. That way we can show some kind of splash screen early in the boot process. However, for any kind of display to work this early in the boot the initramfs needs to load all the needed drivers to start the display subsystem.

Since your display works when the boot is complete, I’m assuming that some driver(s) are missing from the initramfs. Without these the display stack for your LVDS display can’t be initialized which gives nothing for the splash screen to work with.

Unfortunately, there’s not an easy way to add additional drivers to the initramfs at this time without building a new OS image in Yocto.

Now that said, a standard LVDS display shouldn’t need additional drivers compared to our setup. So it’s odd if that is the case here. This is the most likely explanation I can think of for your display to be working, but not showing the splash screen.

Best Regards,
Jeremias

Hi Jeremias,

Thank you for the information and thoughts. It does appear that the following kernel modules are missing in initramfs that are later loaded and required: imx8qxp_ldb , phy_mixel_lfds_combo . However, I’m not sure why these would be needed by my display and not the test one that you are using or otherwise what makes the scenario different. What overlay file did you use in your test?

From dmesg:

torizon@colibri-imx8x-15639680:~$ dmesg | grep -E "(lvds|ldb|display|framebuffer)"
[    0.099745] /ldb1-display-controller/lvds-channel@0: Fixed dependency cycle(s) with /panel-lvds
[    0.099855] /ldb1-display-controller/lvds-channel@0: Fixed dependency cycle(s) with /bus@56000000/dpu@56180000
[    1.963907] Kernel module loaded from ramdisk: fsl_imx_ldb - result: 0
[    1.971778] Kernel module loaded from ramdisk: imx8mp_ldb - result: 0
[    1.982115] Kernel module loaded from ramdisk: phy_fsl_imx8mp_lvds - result: 0
[    2.016349] Kernel module loaded from ramdisk: display_connector - result: 0
[   17.735536] imx-drm display-subsystem: bound imx-drm-dpu-bliteng.2 (ops dpu_bliteng_ops)
[   17.745108] imx-drm display-subsystem: bound imx-dpu-crtc.0 (ops dpu_crtc_ops)
[   17.746073] imx-drm display-subsystem: bound imx-dpu-crtc.1 (ops dpu_crtc_ops)
[   17.772005] imx-drm display-subsystem: bound ldb1-display-controller (ops imx8qxp_ldb_ops [imx8qxp_ldb])
[   17.775742] [drm] Initialized imx-drm 1.0.0 20120507 for display-subsystem on minor 1
[   17.795368] imx-drm display-subsystem: [drm] fb0: imx-drmdrmfb frame buffer device

Loaded modules:

$ lsmod | grep -iE ‘ldb|lvds|phy’
imx8qxp_ldb 16384 0
phy_fsl_imx8q_pcie 12288 1
phy_cadence_salvo 12288 1
phy_mxs_usb 24576 1
phy_mixel_lvds_combo 12288 2 imx8qxp_ldb
phy_fsl_imx8_mipi_dphy 20480 0
phy_fsl_imx8mp_lvds 12288 0
imx8mp_ldb 12288 0
fsl_imx_ldb 12288 2 imx8mp_ldb,imx8qxp_ldb

Thanks,

Thomas

I took another look at my setup and I think I found the discrepancy between us. I was using the Iris V2 carrier board since it has an on-board connector for our LVDS display we sell. Otherwise I don’t have a LVDS display that easily connects to the on-module connect X2. I incorrectly assumed this connector on Iris V2 connects to the same native LVDS interface that X2 does.

After double checking I see now that it instead uses the module’s parallel RGB interface and a LVDS transceiver on the carrier board to achieve functionality. Basically my setup side steps the need to load the LVDS related kernel modules that your setup needs. Apologies for this confusion.

To proceed I can submit a request to add these kernel modules to Torizon OS’s initramfs. Though I’m not certain when this will be prioritized and scheduled by our team.

Is this something you can wait for, or do you need it urgently (i.e. within the next month or so)?

Best Regards,
Jeremias

Hi Jeremias,

Thanks for the info. I do not anticipate needing it urgently, this PCB is going into production next February and in the meantime we can either use Yocto to build the kernel or keep the off-module LVDS circuit for a while. However, definitely let me know if the modules get added to the initramfs in the future.

I would suggest making a note here that the on-module lvds won’t come up by default until late in the boot to alleviate confusion: Display Output, Resolution and Timings (Linux) | Toradex Developer Center

I will close this ticket since the different possible paths to a solution are now known.

Thanks,

Thomas

Thank you for clarifying the urgency of this. I’ll go ahead then and make the request internally so that we can eventually plan and prioritize the addition of these kernel modules to the initramfs.

I’ll update you here on this thread when there’s any significant news related to this request.

Best Regards,
Jeremias