[Verdin iMX95] DSI-to-HDMI (LT8912B) Not Working — imx95-pixel-interleaver Failed to Create Device Link
Environment
| Item | Detail |
|---|---|
| SoM | Verdin iMX95 Hexa 8GB WB IT V1.0B (S/N: 12594470) |
| Carrier Board | Custom carrier board (Mallow-compatible socket) |
| DSI Adapter | Custom expansion module with Lontium LT8912B (DSI-to-HDMI bridge) |
| OS Image | TDX Wayland with XWayland 7.6.0+build.14 (Reference Multimedia Image) |
| Kernel | 6.6.129-7.6.0 |
| Base DTB | imx95-verdin-wifi-dev.dtb |
| Active Overlays | verdin-imx95_dsi-to-hdmi_overlay.dtbo, verdin-imx95_spidev_overlay.dtbo |
Background / Setup
This setup uses a custom carrier board (not the official Dahlia or Mallow) designed around the Mallow SOM socket. The board has the following relevant hardware:
-
LT8912B DSI-to-HDMI bridge connected to
I2C_2_DSI(SODIMM pins 53/55,lpi2c3,42530000.i2c, busi2c-2) at addresses0x48and0x49 -
DSI signals all routed to the LT8912B expansion module socket
-
No on-board GPIO expander at
i2c-1(0x21) — only the SOM-internalpca953x 0-0020is present
Image Recovery
The board was originally running a minimal image. Since the custom board lacks USB pinctrl for RNDIS/UMS recovery and has no recovery button or accessible SODIMM Pin 246, USB-based TEZI recovery was not possible.
Recovery was performed manually via USB RNDIS (usb0: 192.168.11.1/24) using HTTP + dd:
-
Flashed
imx-bootto/dev/mmcblk0boot0 -
Extracted
rootfs.bootfs.tar.xzto mmcblk0p1 (FAT) -
Extracted
rootfs.tar.xzto mmcblk0p2 (ext4) -
Applied
u-boot-initial-env-sdviafw_setenv -s
After recovery, the board boots successfully into TDX Wayland with XWayland 7.6.0+build.14.
Overlay Modification
The stock verdin-imx95_dsi-to-hdmi_overlay.dtbo references lpi2c4 (42540000.i2c), but the LT8912B is physically connected to lpi2c3 (42530000.i2c, i.e., i2c-2). This was corrected by decompiling the DTB overlay with dtc, changing lpi2c4 → lpi2c3 in __fixups__, recompiling, and deploying.
Verification:
i2cdetect -y 2
# 0x48, 0x49 detected (UU — driver bound)
ls -la /sys/bus/i2c/devices/2-0048/driver
# → .../bus/i2c/drivers/lt8912
LT8912B is correctly detected and driver-bound on i2c-2. ![]()
Problem Description
Despite the LT8912B driver binding successfully, HDMI output never works. Weston fails to start, and no CRTC is created.
Key dmesg errors (every boot):
[9.223] imx95-dpu 4b400000.display-controller: [drm] Cannot find any crtc or sizes
[9.237] imx95-dpu 4b400000.display-controller: [drm] Cannot find any crtc or sizes
[9.239] imx95-pixel-interleaver 4b0d0000.bridge: Failed to create device link (0x180) with 4b400000.display-controller
Weston log:
DRM: head 'HDMI-A-1' found, connector 41 is connected
Failed to lookup init function: /lib/libgbm.so.1: undefined symbol: gbm_surface_get_in_fence_fd
no available modes for HDMI-A-1
Cannot configure an output using weston_drm_output_api.
DRM state:
ls /sys/class/drm/card0/crtc*
# (empty — no CRTC registered)
cat /sys/class/drm/card0-HDMI-A-1/status
# connected
Root Cause Analysis
Source code review
After reviewing the BSP kernel source (toradex_6.6-2.2.x-imx):
-
imx95-pixel-interleaver.c: Nodevice_link_addcall found. The driver only callsdrm_bridge_add()andof_drm_find_bridge(). -
dpu95-kms.c(dpu95_kms_prepare→dpu95_kms_init_encoder_per_crtc): Callsdrm_bridge_attach()which traverses the full bridge chain (DPU → pixel-interleaver → pixel-link → MIPI-DSI → LT8912B).
Actual cause: fw_devlink circular dependency
The Failed to create device link (0x180) error originates from the Linux fw_devlink subsystem (not the driver code itself), which automatically creates device links from DTB phandle references. The display pipeline has a circular dependency:
/soc/display-controller@4b400000 ←→ /soc/bridge@4b0d0000/channel@0
Both devices reference each other via OF graph endpoints. When fw_devlink tries to enforce probe ordering, it detects the cycle and the device_link_add call fails with -EINVAL, causing imx95-pixel-interleaver probe to fail. Without a registered bridge, imx95-dpu cannot build the DRM pipeline and reports “Cannot find any crtc or sizes”.
Confirmed by kernel boot log:
[0.041] /soc/bridge@4b0d0000/channel@0: Fixed dependency cycle(s) with /soc/display-controller@4b400000
[0.041] /soc/display-controller@4b400000: Fixed dependency cycle(s) with /soc/bridge@4b0d0000/channel@0
Attempted Workarounds
1. fw_devlink=off
fw_setenv tdxargs "fw_devlink=off"
Result: Circular dependency resolved — but new error appeared:
imx95-pixel-interleaver 4b0d0000.bridge: failed to request irq: -13 (EACCES)
imx95-pixel-interleaver: probe of 4b0d0000.bridge failed with error -13
With fw_devlink=off, irq_imx_irqsteer (the interrupt mux for the display subsystem) probes after imx95-pixel-interleaver, so the IRQ request fails with -EACCES.
2. fw_devlink=permissive
fw_setenv tdxargs "fw_devlink=permissive"
Result: Same as default — Failed to create device link (0x180) still occurs. permissive mode does not suppress the cycle detection failure.
3. Manual unbind/bind
echo "4b0d0000.bridge" > /sys/bus/platform/drivers/imx95-pixel-interleaver/unbind
echo "4b0d0000.bridge" > /sys/bus/platform/drivers/imx95-pixel-interleaver/bind
echo "4b400000.display-controller" > /sys/bus/platform/drivers/imx95-dpu/unbind
echo "4b400000.display-controller" > /sys/bus/platform/drivers/imx95-dpu/bind
Result: imx95-dpu rebind fails with -EEXIST because lt8912 already registered its DSI device during the first probe attempt (devm_mipi_dsi_device_register_full), and the second attempt finds a duplicate entry.
Additional Context
-
Same issue exists on SMARC iMX95 with DSI-to-HDMI adapter (community thread)
-
The mainline kernel patch series (October 2025, Marek Vasut) reworks pixel-interleaver and pixel-link drivers to remove inter-channel dependencies, and confirms: “Both DSI-to-HDMI path using LT8912 bridge and LVDS single-lane were tested on Toradex i.MX95 Verdin EVK v1.2” — but these changes are not yet in the Toradex BSP 7.6.0
Questions
-
Is there a known fix or patch for
imx95-pixel-interleaverprobe failure due tofw_devlinkcircular dependency in BSP 7.6.0? -
Is there a pre-built
kernel-devsrcor cross-compilation SDK available to rebuild theimx95_pixel_interleaver.komodule with a fix (e.g., returning-EPROBE_DEFERinstead of-EINVALondevice_link_addfailure)? -
Is BSP 7.7.0 or a nightly build expected to include the mainline pixel-interleaver rework that resolves this?
Full dmesg (display-related excerpt)
[ 8.670] lt8912 2-0048: supply vccmipirx not found, using dummy regulator
[ 8.697] lt8912 2-0048: supply vcchdmipll not found, using dummy regulator
[ 9.174] [drm] Initialized imx95-dpu 1.0.0 20230213 for 4b400000.display-controller on minor 0
[ 9.188] imx95-dpu 4b400000.display-controller: [drm] Cannot find any crtc or sizes
[ 9.201] imx95-pixel-interleaver 4b0d0000.bridge: Failed to create device link (0x180) with 4b400000.display-controller
[ 9.214] imx95-dpu 4b400000.display-controller: [drm] Cannot find any crtc or sizes
Posted by: Verdin iMX95 custom carrier board developer BSP: 7.6.0+build.14 | Kernel: 6.6.129-7.6.0 | Date: May 2026