Colibri iMX8DX rgb connected display flickers

Hi,

We have a custom board using Colibri iMX8DX module which connects over 24bit RGB through a LVDS transmitter to a display. The display has a resolution of 1280x800px.
I managed to adopt the device-tree and I am really sure the timing for the display is correct.

When I have static display content (nothing changes), the image is stable. As soon as there is something dynamic (like having a clock changing every second) the image is flickering. The boot screen is also shown correctly without any flickering. My application is using qt5 with wayland-egl platform. Cinematic-experience demo application shows the same behavior.

Furthermore I used the eval-board to connect a VGA display.
By applying different device-tree overlays, I changed display resolution:
At VGA resolution - my application doesn’t show any flickering effects.
At FullHD resolution - application and even the boot screen show those errors.

I wonder if it is related to framebuffer memory being too small - but I don’t know how to change it.

Same display works on a similar customized board with iMX6.

Thanks for helping

Hi @mbehr !

Could you please share the output of tdx-info (reference: Getting Device Information with Tdx-Info | Toradex Developer Center).

Could you please also share a video of the display issue?

Best regards,

Could you please shoot a short video showing the flickering on your LVDS display and the full HD VGA display?

Hi,

here is the output of tdx-info:

Software summary
------------------------------------------------------------
Bootloader:               U-Boot
Kernel version:           5.4.193-5.7.2-devel+git.b60d3160fd04 #1 SMP PREEMPT Fri Dec 23 15:47:24 UTC 2022
Kernel command line:      root=PARTUUID=01bb9966-02 ro rootwait video=imxdpufb5:off video=imxdpufb6:off video=imxdpufb7:off fbmem=32M
Distro name:              NAME="TDX Wayland with XWayland"
Distro version:           VERSION_ID=5.7.2-devel-20230525042809-build.0
Hostname:                 colibri-imx8x-07202955
------------------------------------------------------------

Hardware info
------------------------------------------------------------
HW model:                 Toradex Colibri iMX8DX on Colibri Evaluation Board V3
Toradex version:          0052 V1.0D
Serial number:            07202955
Processor arch:           aarch64
------------------------------------------------------------

perhaps you are also interested in modetest and fbset output:

root@colibri-imx8x-07202955:~# modetest -M mxsfb-drm
Encoders:
id      crtc    type    possible crtcs  possible clones
34      33      none    0x00000001      0x00000000

Connectors:
id      encoder status          name            size (mm)       modes   encoders
31      34      connected       DPI-1           261x163         1       34
  modes:
        index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
  #0 1280x800 59.81 1280 1352 1480 1680 800 803 809 831 83500 flags: ; 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      37      (0,0)   (1280x800)
  #0 1280x800 59.81 1280 1352 1480 1680 800 803 809 831 83500 flags: ; 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
32      33      37      0,0             0,0     0               0x00000001
  formats: XR24 AR24 RG16 XB24 AB24 RX24 RA24 AR15 XR15 AB15 XB15 BG16
  props:
        8 type:
                flags: immutable enum
                enums: Overlay=0 Primary=1 Cursor=2
                value: 1

Frame buffers:
id      size    pitch


root@colibri-imx8x-07202955:~# fbset

mode "1280x800-0"
        # D: 0.000 MHz, H: 0.000 kHz, V: 0.000 Hz
        geometry 1280 800 1280 800 32
        timings 0 0 0 0 0 0 0
        accel true
        rgba 8/16,8/8,8/0,0/0
endmode

Here is a video of our custom hardware with 1280x800 resolution:

Standard VGA connected monitor with VGA resolution:

Standard VGA connected monitor with FullHD resolution:

Hello @mbehr ,
Based on the videos that you sent us, besides the flickering, there is a color mapping problem in your setup :
image

Here you can find an explanation of this issue , usually caused by having set the wrong LVDS mode (VESA or JEIDA)

Could you please try to display the following image and check the mode that you are using?

Best regards,
Josep

Hello @josep.tx ,

I am only having problems with the colors on the evaluation board because our system uses 24bpp RGB interface which is not supported on colibri evaluation board.
Our custom hardware (carrier board + display) doesn’t have issues with the colors - see first video.

