Migrating device tree for Udooneo from 4.1 to 6.6 : Display (LVDS)

Discussion in 'UDOO NEO' started by CartonDu, Oct 10, 2025.

  1. CartonDu

    CartonDu UDOOer

    Joined:
    Apr 23, 2018
    Messages:
    3
    Likes Received:
    0
    Hi,

    I’m migrating a device from Yocto thud to scarthgap and moving from a custom 4.1 kernel (fmntf/linux_kernel 4.1.15_2.x-udoo) to linux-fslc-imx 6.6. Hardware is Udooneo Extended (iMX6SoloX) with the stock 7" LVDS panel (UMSH-8596MD-20T w/ DS90CF364 + ST1332 touch).

    Goal: run X11 with etnaviv (hardware accelerate) because the newer imx-viv-gpu doesn’t support X11 for our Electron apps.

    What works:
    • Screen backlight and splash are visible during early boot.
    • Touch works.
    Problem:
    • At a certain point during boot the LVDS image gets heavy tearing/grey lines. X starts but the same tearing appears. Looks like a mode/driver handover problem.
    What I’m attaching (below):
    • current device-tree fragment (imx6sx-udoo-neo-lvds7.dtsi).
    • some useful logs and outputs I captured (dmesg, Xorg log, /dev/dri listing).
    Current device-tree fragment (imx6sx-udoo-neo-lvds7.dtsi) which is mostly the same as the one from kernel 4.1:
    Code:
    / {
       reg_lcd_pwr: regulator-lcdpwr {
           compatible = "regulator-fixed";
           regulator-name = "LCD POWER";
           gpio = <&gpio4 27 GPIO_ACTIVE_LOW>;
           enable-active-high;
           regulator-boot-on;
           regulator-always-on;
           status = "okay";
       };
    
       backlight_regulator: regulator-backlight {
           compatible = "regulator-fixed";
           regulator-name = "LCD BACKLIGHT BL_ON";
           gpio = <&gpio6 3 GPIO_ACTIVE_LOW>;
           enable-active-high;
           regulator-boot-on;
           regulator-always-on;
       };
    };
    
    &lcdif2 {
       display = <&display1>;
       disp-dev = "ldb";
       status = "okay";
       display1: display@1 {
           bits-per-pixel = <16>;
           bus-width = <18>;
       };
    };
    
    &ldb {
       pinctrl-names = "default";
       pinctrl-0 = <&pinctrl_ldb_0>;
       lcd-supply = <&reg_lcd_pwr
                       &backlight_regulator>;
       status = "okay";
       lvds-channel@0 {
           fsl,data-mapping = "spwg";
           fsl,data-width = <18>;
           crtc = "lcdif2";
           status = "okay";
           display-timings {
               native-mode = <&timing1>;
               timing1: LDB-WVGA {
                   clock-frequency = <33660000>;
                   hactive = <800>;
                   vactive = <480>;
                   hback-porch = <56>;
                   hfront-porch = <50>;
                   vback-porch = <23>;
                   vfront-porch = <20>;
                   hsync-len = <150>;
                   vsync-len = <2>;
               };
           };
       };
    };
    
    &i2c1 {
       touchscreen: st1232@55 {
           compatible = "sitronix,st1232";
           reg = <0x55>;
           interrupt-parent = <&gpio6>;
           interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
           pinctrl-0 = <&pinctrl_st1232>;
           pinctrl-names = "default";
           gpios = <&gpio6 5 GPIO_ACTIVE_LOW>;
       };
    };
    
    &dcic2 {
       dcic_id = <1>;
       dcic_mux = "dcic-lvds";
       status = "okay";
    };
    
    &lcdif1 {    /* Disable HDMI */
       status = "disabled";
    };
    
    &i2c3 {        /* Disable HDMI */
       status = "disabled";
    };
    Here's some logs and outputs:

    Code:
    user@host:~# dmesg | grep -E "etnaviv|drm|mxsfb"
    [    1.236707] etnaviv etnaviv: bound 1800000.gpu (ops 0xc0d7c0b8)
    [    1.244047] etnaviv-gpu 1800000.gpu: model: GC400, revision: 4645
    [    1.250843] etnaviv-gpu 1800000.gpu: Need to move linear window on MC1.0, disabling TS
    [    1.259865] [drm] Initialized etnaviv 1.4.0 20151214 for etnaviv on minor 0
    [    1.267241] Error: Driver 'mxsfb' is already registered, aborting...
    [    2.141557] mxsfb 2224000.lcdif: supply lcd not found, using dummy regulator
    [    2.237241] mxsfb 2224000.lcdif: registered mxc display driver ldb
    [    2.342101] mxsfb 2224000.lcdif: initialized
    user@host:~# ls /dev/dri/
    by-path  card0    renderD128
    user@host:~# ls /usr/lib/xorg/modules/drivers/modesetting_drv.so
    /usr/lib/xorg/modules/drivers/modesetting_drv.so
    user@host:~# grep -E "(EE|WW|etnaviv|modesetting|DRM)" /var/log/Xorg.0.log
    [   110.902] Current Operating System: Linux pad2 6.6.101-lf-6.6.y-lf-6.6.y-g36cee4c51e9a #1 PREEMPT Fri Aug  8 14:52:48 UTC 2025 armv7l
       (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
    [   110.944] (WW) The directory "/usr/share/fonts/X11/misc" does not exist.
    [   110.944] (WW) The directory "/usr/share/fonts/X11/TTF" does not exist.
    [   110.944] (WW) The directory "/usr/share/fonts/X11/OTF" does not exist.
    [   110.944] (WW) The directory "/usr/share/fonts/X11/Type1" does not exist.
    [   110.944] (WW) The directory "/usr/share/fonts/X11/100dpi" does not exist.
    [   110.945] (WW) The directory "/usr/share/fonts/X11/75dpi" does not exist.
    [   110.966] (II) Platform probe for /sys/devices/platform/etnaviv/drm/card0
    [   111.079]     falling back to /sys/devices/platform/etnaviv/drm/card0
    [   111.416] (WW) Falling back to old probe method for fbdev
    [   111.707] (II) Initializing extension MIT-SCREEN-SAVER
    [   114.495] (II) XINPUT: Adding extended input device "st1232-touchscreen" (type: TOUCHSCREEN, id 6)
    user@host:~# glxinfo | grep -E "OpenGL renderer|OpenGL vendor"
    Error: unable to open display
    user@host:~# export DISPLAY=:0
    user@host:~# glxinfo | grep -E "OpenGL renderer|OpenGL vendor"
    Error: unable to open display :0
    What I expect:
    • a stable LVDS framebuffer handed to KMS/etnaviv and a working X11 modesetting driver with hw accel (no tearing).
    What I’ve already tried:
    • Using etnaviv (driver loads; /dev/dri/card0 exists).
    • Confirmed modesetting driver is present.
    • Left LVDS node mostly identical to old 4.1 .dtsi.
    Questions / hints I think are relevant (please point out if I’m wrong):
    1. Is the tearing likely caused by a DT timing mismatch or by a double-driver handover (mxsfb vs. etnaviv/modesetting)? I see Error: Driver 'mxsfb' is already registered, aborting....
    2. Do I need to enable/disable specific kernel CONFIGs (fbdev vs drm/KMS) or build etnaviv as builtin vs module for a clean handover?
    3. Are there DT properties I’m missing for the LDB -> lcdif2 CRTC mapping (crtc name, fsl,data-mapping, pixelclock) that would cause visible tearing?
    4. Anything obvious in the dts that will break atomic modeset / KMS?
    What I can provide on request:
    • uname -a, kernel .config, full dmesg, lsmod, cat /proc/fb, cat /sys/class/drm/*/status, and the full Xorg.0.log.
    Thanks for any pointers. I’m new to modern KMS/DT handover so please tell me bluntly if I misunderstood something.

    Hope someone is still active here :)
     

Share This Page