Re: [PATCH 6/6] arm64: dts: freescale: imx8mp-verdin: Add Mezzanine with Toradex Display 10.1" LVDS V2

Frank Li <[email protected]>
Newsgroups gmane.linux.drivers.devicetree,gmane.linux.ports.arm.kernel,gmane.linux.kernel
Message-ID <aoSqJ7pHEgJ_RZmr@SMW015318>
On Tue, Aug 18, 2026 at 03:08:33PM -0300, Leonardo Costa wrote:
> On Thu, Aug 13, 2026 at 11:15:04AM -0500, Frank Li wrote:
> > On Thu, Aug 13, 2026 at 12:43:29PM -0300, Leonardo Costa wrote:
> > > On Thu, Aug 13, 2026 at 09:58:52AM -0500, Frank Li wrote:
> > > > On Thu, Aug 13, 2026 at 10:33:35AM -0300, Leonardo Costa wrote:
> > > > > From: Leonardo Costa <[email protected]>
> > > > >
> > > > > Add a device tree overlay enabling the Toradex Capacitive Touch Display
> > > > > 10.1" LVDS V2 on the Verdin Development Board with Verdin iMX8M Plus
> > > > > Mezzanine expansion board. The panel connects via the i.MX8M Plus LCDIF
> > > > > on the Mezzanine LVDS interface (J10). The panel is an Opto Logic
> > > > > SCX1001511GGC49 10.1" WXGA TFT LCD LVDS and the touch input is provided
> > > > > by an ILITEK ILI251x capacitive touch controller.
> > > > >
> > > > > Link: https://developer.toradex.com/hardware/accessories/displays/capacitive-touch-display-101inch-lvds
> > > > > Link: https://developer.toradex.com/hardware/verdin-som-family/add-ons/verdin-imx8m-plus-mezzanine
> > > > > Signed-off-by: Leonardo Costa <[email protected]>
> > > > > ---
> > > >
> > > > what's difference with Add Toradex Capacitive Touch Display 10.1" LVDS V2
> > > >
> > > > why not share one dtso?
> > > >
> > > > Frank
> > >
> > > Hi Frank,
> > >
> > > There are two main differences:
> > >
> > > 1. The mezzanine one uses different backlight controll pins, so here we
> > > use the 'backlight-mezzanine' node, instead of the 'backlight' one, used
> > > in the one without the mezzanine.
> > >
> > > 2. The touchscreen GPIO and interrupt pins are also different with the
> > > mezzanine board.
> >
> >
> > And there are for imx8mm
> > https://lore.kernel.org/imx/20260724-v1-verdin-imx8mm-dtbos-v2-3-9d7988bd76f6-2KBjVHiyJgBBDgjK7y7TUQ@public.gmane.org/
> >
> > https://lore.kernel.org/imx/sr26lfvwasgcosfzcf4ydtwxwjjutlio2yqpgxldatpzjo7e4y@77k7gefnjzvl/
> >
> > Any ways, it is too late for 7.3, we have enough time for 7.4 to discuss
> > work on optimization solution.
> >
> > If use nexus connectors, we can share one dtso now if there are not
> > clock settings.
>
> Hi Frank,
>
> I tried implementing the nexus connectors in imx8mp-verdin-wifi-dev.dts, and
> modify the Mezzanine overlay for the LVDS V2 display to do an initial test
> (diff with the changes at the end of the email). They worked partially, but it
> introduced an issue where the drivers come up much later.

Thank you for working on this.

