Colibri imx8qxp MIPI DSI issue

I am trying to include a MIPI DSI display onto my Colibri iMX8qxp board (a viola, although this post requires none of the viola peripherals) and am having some issues. I suspect it is a problem with a custom interface board I have placed between my SOM and the display. I had a separate engineer do the layout on this interface board, and he used a two layer board without differential routing, length matching, 50-Ohm traces, or any ground planes. I am highly suspicious of this interface board, as the colibri datasheet claims that the maximum skew only allows for a delay caused by 1.5 mm of mismatch. That being said, I want to rule out all other possibilities before moving forward with another board spin. I will outline my bring-up process here (additionally, to help anyone who is starting down this path, as there is quite a lot of information to sort through) and would appreciate pointing out where any errors may lay.

NOTES:

1.) I followed the existing Toradex Webinar on MIPI development to create my custom driver (uploaded below, everything changed from the defaults is labeled under “Added by C. Castillo”). I then compiled based on a mix of the Toradex instructions as well as embear instructions. I pushed to my device and can successfully modprobe the panel_mipi_dsi.ko file.

2.) I created a device tree source based on this forum post and this device tree overlay. I have linked my dts file below as well. Riverdi also has a page on creating a device tree which I’ll link here, although I only used that to pull the init sequence (it includes the delays in the sequence, unlike the datasheet). I then compiled my dts→dtbo and pushed to the device with no errors.

3.) With those two items, I should see some activity on the screen, but I get nothing. Looking through the startup logs, I see the following when Weston starts up:

Starting Weston socket....
[OK] Listening on Weston Socket.
...
[8.031032] imx-drm display-subsystem: bound imx-drm-dpu-bliteng.2 (ops 0xffffffc080c7b6a8)
[8.048374] imx-drm display-subsystem: bound imx-dpu-crtc.0 (ops 0xffffffc080c7b2b0)
[8.132123] imx-drm display-subsystem: bound imx-dpu-crtc.1 (ops 0xffffffc080c7b2b0)
[8.148096] imx8_media_dev: module is from the staging directory, the quality is unknown, you hav.
[8.152905] [drm] Initialized imx-drm 1.0.0 20120507 for display-subsystem on minor 1

From this, I found the following NXP forum post which claims that the minimum pixel clock available is 74.25MHz. My pixel clock is running at 51 MHz. I am not sure whether this is true in my case, as the Colibri claims that it can operate to much lower resolutions than I’m running at (see the datasheet page 50).

4.) I finally probed the pins to determine whether there is any obvious signal at the display. I totally expected garbage, as I don’t have good enough probes to really investigate the signal in finite detail. My probes claim to operate to 200 MHz, and so does my scope. I have had issues with these in the past, however. I have also included a scope picture with the probes on two sides of a differential pair. I can at least see that the edges I am seeing (whether they are just noise or something, I’m not certain) are in-phase and potentially mishapen. That would point to poor signal integrity. These are diffential signals and I would expect then to be out of phase, which I suppose points to noise. It definitely doesn’t look like MIPI, that’s for sure.

Anyways, I don’t know if anyone has answers to these questions, but I thought I’d ask. Any help is much appreciated. Can an interface board like the one posted below even be created for MIPI, or is it just too many connections to be feasible?

panel-mipi-dsi.c (22.5 KB)

colibri-imx8qxp_rvt70hsmnwca0_overlay.dts (2.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.


Based on your description, there are several critical issues that need to be addressed for your MIPI DSI display implementation on the Colibri iMX8X.

Signal Integrity Issues

Your suspicions about the interface board are well-founded. The Colibri iMX8X datasheet specifies strict DSI signal routing requirements that your interface board does not meet(1):

Critical Requirements Not Met:

  • Trace Impedance: 90Ω ±15% differential; 50Ω ±15% single-ended(1)
  • Max Intra-pair Skew: <1ps = 150μm(1)
  • Max Trace Length Skew between clock and data lanes: <10ps = 1.5mm(1)
  • Reference Plane: GND or PWR required(1)
  • Minimum pair to pair spacing: >2x intra-pair spacing(1)

Your two-layer board without differential routing, length matching, or ground planes violates all these requirements. The in-phase signals you’re observing on your scope confirm poor signal integrity - MIPI DSI differential pairs should be 180° out of phase.

Hardware Specifications

The Colibri iMX8X MIPI DSI interface specifications(1):

  • Max Frequency: 502.5MHz (1.05GT/s per data lane)
  • Max Trace Length from Module Connector: 200mm
  • Configuration: 1 load
  • Data Lanes: Up to 4 lanes capable of up to 1.05GHz data

Display Interface Details

The Colibri iMX8X provides two MIPI/DSI interfaces through an FFC connector (X2)(1). The interface supports:

  • Bidirectional communication (high-speed out, low power/speed in from display)
  • MIPI D-PHY for physical layer
  • Display resolution from 160x120 (QQVGA) to 1920x1200 (WUXGA) with 60Hz and 24bit(1)

Device Tree Customization

For MIPI DSI displays, you need proper device tree configuration(2). Device Tree Overlays can be used to modify the base device tree at runtime without rebuilding the entire system, which is particularly useful for display customization(2).

Recommendations

  1. Immediate Action: Replace your interface board with a proper 4-layer PCB design that meets all the signal routing requirements specified in the datasheet(1)

  2. Hardware Design: Ensure your new board includes:

    • Controlled impedance routing (90Ω differential)
    • Proper ground planes
    • Length matching between differential pairs
    • Minimal via usage in DSI traces
  3. Software Verification: Your kernel module and device tree approach appears sound based on the community discussion patterns(3), but the hardware issues are preventing proper signal transmission.

The interface board you’ve shown cannot reliably support MIPI DSI signaling due to the high-speed nature of the interface (up to 1.05GT/s per lane). The signal integrity requirements are not optional - they’re necessary for the differential signaling to function correctly.

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.

Yes, it’s possible, but such a board should follow the MIPI DSI layout requirements mentioned in the Carrier Board Layout Guide.