Scarthgap linux kernel splash screen

Hey all,

we’re currently in the process of updating our Device from Kirkstone to Scarthgap. We’re using the Toradex BSP layers (not Torizon). We’re using a Verdin iMX8MP as the SoM and have a display attached via LVDS.

Everything mostly works, except for the splash screen. The splash screen we previously used worked using the framebuffer console, we just overwrote the default linux logo with the our own logo, and got a very early boot splash screen that way. Our graphical application boots very quickly so our rationale was that it doesn’t make much sense if we used a userspace splash screen like psplash or plymouth, just for the application to replace it half a second later.

With scarthgap however, we just see a black screen on console; we can successfully bind a terminal to the framebuffer and then we’ll see the output without issues. I also manually wrote some stuff into /dev/fb0 and I can see the output fine.

Furthermore, I added some printk’s inside the fbcon driver, and at least according to my tests, it did reach the point where the splash screen should be shown on screen. (I added a printk here: fbcon.c « core « fbdev « video « drivers - linux-toradex.git - Linux kernel for Apalis, Colibri and Verdin modules and it was triggered) The logo was the same that we used on kirkstone, and I also tried with the default linux logo and neither worked, so I don’t think the format of the logo is wrong or something.

Furthermore, when comparing the dmesg outputs of kirkstone and scarthgap, the scarthgap output looks a bit suspicious. I can see that the framebuffer console is initialized about 2 seconds later than in kirkstone, and I get some error messages like:

imx8mp-ldb ldb-display-controller: Failed to create device link (0x180) with 32e90000.lcd-controller

, and this message here is printed 15 times in total

imx-drm display-subsystem: bound imx-lcdifv3-crtc.0 (ops 0xffffffef143cbe20)

I attached our the .dtsi for our LVDS display, and the dmesg outputs of kirkstone and scarthgap. We don’t have set any kernel configs except for the ones required for the logo, e.g.

CONFIG_LOGO=y
CONFIG_LOGO_LINUX_VGA16=n
CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_DRM_PANEL_LVDS=y

I’ve read in another thread that splash screen didn’t work in scarthgap with LVDS, could this issue be related? Any things I could try or any more information I can provide?

Thanks in advance!

dmesg-output-kirkstone.txt (27.5 KB)

dmesg-output-scarthgap.txt (33.4 KB)

lvds.dtsi (1.2 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.


LVDS Splash Screen Issue on Verdin iMX8MP - Kirkstone to Scarthgap Migration

Issue Analysis

Your splash screen issue appears to be related to timing and initialization differences between the Kirkstone and Scarthgap BSP versions. The framebuffer console is being initialized later in Scarthgap, which affects when the splash screen appears(1).

Verdin iMX8M Plus LVDS Configuration

For the Verdin iMX8M Plus, the native LVDS output requires specific configuration(2). The error message you’re seeing indicates potential issues with the display controller binding:

imx8mp-ldb ldb-display-controller: Failed to create device link (0x180) with 32e90000.lcd-controller

Known LVDS Issues in Scarthgap

There are known timing-related issues with LVDS displays on the Verdin iMX8M Plus in newer BSP versions(2). The documentation mentions:

Be aware that even though it’s possible to change the pixel clock frequency as shown in this section, we have noticed that some harmonics may appear with certain pixel clock selections and it can cause some issues with the display image(2).

Recommended Solutions

1. Device Tree Configuration

Ensure your LVDS panel configuration follows the proper format for the panel-lvds driver(2):

panel_lvds: panel-lvds {
    compatible = "panel-lvds";
    backlight = <&backlight>;
    
    data-mapping = "jeida-18";
    width-mm = <345>;
    height-mm = <194>;
    
    panel-timing {
        clock-frequency = <138500000>;
        hactive = <1920>;
        vactive = <1080>;
        hfront-porch = <48>;
        hsync-len = <32>;
        hback-porch = <80>;
        vfront-porch = <3>;
        vsync-len = <5>;
        vback-porch = <23>;
        hsync-active = <0>;
        vsync-active = <0>;
        pixelclk-active = <0>;
    };
    
    port {
        panel_lvds_in: endpoint {
            remote-endpoint = <&lvds1_out>;
        };
    };
};

2. Color Mapping Configuration

Verify your fsl,data-mapping and fsl,data-width settings in the lvds-channel node(2):

fsl,data-mapping fsl,data-width data-mapping (panel-lvds node)
spwg 18 jeida-18
spwg 24 vesa-24
jeida 24 jeida-24

3. Framebuffer Console Configuration

The framebuffer console initialization timing has changed between BSP versions(1). You may need to adjust your kernel command line parameters to ensure proper initialization timing.

4. Alternative Approaches

Consider using overlays to manage your LVDS configuration(2). The most straightforward way to enable the desired overlay is to edit the overlays.txt file available on the /boot partition of the Verdin iMX8M Plus(2).

Troubleshooting Steps

  1. Verify Display Timings: Double-check that your panel timings match your display’s datasheet specifications
  2. Check Overlay Loading: Ensure your LVDS overlay is properly loaded during boot
  3. Monitor DRM/KMS: Use modetest -M imx-drm to verify the display pipeline is correctly initialized(2)
  4. Test with Known Working Panel: Try with a supported panel configuration to isolate the issue

The timing differences you’re observing between Kirkstone and Scarthgap suggest that the display subsystem initialization order has changed, which could affect when the framebuffer console becomes available for splash screen display.

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.

Hello @hannes.winkler,

We had an issue with splash-screen on Torizon OS.
Please check the following PR: initramfs-module-kmod: add missing modules to enable native LVDS by EdTheBearded · Pull Request #299 · torizon/meta-toradex-torizon · GitHub

Maybe you are having the same problem on your Yocto image.
Therefore, I think you may need to add some of those modules as built-in as well to get the LVDS early enough.

Best Regards,
Bruno

Hey, so I fixed it now.

Changing the modules you listed above to be built-in was not enough to get it working. I also needed build the backlight_pwm driver and imx27_pwm driver into the kernel to get it to probe early enough. Somehow, if these are built as modules, the display doesn’t just show the splash screen later (when the backlight driver probes), and it also doesn’t show the splash screen on the display with backlight disabled, it completely stops the splash screen from working.

My config fragment for splash screen now looks like this:

CONFIG_LOGO=y
CONFIG_LOGO_LINUX_VGA16=n
CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_DRM_PANEL_LVDS=y

# required so LVDS probes early enough for
# the splash screen to show up
CONFIG_DRM_FSL_IMX_LVDS_BRIDGE=y
CONFIG_DRM_IMX8MP_LDB=y
CONFIG_PHY_FSL_IMX8MP_LVDS=y
CONFIG_BACKLIGHT_PWM=y
CONFIG_PWM_IMX27=y

Hello @hannes.winkler,

Thanks for the update and sharing the solution here.

I think that the display driver probe was deferred due to the lack of the PWM driver for the backlight.
This could have caused the display to not be available when the splash-screen should have been written to it, explaining the behavior you saw.

Best Regards,
Bruno