> Before, the drivers
> relevant for the display (in this case, LCDIF and the touch controller
> specifically) came up at around ~8s. After introducing the nexus connector they
> come up at around ~20s, after the board has already booted (complete logs at
> https://paste.debian.net/hidden/81acfa7d):
>
>     [   21.008400] input: ILI210x Touchscreen as /devices/platform/soc@0/30800000.bus/30a30000.i2c/i2c-1/1-0041/input/input3
>     [   21.014785] [drm] Initialized imx-lcdif 1.0.0 for 32e90000.display-controller on minor 2
>     [   21.029634] Console: switching to colour frame buffer device 160x50
>     [   21.029823] imx-lcdif 32e90000.display-controller: [drm] fb0: imx-lcdifdrmfb frame buffer device
>     [   21.031376] imx8m-blk-ctrl 32ec0000.blk-ctrl: sync_state() pending due to 32e30000.dwe
>
> Was this behavior observed before? It may have not been noticed, since the
> drivers do come up at some point, and it may not be an issue for other
> interfaces, or they may actually come up earlier in other cases. In our case
> this is important though, since visual feedback from the display is expected
> early.

Understand, we have not notified this problem before.

>
> It seems that the drivers are being deferred at boot start by the
> device_links_check_suppliers() function. It runs through the drivers before
> they're initialized and defers them if their suppliers are not available. The
> GPIO and PWM drivers are able to follow the gpio-map and pwm-map properties
> (through the of_parse_phandle_with_args_map() function), but from what I see,
> device_links_check_suppliers() has no such mechanism. It follows the phandle to
> the nexus connector node only, and since there's no compatible driver for it,
> the function defers the consumer drivers used in the overlay.
>
> I think this is what is happening mainly because setting the
> fw_devlink=permissive kernel parameter (which sets the DL_FLAG_SYNC_STATE_ONLY
> flag) solved the issue, though I could be misunderstanding something.
>
> 	int device_links_check_suppliers(struct device *dev)
> 	{
> 		...
> 		list_for_each_entry(link, &dev->links.suppliers, c_node) {
> 			...
>
> 			if (link->status != DL_STATE_AVAILABLE &&
> 			    !device_link_test(link, DL_FLAG_SYNC_STATE_ONLY)) {
>
> 				...
> 				device_links_missing_supplier(dev);
> 				ret = dev_err_probe(dev, -EPROBE_DEFER,
> 						    "supplier %s not ready\n", dev_name(link->supplier));
> 				break;
> 			}
> 			WRITE_ONCE(link->status, DL_STATE_CONSUMER_PROBE);
> 		}
> 		...
> 	}
>
> Has this behavior been observed before? Do you know of any work being done that
> addresses this?

Does a dummy container driver (for debug) to proof your analyer?  Let
me to find time to debug it.

Frank

>
> See below the changes that I made for this test, relative to my last patch
> (only a draft):
>
> diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev-mezzanine-panel-cap-touch-10inch-lvds-v2.dtso b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev-mezzanine-panel-cap-touch-10inch-lvds-v2.dtso
> index b78322907192..4aa1c407af3f 100644
> --- a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev-mezzanine-panel-cap-touch-10inch-lvds-v2.dtso
> +++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev-mezzanine-panel-cap-touch-10inch-lvds-v2.dtso
> @@ -21,9 +21,19 @@
>  #include "imx8mp-pinfunc.h"
>
>  &{/} {
> +	backlight_lvds: backlight-lvds {
> +		compatible = "pwm-backlight";
> +		brightness-levels = <0 45 63 88 119 158 203 255>;
> +		default-brightness-level = <4>;
> +		/* Verdin GPIO 4 (SODIMM 212) */
> +		enable-gpios = <&lvds_native_connector 1 GPIO_ACTIVE_HIGH>;
> +		/* Verdin PWM_2 (SODIMM 16) */
> +		pwms = <&lvds_native_connector 0 6666667 0>;
> +	};
> +
>  	panel-lvds-native {
>  		compatible = "optologic,scx1001511ggc49", "panel-lvds";
> -		backlight = <&backlight_mezzanine>;
> +		backlight = <&backlight_lvds>;
>  		data-mapping = "vesa-24";
>  		power-supply = <&reg_3p3v>;
>  		height-mm = <136>;
> @@ -53,13 +63,6 @@ panel_lvds_native_in: endpoint {
>  	};
>  };
>
> -&backlight_mezzanine {
> -	/* Verdin PWM_2 (SODIMM 16) */
> -	pwms = <&pwm2 0 6666667 0>;
> -
> -	status = "okay";
> -};
> -
>  /* Verdin I2C_2_DSI */
>  &i2c2 {
>  	#address-cells = <1>;
> @@ -69,10 +72,10 @@ touchscreen@41 {
>  		compatible = "ilitek,ili251x";
>  		reg = <0x41>;
>  		/* Verdin GPIO_3 (SODIMM 210) */
> -		interrupt-parent = <&gpio1>;
> -		interrupts = <5 IRQ_TYPE_EDGE_RISING>;
> +		interrupt-parent = <&lvds_native_connector>;
> +		interrupts = <1>;
>  		/* Verdin GPIO_2 (SODIMM 208) */
> -		reset-gpios = <&gpio1 1 GPIO_ACTIVE_LOW>;
> +		reset-gpios = <&lvds_native_connector 0 GPIO_ACTIVE_LOW>;
>  	};
>  };
>
> diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
> index 72a4f846d694..1103da3d34ba 100644
> --- a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
> +++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
> @@ -4,6 +4,28 @@
>   */
>
>  / {
> +	lvds_native_connector: lvds-mezzanine-connector {
> +		// NOTE: Placeholder name, no binding for this yet
> +		compatible = "tdx,verdin-lvds-connector";
> +
> +		#gpio-cells = <2>;
> +		gpio-map = <0 0 &gpio1 1 0>, /* Touchscreen reset GPIO */
> +			   <1 0 &gpio1 6 0>; /* Backlight Enable GPIO */
> +		gpio-map-mask = <0xffffffff 0x0>;
> +		gpio-map-pass-thru = <0x0 0xffffffff>;
> +
> +		#pwm-cells = <3>;
> +		pwm-map = <0 0 0 &pwm2 0 0 0>; /* Backlight PWM */
> +		pwm-map-mask = <0x0 0x0 0x0>;
> +		pwm-map-pass-thru = <0x0 0xffffffff 0xffffffff>;
> +
> +		#address-cells = <0>;
> +		#interrupt-cells = <1>;
> +		interrupt-map = <0 &gpio1 5 IRQ_TYPE_EDGE_FALLING>, /* Touchscreen interrupt */
> +				<1 &gpio1 5 IRQ_TYPE_EDGE_RISING>;
> +		interrupt-map-mask = <0xffffffff>;
> +	};
> +
>  	native-hdmi-connector {
>  		compatible = "hdmi-connector";
>  		label = "X37";
>
> Leonardo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.