From: Frank Li <Frank.li@oss.nxp.com>
To: Leonardo Costa <leoreis.costa@gmail.com>
Cc: Frank.Li@nxp.com, s.hauer@pengutronix.de, kernel@pengutronix.de,
festevam@gmail.com, robh@kernel.org, krzk+dt@kernel.org,
conor+dt@kernel.org, imx@lists.linux.dev,
linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
Leonardo Costa <leonardo.costa@toradex.com>
Subject: Re: [PATCH 6/6] arm64: dts: freescale: imx8mp-verdin: Add Mezzanine with Toradex Display 10.1" LVDS V2
Date: Tue, 18 Aug 2026 13:53:27 -0500 [thread overview]
Message-ID: <aoSqJ7pHEgJ_RZmr@SMW015318> (raw)
In-Reply-To: <juuc4af7ndbajcl7gzf4tg5qz2q2j5tt3rvql4jbauradujrre@gc5nbdhhixaf>
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 <leonardo.costa@toradex.com>
> > > > >
> > > > > 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 <leonardo.costa@toradex.com>
> > > > > ---
> > > >
> > > > 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@toradex.com/
> >
> > 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 = <®_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
prev parent reply other threads:[~2026-08-18 18:53 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-13 13:33 [PATCH 0/6] arm64: dts: freescale: imx8mp-verdin: Add Toradex Capacitive Touch Display 10.1" LVDS V1 and V2 Leonardo Costa
2026-08-13 13:33 ` [PATCH 1/6] arm64: dts: freescale: imx8mp-verdin: Add Toradex Capacitive Touch Display 10.1" LVDS Leonardo Costa
2026-08-13 13:33 ` [PATCH 2/6] arm64: dts: freescale: imx8mp-verdin: Add Toradex DSI to LVDS adapter with 10.1" display Leonardo Costa
2026-08-13 13:33 ` [PATCH 3/6] arm64: dts: freescale: imx8mp-verdin: Add Mezzanine with Toradex Display 10.1" LVDS Leonardo Costa
2026-08-13 13:33 ` [PATCH 4/6] arm64: dts: freescale: imx8mp-verdin: Add Toradex Capacitive Touch Display 10.1" LVDS V2 Leonardo Costa
2026-08-13 13:33 ` [PATCH 5/6] arm64: dts: freescale: imx8mp-verdin: Add Toradex DSI to LVDS adapter with the 10.1" V2 display Leonardo Costa
2026-08-13 13:33 ` [PATCH 6/6] arm64: dts: freescale: imx8mp-verdin: Add Mezzanine with Toradex Display 10.1" LVDS V2 Leonardo Costa
2026-08-13 14:58 ` Frank Li
2026-08-13 15:43 ` Leonardo Costa
2026-08-13 16:15 ` Frank Li
2026-08-18 18:08 ` Leonardo Costa
2026-08-18 18:53 ` Frank Li [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aoSqJ7pHEgJ_RZmr@SMW015318 \
--to=frank.li@oss.nxp.com \
--cc=Frank.Li@nxp.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=imx@lists.linux.dev \
--cc=kernel@pengutronix.de \
--cc=krzk+dt@kernel.org \
--cc=leonardo.costa@toradex.com \
--cc=leoreis.costa@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robh@kernel.org \
--cc=s.hauer@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox