Request for Help: Display Issue on Verdin iMX8M Plus with Riverdi LVDS Panel

I am using a Riverdi 800x400 LVDS Panel (RVT50HQLNWC00-B), connected over a Toradex DSI to LVDS Adapter to a Dahlia Carrier Board, which has a Verdin iMX8M Plus SoM.

The backlight of the panel turns on, but it seems to happen regardless of whether or not I enable the device tree overlay. Apart from this, I am unable to render anything on the display. Details on what I have tried are further below.

For a brief software outline, here is the tdx-info command:

root@verdin-imx8mp-15415341:~# tdx-info 

Software summary
------------------------------------------------------------
Bootloader:               U-Boot
Kernel version:           5.15.148-6.6.0-devel-6.6.0-devel+git.23a8e831749d #1 SMP PREEMPT Thu Feb 29 20:25:21 UTC 2024
Kernel command line:      root=PARTUUID=544250fc-02 ro rootwait console=tty1 console=ttymxc2,115200 consoleblank=0 earlycon
Distro name:              NAME="TDX Wayland with XWayland"
Distro version:           VERSION_ID=6.6.0-devel-20241113144437-build.0
Distro variant:           -
Hostname:                 verdin-imx8mp-15415341
------------------------------------------------------------

Hardware info
------------------------------------------------------------
HW model:                 Toradex Verdin iMX8M Plus WB on Verdin Development Board
Toradex version:          0070 V1.1A
Serial number:            15415341
Processor arch:           aarch64
------------------------------------------------------------

I am building tdx-reference-multimedia-image with Yocto, creating a custom device tree overlay. It is based on:
verdin-imx8mp_dsi-to-lvds_panel-cap-touch-10inch-lvds_overlay.dts, the only changes being in the panel-lvds node. Below is the relevant section, I can add the entire overlay if needed.

&panel_lvds {
	compatible = "panel-lvds";
	backlight = <&backlight>;
	data-mapping = "vesa-24";
    height-mm = <64>;
    width-mm = <108>;
	status = "okay";

	panel-timing {
	    clock-frequency = <25000000>;
	    de-active = <1>;
	    hactive = <800>;
	    hback-porch = <8>;
	    hfront-porch = <8>;
		hsync-active = <0>;
	    hsync-len = <4>;
	    pixelclk-active = <1>;
	    vactive = <480>;
	    vback-porch = <8>;
	    vfront-porch = <8>;
		vsync-active = <0>;
	    vsync-len = <4>;
	};

	port {
		panel_in_lvds: endpoint {
			remote-endpoint = <&lvds_out_panel>;
		}; 
    };
};

If I add the native HDMI overlay and connect a monitor, the Weston desktop is rendered properly, so this likely rules out an issue with Weston itself. Regardless, here is the weston.ini file:

root@verdin-imx8mp-15415341:~# cat /etc/xdg/weston/weston.ini 
[core]
#gbm-format=argb8888
idle-time=0
use-g2d=1
xwayland=true
repaint-window=16
#enable-overlay-view=1
modules=screen-share.so

[output]
name=LVDS-1
mode=800x480@60
transform=normal

#[shell]
#size=1920x1080

[libinput]
enable_tap=true
touchscreen_calibrator=true
calibration_helper=/usr/bin/toradex-save-touchscreen-calibration

#[output]
#name=HDMI-A-1
#mode=1920x1080@60
#transform=rotate-90

#[output]
#name=HDMI-A-2
#mode=off
#       WIDTHxHEIGHT    Resolution size width and height in pixels
#       off             Disables the output
#       preferred       Uses the preferred mode
#       current         Uses the current crt controller mode
#transform=rotate-90

[screen-share]
command=/usr/bin/weston --backend=rdp-backend.so --shell=fullscreen-shell.so --no-clients-resize --rdp-tls-cert=/etc/freerdp/keys/server.crt --rdp-tls-key=/etc/freerdp/keys/server.key

When building, I have enabled some config options for linux-toradex that seemed important, like the following:

CONFIG_DRM_PANEL_LVDS=y
CONFIG_DRM_FSL_IMX_LVDS_BRIDGE=y
CONFIG_DRM_LVDS_CODEC=y

I cannot attach files due being a new user, but if needed I can provide the entire kernel .config.

Below is the output of several commands, which may clarify the context further, like modetest, kmscube and some relevant kernel logs.

root@verdin-imx8mp-15415341:~# modetest
trying to open device 'i915'...failed
trying to open device 'amdgpu'...failed
trying to open device 'radeon'...failed
trying to open device 'nouveau'...failed
trying to open device 'vmwgfx'...failed
trying to open device 'omapdrm'...failed
trying to open device 'exynos'...failed
trying to open device 'tilcdc'...failed
trying to open device 'msm'...failed
trying to open device 'sti'...failed
trying to open device 'tegra'...failed
trying to open device 'imx-drm'...done
Encoders:
id      crtc    type    possible crtcs  possible clones
34      33      DSI     0x00000001      0x00000001

Connectors:
id      encoder status          name            size (mm)       modes   encoders
35      34      connected       LVDS-1          108x64          1       34
  modes:
        index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot
  #0 800x480 60.98 800 808 812 820 480 488 492 500 25000 flags: nhsync, nvsync; type: preferred, driver
  props:
        1 EDID:
                flags: immutable blob
                blobs:

                value:
        2 DPMS:
                flags: enum
                enums: On=0 Standby=1 Suspend=2 Off=3
                value: 0
        5 link-status:
                flags: enum
                enums: Good=0 Bad=1
                value: 0
        6 non-desktop:
                flags: immutable range
                values: 0 1
                value: 0
        4 TILE:
                flags: immutable blob
                blobs:

                value:

CRTCs:
id      fb      pos     size
33      38      (0,0)   (800x480)
  #0 800x480 60.98 800 808 812 820 480 488 492 500 25000 flags: nhsync, nvsync; type: preferred, driver
  props:
        24 VRR_ENABLED:
                flags: range
                values: 0 1
                value: 0

Planes:
id      crtc    fb      CRTC x,y        x,y     gamma size      possible crtcs
31      33      38      0,0             0,0     0               0x00000001
  formats: XR24 AR24 RG16 XB24 AB24 AR15 XR15
  props:
        8 type:
                flags: immutable enum
                enums: Overlay=0 Primary=1 Cursor=2
                value: 1
        32 zpos:
                flags: immutable range
                values: 0 0
                value: 0

Frame buffers:
id      size    pitch
root@verdin-imx8mp-15415341:~# journalctl -u weston
Apr 28 18:52:14 verdin-imx8mp-15415341 systemd[1]: Starting Weston, a Wayland compositor, as a system service...
Apr 28 18:52:15 verdin-imx8mp-15415341 systemd[1]: Started Weston, a Wayland compositor, as a system service.

I do see some warnings regarding the regulators (see below) but I do not know how to address them and whether or not these are relevant. It is also a bit unexpected since the device tree overlay is heavily based on an “official” one.

root@verdin-imx8mp-15415341:~# dmesg | grep -i -e drm -e dsi -e sn65 -e regulator -e gpio
[    0.320742] platform 32e80000.lcd-controller: Fixing up cyclic dependency with 32e60000.mipi_dsi
[    1.324428] gpio-125 (CTRL_SLEEP_MOCI#): hogged as output/high
[    1.335211] reg-fixed-voltage regulator-dsi-lvds: nonexclusive access to GPIO for regulator-dsi-lvds
[    1.411117] at24 0-0050: supply vcc not found, using dummy regulator
[    1.454575] i2c 3-002c: Fixing up cyclic dependency with 32e60000.mipi_dsi
[    1.480376] at24 3-0050: supply vcc not found, using dummy regulator
[    1.495414] at24 3-0057: supply vcc not found, using dummy regulator
[    1.515883] imx8mq-usb-phy 381f0040.usb-phy: supply vbus not found, using dummy regulator
[    1.657632] sdhci-esdhc-imx 30b50000.mmc: Got CD GPIO
[    1.970084] input: gpio-keys as /devices/platform/gpio-keys/input/input1
[    2.861728] +V3.3_SW: Underflow of regulator enable count
[    4.464338] systemd[1]: Starting Load Kernel Module drm...
[    4.721490] [drm] Initialized vivante 1.0.0 20170808 for 40000000.mix_gpu_ml on minor 0
[    5.846751] atmel_mxt_ts 3-004a: supply vdda not found, using dummy regulator
[    5.877951] atmel_mxt_ts 3-004a: supply vdd not found, using dummy regulator
[    5.904123] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[    5.991509] imx-drm display-subsystem: bound imx-lcdifv3-crtc.0 (ops lcdifv3_crtc_ops)
[    5.999765] imx_sec_dsim_drv 32e60000.mipi_dsi: version number is 0x1060200
[    6.011360] imx-drm display-subsystem: bound 32e60000.mipi_dsi (ops imx_sec_dsim_ops [sec_mipi_dsim_imx])
[    6.036884] [drm] Initialized imx-drm 1.0.0 20120507 for display-subsystem on minor 1
[    6.292986] imx-drm display-subsystem: [drm] fb0: imx-drmdrmfb frame buffer device

If I stop the weston service and run kmscube, it swears it is rendering, but the display shows nothing.

root@verdin-imx8mp-15415341:~# systemctl stop weston
[  288.424495] audit: type=1701 audit(1651172464.836:22): auid=0 uid=0 gid=0 ses=2 pid=760 comm="weston" exe="/usr/bin/weston" sig=11 res=1
Warning: Stopping weston.service, but it can still be activated by:
  weston.socket
root@verdin-imx8mp-15415341:~# kmscube
Using display 0xaaaae489d9d0 with EGL version 1.5
===================================
EGL information:
  version: "1.5"
  vendor: "Vivante Corporation"
  client extensions: "EGL_EXT_client_extensions EGL_EXT_platform_base EGL_KHR_platform_wayland EGL_EXT_platform_wayland EGL_EXT_device_query EGL_EXT_device_drm EGL_EXT_device_drm_render_node EGL_KHR_platform_gbm"
  display extensions: "EGL_KHR_fence_sync EGL_KHR_reusable_sync EGL_KHR_wait_sync EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_gl_renderbuffer_image EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_KHR_lock_surface EGL_KHR_create_context EGL_KHR_no_config_context EGL_KHR_surfaceless_context EGL_KHR_get_all_proc_addresses EGL_EXT_create_context_robustness EGL_EXT_protected_surface EGL_EXT_protected_content EGL_EXT_buffer_age EGL_ANDROID_native_fence_sync EGL_WL_bind_wayland_display EGL_WL_create_wayland_buffer_from_image EGL_KHR_partial_update EGL_EXT_swap_buffers_with_damage EGL_KHR_swap_buffers_with_damage EGL_EXT_pixel_format_float"
===================================
OpenGL ES 2.x information:
  version: "OpenGL ES 3.1 V6.4.3.p4.398061"
  shading language version: "OpenGL ES GLSL ES 3.10"
  vendor: "Vivante Corporation"
  renderer: "Vivante GC7000UL"
  extensions: "GL_OES_vertex_type_10_10_10_2 GL_OES_vertex_half_float GL_OES_element_index_uint GL_OES_mapbuffer GL_OES_vertex_array_object GL_OES_compressed_ETC1_RGB8_texture GL_OES_compressed_paletted_texture GL_OES_texture_npot GL_OES_rgb8_rgba8 GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_OES_depth24 GL_OES_depth32 GL_OES_packed_depth_stencil GL_OES_fbo_render_mipmap GL_OES_get_program_binary GL_OES_fragment_precision_high GL_OES_standard_derivatives GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_image_external_essl3 GL_OES_EGL_sync GL_OES_texture_stencil8 GL_OES_shader_image_atomic GL_OES_texture_storage_multisample_2d_array GL_OES_required_internalformat GL_OES_surfaceless_context GL_OES_draw_buffers_indexed GL_OES_texture_border_clamp GL_OES_texture_buffer GL_OES_texture_cube_map_array GL_OES_draw_elements_base_vertex GL_OES_texture_half_float GL_OES_texture_float GL_KHR_blend_equation_advanced GL_KHR_debug GL_KHR_robustness GL_KHR_robust_buffer_access_behavior GL_EXT_texture_type_2_10_10_10_REV GL_EXT_texture_compression_dxt1 GL_EXT_texture_format_BGRA8888 GL_EXT_texture_compression_s3tc GL_EXT_read_format_bgra GL_EXT_multi_draw_arrays GL_EXT_frag_depth GL_EXT_discard_framebuffer GL_EXT_blend_minmax GL_EXT_multisampled_render_to_texture GL_EXT_color_buffer_half_float GL_EXT_color_buffer_float GL_EXT_robustness GL_EXT_texture_sRGB_decode GL_EXT_draw_buffers_indexed GL_EXT_texture_border_clamp GL_EXT_texture_buffer GL_EXT_texture_cube_map_array GL_EXT_multi_draw_indirect GL_EXT_draw_elements_base_vertex GL_EXT_texture_rg GL_EXT_protected_textures GL_EXT_sRGB GL_EXT_draw_buffers GL_EXT_unpack_subimage GL_VIV_direct_texture "
===================================
Rendered 121 frames in 2.004442 sec (60.365920 fps)
Rendered 242 frames in 4.008883 sec (60.365950 fps)
Rendered 363 frames in 6.013327 sec (60.365912 fps)
Rendered 484 frames in 8.017770 sec (60.365909 fps)
Rendered 605 frames in 10.022217 sec (60.365888 fps)
Rendered 726 frames in 12.026658 sec (60.365895 fps)
Rendered 847 frames in 14.031104 sec (60.365883 fps)
Rendered 968 frames in 16.035548 sec (60.365881 fps)

However, if I cancel kmscube I get the following and the backlight turns off:

[  592.507357] sn65dsi83 3-002c: failed to lock PLL, ret=-110

If any further information is required, I can provide it. Thank you in advance.

Hi, I’m the Toradex AI Assistant. The Toradex Support team will follow up with you shortly!

Did you like my answer?

:+1: :-1:


Hello,

Thank you for reaching out with your display issue on the Verdin iMX8M Plus. It sounds like you’re encountering a configuration challenge with your Riverdi LVDS panel setup. Let’s go through some steps to help you troubleshoot and resolve this.

  1. Device Tree Overlay Configuration: Double-check your device tree overlay settings. Ensure that the panel timings, such as clock-frequency, hactive, vactive, and other parameters, match the specifications in your panel’s datasheet. The total horizontal and vertical periods should be the sum of their respective active, porch, and sync lengths.

  2. PLL Lock Error: The error “failed to lock PLL” suggests a potential misconfiguration with the DSI to LVDS bridge. Verify that the clock settings in your device tree are correct for the SN65DSI83 bridge chip. This includes ensuring the DSI to LVDS adapter is properly configured.

  3. Physical Connections: Inspect all physical connections between the SoM, the DSI to LVDS adapter, and the LVDS panel. Make sure all cables are securely connected and there are no loose connections.

  4. Diagnostic Tools: Utilize tools like modetest to confirm the display configuration. This can help verify if the system recognizes the display and if the correct modes are being set.

  5. Kernel Configuration: Ensure that your kernel is configured with the necessary options, such as CONFIG_DRM_PANEL_LVDS and CONFIG_DRM_FSL_IMX_LVDS_BRIDGE, which are essential for supporting LVDS panels and the DSI to LVDS bridge.

By following these steps, you should be able to identify and resolve the issue with your LVDS panel. If you need further assistance, feel free to provide additional details.

Best regards,
Toradex AI Assistant

Please, also check if these links can help you solve your problem:

Verdin iMX8m plus two LVDS display support.

Hi @nicadan !

Are you still facing this issue with your display?

From what I saw, this is the datasheet, right?

Looking at the datasheet, seems like you got the right values for back and front porches, pulse widths, active both on horizontal and vertical. What you could do is adding the minimum and maximum values to your device tree (but I am not sure it would help).

You could also play with the values for vsync-active and hsync-active. Maybe they should be 1 instead of 0?

Best regards,

Hi @nicadan !

Do you have any updates regarding this topic?

Best regards,

I have managed to resolve this issue, it was caused by the STBYB pin of the display being active low, therefore I had to add the following in the device tree overlay to get it out of standby:

	status = "okay";

	enable-gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;

	panel-timing {

Right now it flickers, but I suspect it may be due to some improper electrical connections, as the flickering seems to die down once the display heats up.

But for the moment, this topic may be closed. Thanks for the assistance.

Hi @nicadan !

Thank you for sharing your solution!

Please mark it as the Solution, so it is clear that this topic is solved.

Best regards,