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 = <®_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