My only problem is the flickering. Could this be related to framebuffer size (see original question)?

Thanks Marco

Hello @mbehr,

Thanks for the detailed description of the problem.
Unfortunately, I’ve to inform you that we are aware of the display flickering issue persisting on Colibri iMX8X V1.0D version using a combination of certain resolutions and GPU operations. The team is working on it to find a fix.

In the meantime, you could try a workaround by setting use-g2d=0 in /etc/xdg/weston/weston.ini file and see if that solves the issue.

Please let me know how it goes.

Hi rudhi.tx,

unfortunately that doesn’t affect anything in the demo application. The flickering is still the same.

Is this issue related to Weston / Wayland or Framebuffer? Perhaps my Qt application can use EGLFS without Wayland?

~WRD3381.jpg

Maybe here is some more information regarding configuration of the system through the device tree.
My Yocto build patches the device-tree file for eval board and defines the display directly here:


diff --git a/arch/arm64/boot/dts/freescale/imx8x-colibri-eval-v3.dtsi b/arch/arm64/boot/dts/freescale/imx8x-colibri-eval-v3.dtsi
index 980aba0d0edd9..d4ce7e989a969 100644
--- a/arch/arm64/boot/dts/freescale/imx8x-colibri-eval-v3.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8x-colibri-eval-v3.dtsi
@@ -192,3 +192,23 @@
 	status = "disabled";
 };
 
+// Innolux G121ICE display with a resolution of 1280x800 pixel
+&panel_dpi {
+	status = "okay";
+	data-mapping = "rgb24";
+	width-mm = <261>;
+	height-mm = <163>;
+	panel-timing {
+		clock-frequency = <83500000>;
+		hactive = <1280>;
+		vactive = <800>;
+		hsync-len = <128>;
+		hfront-porch = <72>;
+		hback-porch = <200>;
+		vsync-len = <6>;
+		vfront-porch = <3>;
+		vback-porch = <22>;
+		pixelclk-active = <1>;
+	};
+};
+
-- 

Furthermore I configure the pinmux to map the higher 6 rgb pins to lcd interface (but I don’t think the pin mapping might correspond with this issue).

Could there be any issues with the device tree fragments - especially with the data-mapping?

Thanks Marco

Hi @mbehr,

Is this issue related to Weston / Wayland or Framebuffer? Perhaps my Qt application can use EGLFS without Wayland?

From the best of my knowledge about this issue, I can tell you that this issue seems to be caused by the use of GPU operations (or the lower level OpenGL libraries). Also, there seems to be a corruption in the Framebuffer when the problem appears. We were able to reproduce the issue by using glmark2-es2-wayland. I think it’s worth a try to run the application without Wayland and see if it solves the issue.

Your device tree fragment looks good to me and in my opinion, it has nothing to do with the display flickering.

I will definitely update you here as soon as the team has found a fix to this issue.

I tried two things - first I added EGLFS to qt by having a qtbase_git.bbappend file with "PACKAGECONFIG_append = "eglfs "". This could be built but I wasn’t able to start my app with -platform eglfs. I stopped the weston service and tried to start my application but I always get “could not open egl display” error.
Then I tried a complete new build with DISTRO_FEATURES_remove = " wayland x11 ". But without wayland I don’t have a provider for libgles2:
imx-gpu-viv PROVIDES virtual/libgles2 but was skipped: missing required distro feature 'wayland' (not in DISTRO_FEATURES)

Is it possible to run OpenGL on iMX8 without having Wayland enabled / running?

Dear support team,

I managed to solve my issue (somehow by chance) because I applied a wrong device-tree overlay colibri-imx8x_parallel-rgb-lvds_overlay.dtbo instead of colibri-imx8x_parallel-rgb_overlay.dtbo .

The main difference between is that the first one uses:

&display_lcdif {
	status = "okay";
}

whereas the second one (the one that I had been used before) has:

&adma_lcdif {
	status = "okay";
}

Surprisingly after switching completely to the display_lcdif node and correctly applying the 24bpp settings and the pinmux, everything worked well.

For me it looks like there is some issues with the driver used by the adma_lcdif node when having a higher resolution together with 24bpp RGB format.

1 Like