LVDS flickering issue duing 6.7.0 to 7.5.0 Toradex migrations

Hello,

We are in the process of migrating from Toradex 6.7.0 software version to latest 7.5.0. While porting had to add some changes in the devicetree overlays to match the latest device tree structure but there have been no changes in the timings. Loading the 7.5.0 image detects the LVDS screen but the image keeps rolling upwards and also there is a horizontal shift in the screen. My panel timings and lvds_channel entries as below

	my_panel_lvds: my-panel-lvds {
		compatible = "panel-lvds";
		data-mapping = "vesa-24";
		label = "Device LVDS";
		status = "okay";

		width-mm = <217>;
		height-mm = <55>;

		panel-timing {
			clock-frequency = <31000000>;
			de-active = <1>;
			hactive = <1280>;
			hback-porch = <87>;
			hfront-porch = <72>;
			hsync-len = <1>;
			vactive = <320>;
			vback-porch = <22>;
			vfront-porch = <15>;
			vsync-len = <1>;
		};

		port {
                              /\* Port endpoint entries \*/
			};
		};
lvds-channel@0 {
	fsl,data-mapping = "spwg";
	fsl,data-width = <24>;
	status = "okay";
	
	port@1 {
           /* Port endpoint entries */
		};
	};

Could you please suggest what could be the issue as the same timing values and device tree entries worked fine for same LVDS display and board running on 6.7.0 version based Toradex image

Software summary

Bootloader: U-Boot
Kernel version: 6.6.119-7.5.0-devel-g0cfa9c1b4151 #1-Torizon SMP PREEMPT Thu Mar 12 16:41: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/2e366931c648ec63d17b9a0d897f858883802ff17cb6fda52904dea9adcd9723/0
Distro name: NAME=“DEBUG”
Distro version: VERSION_ID=7.5.0-devel-20260313153758-build.0
Distro variant: VARIANT=“Minimal”
Hostname: verdin-imx8mp-15112197

Hardware info
HW model: Toradex Verdin iMX8M Plus on Dahlia Board
Toradex version: 0063 V1.1A
Serial number: 15112197
Processor arch: aarch64

Hi, I’m the Toradex AI Assistant.

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


The display issues you’re experiencing with your LVDS panel after migrating to BSP 7.5.0 likely stem from device tree changes between BSP versions. Let me help you troubleshoot this systematically.

Device Tree Structure Changes

For the Verdin iMX8M Plus, the device tree structure for LVDS has evolved between BSP versions (1). The LVDS interface uses the ldb2 device node and connects through specific endpoints (1).

Recommended Overlay Structure

Based on the documentation, here’s the proper device tree overlay structure for Verdin iMX8M Plus LVDS (2):

&ldb2 {
	status = "okay";

	lvds-channel@0 {
		fsl,data-mapping = "spwg";
		fsl,data-width = <24>;
		status = "okay";

		port@1 {
			lvds_out: endpoint {
				remote-endpoint = <&panel_lvds_in>;
			};
		};
	};
};

(1)

Panel Configuration

Your panel timing looks reasonable, but ensure the panel node follows this structure:

panel_lvds: panel-lvds {
	compatible = "panel-lvds";
	data-mapping = "vesa-24";
	width-mm = <217>;
	height-mm = <55>;

	panel-timing {
		clock-frequency = <31000000>;
		de-active = <1>;
		hactive = <1280>;
		hback-porch = <87>;
		hfront-porch = <72>;
		hsync-len = <1>;
		vactive = <320>;
		vback-porch = <22>;
		vfront-porch = <15>;
		vsync-len = <1>;
	};

	port {
		panel_lvds_in: endpoint {
			remote-endpoint = <&lvds_out>;
		};
	};
};

(1)

Troubleshooting Steps

  1. Check Clock Frequency: The Verdin iMX8M Plus LVDS driver has specific clock frequency constraints (1). Verify your 31MHz clock is properly supported.

  2. Verify Overlay Loading: Check that your overlay is loading correctly:

    cat /sys/kernel/debug/device_tree_overlays
    
  3. Review Boot Logs: Look for LVDS-related errors in dmesg:

    dmesg | grep -i lvds
    dmesg | grep -i ldb
    

Known Issues

The documentation mentions that some pixel clock frequencies may cause harmonics and display issues with native LVDS on Verdin iMX8M Plus (1). If you continue experiencing problems, you might need to adjust the clock frequency or consider using the DSI-to-LVDS adapter instead (2).

Alternative Approach

If native LVDS continues to have issues, consider using the DSI-to-LVDS adapter overlay: verdin-imx8mp_dsi-to-lvds_panel-cap-touch-10inch-lvds_overlay.dtbo (2), which may provide more stable operation.

The rolling and shifting you’re seeing typically indicates timing synchronization issues that may be resolved by ensuring your overlay structure matches the current BSP requirements exactly.

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.

LVDS lanes not functional on imx8mp on Torizon 7.x may be of interest to you since I see your panel has a pixel clock of ~30MHz. My suspicion would be your pixel clock settings may not be being respected.

Thanks for the link - that’s indeed very relevant! You’re absolutely right about the pixel clock issue with native LVDS on Verdin iMX8M Plus.

Known LVDS Clock Frequency Issue

The documentation confirms this exact problem: the current LVDS driver implementation only supports 74.25 MHz single channel and 148.5 MHz dual channel LVDS (1). If a different frequency is set (like your 31 MHz), the value defaults to one of these frequencies, which would explain the display rolling and shifting you’re experiencing (1).

Workaround for Custom Clock Frequencies

The documentation provides a specific workaround that requires kernel modifications (1):

  1. Remove the frequency restriction code from drivers/gpu/drm/imx/imx8mp-ldb.c (1)

  2. Update the device tree to specify your desired clock frequency times 7 (since the internal divider divides by 7) (1). For your 31 MHz requirement, you would need approximately 217000000 in the media_blk_ctrl section:

&media_blk_ctrl {
       assigned-clock-rates = <500000000>, <200000000>,
                              <0>, <0>, <217000000>; // ~31MHz
};

(1)

  1. Recompile the kernel and device tree (1)

Recommended Alternative: DSI-to-LVDS Adapter

Given the complexity of the kernel modification, I’d recommend using the DSI-to-LVDS adapter approach instead, which supports custom timing configurations more reliably (2). The overlay verdin-imx8mp_dsi-to-lvds_panel-cap-touch-10inch-lvds_overlay.dtbo is available for this purpose (2).

Verification Command

You can verify the actual clock frequency being used with:

cat /sys/kernel/debug/clk/clk_summary | grep -C 5 video

(1)

This will likely show that your 31 MHz setting is being overridden to 74.25 MHz, confirming the issue.

The DSI-to-LVDS adapter route would be the safer approach to get your custom timing working without kernel modifications.

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.

Hi @Harikrishnan,

It looks like this section on known LVDS issues on verdin iMX8MP is what you are experiencing. Could you please try out that patch and see if it improves the situation? If yes, you will have to add the driver patch in your Yocto build. If you are using Torizon OS, you can add the device tree patch using Torizon Builder tool, however, the driver patch would still need to be added by Yocto.