mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v5 0/4] drm: mxsfb: Support LCDIF interface bus width
@ 2026-09-17 14:00 Francesco Dolcini
  2026-09-17 14:00 ` [PATCH v5 1/4] dt-bindings: lcdif: Add endpoint bus-width property Francesco Dolcini
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Francesco Dolcini @ 2026-09-17 14:00 UTC (permalink / raw)
  To: Marek Vasut, Stefan Agner, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam
  Cc: Francesco Dolcini, dri-devel, devicetree, linux-kernel, imx,
	linux-arm-kernel, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Luca Ceresoli, Andrzej Hajda, Neil Armstrong,
	Robert Foss

From: Francesco Dolcini <francesco.dolcini@toradex.com>

The width of the physical LCDIF output bus can differ from the input bus
format advertised by the downstream panel or bridge.

Such a distinction is required when the LCDIF bus width does not match the
width of the downstream display interface. For example, an 18-bit or
16-bit LCDIF bus can drive a 24-bit display by wiring the available color
bits to the appropriate display inputs. Configuring LCDIF solely from the
display's 24-bit format in this case selects the wrong LCD_DATABUS_WIDTH
mode, changing the color-bit assignment on the LCD_DATA pins and resulting
in incorrect colors.

Use the common OF graph endpoint bus-width property to describe the width
of the physical LCDIF output bus. Make the mxsfb driver derive the
corresponding media bus format from this property and use it in preference
to the format reported by the downstream display. When the property is
absent, the existing behavior is preserved.

Set the endpoint bus width for the Colibri iMX6ULL and Colibri iMX7 boards,
which route an 18-bit LCD interface.

v5:
 - add a-b / r-b tags
 - fail probe if bus-width has an invalid value
v4: https://lore.kernel.org/all/20260813092836.38367-1-francesco@dolcini.it/
 - use /schemas/graph.yaml#/$defs/port-base
 - add r-b and t-b tags
v3: https://lore.kernel.org/all/20260812132954.148571-1-francesco@dolcini.it/
 - use video-interfaces.yaml
v2: https://lore.kernel.org/all/20260723093813.180089-1-francesco@dolcini.it/
 - use the common bus-width property instead of the legacy interface-pix-fmt
v1: https://lore.kernel.org/all/20260717121847.488148-1-francesco@dolcini.it/

Francesco Dolcini (4):
  dt-bindings: lcdif: Add endpoint bus-width property
  drm: mxsfb: Add optional DPI output bus-width configuration
  ARM: dts: imx6ull-colibri: Set LCDIF bus width
  ARM: dts: imx7-colibri: Set LCDIF bus width

 .../bindings/display/fsl,lcdif.yaml           | 12 +++++-
 .../arm/boot/dts/nxp/imx/imx6ull-colibri.dtsi |  1 +
 arch/arm/boot/dts/nxp/imx/imx7-colibri.dtsi   |  1 +
 drivers/gpu/drm/mxsfb/mxsfb_drv.c             | 43 +++++++++++++++++++
 drivers/gpu/drm/mxsfb/mxsfb_drv.h             |  2 +
 drivers/gpu/drm/mxsfb/mxsfb_kms.c             | 12 ++++++
 6 files changed, 70 insertions(+), 1 deletion(-)

-- 
2.47.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v5 1/4] dt-bindings: lcdif: Add endpoint bus-width property
  2026-09-17 14:00 [PATCH v5 0/4] drm: mxsfb: Support LCDIF interface bus width Francesco Dolcini
@ 2026-09-17 14:00 ` Francesco Dolcini
  2026-09-17 14:00 ` [PATCH v5 2/4] drm: mxsfb: Add optional DPI output bus-width configuration Francesco Dolcini
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Francesco Dolcini @ 2026-09-17 14:00 UTC (permalink / raw)
  To: Marek Vasut, Stefan Agner, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam
  Cc: Francesco Dolcini, dri-devel, devicetree, linux-kernel, imx,
	linux-arm-kernel, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Luca Ceresoli, Andrzej Hajda, Neil Armstrong,
	Robert Foss, Alexander Stein, Krzysztof Kozlowski

From: Francesco Dolcini <francesco.dolcini@toradex.com>

The DPI output of the LCD interface can be configured with a bus width
of 16, 18, or 24 bits. Introduce a bus-width property to the output
endpoint, specifying the number of parallel RGB bits connected.

Reviewed-by: Frank Li <Frank.Li@nxp.com>
Acked-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
---
v5: add ack/rev by tags
v4: use /schemas/graph.yaml#/$defs/port-base
v3: use video-interfaces.yaml
v2: use the common bus-width property instead of the legacy interface-pix-fmt
---
 .../devicetree/bindings/display/fsl,lcdif.yaml       | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/display/fsl,lcdif.yaml b/Documentation/devicetree/bindings/display/fsl,lcdif.yaml
index 2dd0411ec651..89cea0c14cf1 100644
--- a/Documentation/devicetree/bindings/display/fsl,lcdif.yaml
+++ b/Documentation/devicetree/bindings/display/fsl,lcdif.yaml
@@ -68,9 +68,19 @@ properties:
     maxItems: 1
 
   port:
-    $ref: /schemas/graph.yaml#/properties/port
+    $ref: /schemas/graph.yaml#/$defs/port-base
+    unevaluatedProperties: false
     description: The LCDIF output port
 
+    properties:
+      endpoint:
+        $ref: /schemas/media/video-interfaces.yaml
+        unevaluatedProperties: false
+
+        properties:
+          bus-width:
+            enum: [ 16, 18, 24 ]
+
   display:
     $ref: /schemas/types.yaml#/definitions/phandle
     description: phandle to display panel
-- 
2.47.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v5 2/4] drm: mxsfb: Add optional DPI output bus-width configuration
  2026-09-17 14:00 [PATCH v5 0/4] drm: mxsfb: Support LCDIF interface bus width Francesco Dolcini
  2026-09-17 14:00 ` [PATCH v5 1/4] dt-bindings: lcdif: Add endpoint bus-width property Francesco Dolcini
@ 2026-09-17 14:00 ` Francesco Dolcini
  2026-09-17 14:24   ` Frank Li
  2026-09-17 15:31   ` Luca Ceresoli
  2026-09-17 14:00 ` [PATCH v5 3/4] ARM: dts: imx6ull-colibri: Set LCDIF bus width Francesco Dolcini
  2026-09-17 14:00 ` [PATCH v5 4/4] ARM: dts: imx7-colibri: " Francesco Dolcini
  3 siblings, 2 replies; 7+ messages in thread
From: Francesco Dolcini @ 2026-09-17 14:00 UTC (permalink / raw)
  To: Marek Vasut, Stefan Agner, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam
  Cc: Francesco Dolcini, dri-devel, devicetree, linux-kernel, imx,
	linux-arm-kernel, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Luca Ceresoli, Andrzej Hajda, Neil Armstrong,
	Robert Foss, Alexander Stein

From: Francesco Dolcini <francesco.dolcini@toradex.com>

LCDIF programs LCD_DATABUS_WIDTH from the selected media bus format. The
format reported by the downstream panel or bridge describes the display
input, but it does not describe how the LCDIF data pins are physically
wired on the board.

These can differ. For example, a 16-bit LCDIF bus can be connected to a
24-bit display by wiring the available color bits to the corresponding
display inputs. In that case, using the display's 24-bit format to
configure LCDIF selects the wrong data-bus mode and changes the assignment
of color bits on the LCD_DATA pins.

Read the optional bus-width endpoint property from the LCDIF output port
and use it to select the media bus format used to configure LCDIF. This
allows the LCDIF bus mode to describe the physical interface
independently of the downstream display format.

When the property is absent, continue using the format reported by the
downstream display device, preserving the previous behavior. The
devicetree binding restricts bus-width to 16, 18 or 24; any other value
means the devicetree is broken, so fail the probe instead of silently
falling back to the previous behavior.

Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
---
v5: fail probe on invalid bus-width instead of falling back to the
    previous behavior; factor the property parsing into its own
    mxsfb_of_bus_fmt() helper. Drop the r-b/t-b tags below since they
    were given for the previous silent-fallback behavior and for a
    different code shape; needs re-review.
v4: add r-b and t-b tags
v3: improve commit message and make it clear that the code assumes that
    the DT is correct, when the DT contains an invalid property value,
    the code safely fall-back to the previous behavior
v2: use the common bus-width property instead of the legacy interface-pix-fmt

Dropped for v5:
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Reviewed-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Tested-by: Alexander Stein <alexander.stein@ew.tq-group.com> # TQMa6UL[L]x
---
 drivers/gpu/drm/mxsfb/mxsfb_drv.c | 43 +++++++++++++++++++++++++++++++
 drivers/gpu/drm/mxsfb/mxsfb_drv.h |  2 ++
 drivers/gpu/drm/mxsfb/mxsfb_kms.c | 12 +++++++++
 3 files changed, 57 insertions(+)

diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
index 8b4a500347fb..641691fc92c8 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c
+++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
@@ -12,7 +12,10 @@
 #include <linux/clk.h>
 #include <linux/dma-mapping.h>
 #include <linux/io.h>
+#include <linux/media-bus-format.h>
 #include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_graph.h>
 #include <linux/platform_device.h>
 #include <linux/property.h>
 #include <linux/pm_runtime.h>
@@ -207,11 +210,41 @@ static void mxsfb_irq_uninstall(struct drm_device *dev)
 	free_irq(mxsfb->irq, dev);
 }
 
+static int mxsfb_of_bus_fmt(const struct device_node *ep, u32 *bus_format)
+{
+	u32 bus_width;
+	int ret;
+
+	ret = of_property_read_u32(ep, "bus-width", &bus_width);
+	if (ret == -EINVAL)
+		return 0;
+	if (ret)
+		return ret;
+
+	switch (bus_width) {
+	case 16:
+		*bus_format = MEDIA_BUS_FMT_RGB565_1X16;
+		break;
+	case 18:
+		*bus_format = MEDIA_BUS_FMT_RGB666_1X18;
+		break;
+	case 24:
+		*bus_format = MEDIA_BUS_FMT_RGB888_1X24;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 static int mxsfb_load(struct drm_device *drm,
 		      const struct mxsfb_devdata *devdata)
 {
 	struct platform_device *pdev = to_platform_device(drm->dev);
+	struct device_node *np = pdev->dev.of_node;
 	struct mxsfb_drm_private *mxsfb;
+	struct device_node *ep;
 	int ret;
 
 	mxsfb = devm_kzalloc(&pdev->dev, sizeof(*mxsfb), GFP_KERNEL);
@@ -238,6 +271,16 @@ static int mxsfb_load(struct drm_device *drm,
 	if (IS_ERR(mxsfb->clk_disp_axi))
 		mxsfb->clk_disp_axi = NULL;
 
+	ep = of_graph_get_next_endpoint(np, NULL);
+	if (ep) {
+		ret = mxsfb_of_bus_fmt(ep, &mxsfb->bus_format);
+		of_node_put(ep);
+		if (ret) {
+			dev_err(drm->dev, "Invalid bus-width endpoint property\n");
+			return ret;
+		}
+	}
+
 	ret = dma_set_mask_and_coherent(drm->dev, DMA_BIT_MASK(32));
 	if (ret)
 		return ret;
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.h b/drivers/gpu/drm/mxsfb/mxsfb_drv.h
index d160d921b25f..bdc47ce5be79 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_drv.h
+++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.h
@@ -46,6 +46,8 @@ struct mxsfb_drm_private {
 	struct drm_connector		*connector;
 	struct drm_bridge		*bridge;
 
+	u32				bus_format;
+
 	bool				crc_active;
 };
 
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
index d8ebebc5314b..1d78c486d147 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
+++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
@@ -386,6 +386,18 @@ static void mxsfb_crtc_atomic_enable(struct drm_crtc *crtc,
 	if (!bus_format)
 		bus_format = MEDIA_BUS_FMT_RGB888_1X24;
 
+	/*
+	 * Prefer the bus format derived from the OF graph endpoint "bus-width"
+	 * property when available. Otherwise, use the bus format reported by
+	 * the downstream bridge or panel.
+	 *
+	 * This supports mismatched display and interface bus widths, such as
+	 * a 24-bit panel connected through an 18-bit interface or an 18-bit
+	 * panel connected through a 24-bit interface.
+	 */
+	if (mxsfb->bus_format)
+		bus_format = mxsfb->bus_format;
+
 	mxsfb_crtc_mode_set_nofb(mxsfb, bridge_state, bus_format);
 
 	/* Write cur_buf as well to avoid an initial corrupt frame */
-- 
2.47.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v5 3/4] ARM: dts: imx6ull-colibri: Set LCDIF bus width
  2026-09-17 14:00 [PATCH v5 0/4] drm: mxsfb: Support LCDIF interface bus width Francesco Dolcini
  2026-09-17 14:00 ` [PATCH v5 1/4] dt-bindings: lcdif: Add endpoint bus-width property Francesco Dolcini
  2026-09-17 14:00 ` [PATCH v5 2/4] drm: mxsfb: Add optional DPI output bus-width configuration Francesco Dolcini
@ 2026-09-17 14:00 ` Francesco Dolcini
  2026-09-17 14:00 ` [PATCH v5 4/4] ARM: dts: imx7-colibri: " Francesco Dolcini
  3 siblings, 0 replies; 7+ messages in thread
From: Francesco Dolcini @ 2026-09-17 14:00 UTC (permalink / raw)
  To: Marek Vasut, Stefan Agner, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam
  Cc: Francesco Dolcini, dri-devel, devicetree, linux-kernel, imx,
	linux-arm-kernel, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Luca Ceresoli, Andrzej Hajda, Neil Armstrong,
	Robert Foss

From: Francesco Dolcini <francesco.dolcini@toradex.com>

The Colibri family standard defines an 18-bit parallel RGB interface on
the edge connector. The additional six LCDIF data signals required for a
24-bit interface are mapped to module-specific pins whose location is not
fixed across the Colibri family and which may not be available at all.

Generic Colibri carrier boards can therefore only rely on an 18-bit
interface. Set the LCDIF bus-width property accordingly.

A 24-bit interface can still be used by a specific carrier and module
combination by overriding the property in the carrier board device tree.

Link: https://docs.toradex.com/104446-colibri-arm-som-imx6ull-datasheet.pdf
Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
---
v5: improved commit message, added rev-by
v4: no changes
v3: no changes
v2: use the common bus-width property instead of the legacy interface-pix-fmt
---
 arch/arm/boot/dts/nxp/imx/imx6ull-colibri.dtsi | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/boot/dts/nxp/imx/imx6ull-colibri.dtsi b/arch/arm/boot/dts/nxp/imx/imx6ull-colibri.dtsi
index ec3c1e7301f4..1eb1cf2d7395 100644
--- a/arch/arm/boot/dts/nxp/imx/imx6ull-colibri.dtsi
+++ b/arch/arm/boot/dts/nxp/imx/imx6ull-colibri.dtsi
@@ -229,6 +229,7 @@ &lcdif {
 
 	port {
 		lcdif_out: endpoint {
+			bus-width = <18>;
 			remote-endpoint = <&lcd_panel_in>;
 		};
 	};
-- 
2.47.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v5 4/4] ARM: dts: imx7-colibri: Set LCDIF bus width
  2026-09-17 14:00 [PATCH v5 0/4] drm: mxsfb: Support LCDIF interface bus width Francesco Dolcini
                   ` (2 preceding siblings ...)
  2026-09-17 14:00 ` [PATCH v5 3/4] ARM: dts: imx6ull-colibri: Set LCDIF bus width Francesco Dolcini
@ 2026-09-17 14:00 ` Francesco Dolcini
  3 siblings, 0 replies; 7+ messages in thread
From: Francesco Dolcini @ 2026-09-17 14:00 UTC (permalink / raw)
  To: Marek Vasut, Stefan Agner, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam
  Cc: Francesco Dolcini, dri-devel, devicetree, linux-kernel, imx,
	linux-arm-kernel, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Luca Ceresoli, Andrzej Hajda, Neil Armstrong,
	Robert Foss

From: Francesco Dolcini <francesco.dolcini@toradex.com>

The Colibri family standard defines an 18-bit parallel RGB interface on
the edge connector. The additional six LCDIF data signals required for a
24-bit interface are mapped to module-specific pins whose location is not
fixed across the Colibri family and which may not be available at all.

Generic Colibri carrier boards can therefore only rely on an 18-bit
interface. Set the LCDIF bus-width property accordingly.

A 24-bit interface can still be used by a specific carrier and module
combination by overriding the property in the carrier board device tree.

Link: https://docs.toradex.com/103125-colibri-arm-som-imx7-datasheet.pdf
Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
---
v5: improved commit message, added rev-by
v4: no changes
v3: no changes
v2: use the common bus-width property instead of the legacy interface-pix-fmt
---
 arch/arm/boot/dts/nxp/imx/imx7-colibri.dtsi | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/boot/dts/nxp/imx/imx7-colibri.dtsi b/arch/arm/boot/dts/nxp/imx/imx7-colibri.dtsi
index 8666dcd7fe97..c4088d3c5ab1 100644
--- a/arch/arm/boot/dts/nxp/imx/imx7-colibri.dtsi
+++ b/arch/arm/boot/dts/nxp/imx/imx7-colibri.dtsi
@@ -537,6 +537,7 @@ &lcdif {
 
 	port {
 		lcdif_out: endpoint {
+			bus-width = <18>;
 			remote-endpoint = <&lcd_panel_in>;
 		};
 	};
-- 
2.47.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v5 2/4] drm: mxsfb: Add optional DPI output bus-width configuration
  2026-09-17 14:00 ` [PATCH v5 2/4] drm: mxsfb: Add optional DPI output bus-width configuration Francesco Dolcini
@ 2026-09-17 14:24   ` Frank Li
  2026-09-17 15:31   ` Luca Ceresoli
  1 sibling, 0 replies; 7+ messages in thread
From: Frank Li @ 2026-09-17 14:24 UTC (permalink / raw)
  To: Francesco Dolcini
  Cc: Marek Vasut, Stefan Agner, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Francesco Dolcini,
	dri-devel, devicetree, linux-kernel, imx, linux-arm-kernel,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Luca Ceresoli,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Alexander Stein

On Thu, Sep 17, 2026 at 04:00:37PM +0200, Francesco Dolcini wrote:
> From: Francesco Dolcini <francesco.dolcini@toradex.com>
>
> LCDIF programs LCD_DATABUS_WIDTH from the selected media bus format. The
> format reported by the downstream panel or bridge describes the display
> input, but it does not describe how the LCDIF data pins are physically
> wired on the board.
>
> These can differ. For example, a 16-bit LCDIF bus can be connected to a
> 24-bit display by wiring the available color bits to the corresponding
> display inputs. In that case, using the display's 24-bit format to
> configure LCDIF selects the wrong data-bus mode and changes the assignment
> of color bits on the LCD_DATA pins.
>
> Read the optional bus-width endpoint property from the LCDIF output port
> and use it to select the media bus format used to configure LCDIF. This
> allows the LCDIF bus mode to describe the physical interface
> independently of the downstream display format.
>
> When the property is absent, continue using the format reported by the
> downstream display device, preserving the previous behavior. The
> devicetree binding restricts bus-width to 16, 18 or 24; any other value
> means the devicetree is broken, so fail the probe instead of silently
> falling back to the previous behavior.
>
> Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>

Reviewed-by: Frank Li <Frank.Li@nxp.com>

> ---
> v5: fail probe on invalid bus-width instead of falling back to the
>     previous behavior; factor the property parsing into its own
>     mxsfb_of_bus_fmt() helper. Drop the r-b/t-b tags below since they
>     were given for the previous silent-fallback behavior and for a
>     different code shape; needs re-review.
> v4: add r-b and t-b tags
> v3: improve commit message and make it clear that the code assumes that
>     the DT is correct, when the DT contains an invalid property value,
>     the code safely fall-back to the previous behavior
> v2: use the common bus-width property instead of the legacy interface-pix-fmt
>
> Dropped for v5:
> Reviewed-by: Frank Li <Frank.Li@nxp.com>
> Reviewed-by: Alexander Stein <alexander.stein@ew.tq-group.com>
> Tested-by: Alexander Stein <alexander.stein@ew.tq-group.com> # TQMa6UL[L]x
> ---
>  drivers/gpu/drm/mxsfb/mxsfb_drv.c | 43 +++++++++++++++++++++++++++++++
>  drivers/gpu/drm/mxsfb/mxsfb_drv.h |  2 ++
>  drivers/gpu/drm/mxsfb/mxsfb_kms.c | 12 +++++++++
>  3 files changed, 57 insertions(+)
>
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> index 8b4a500347fb..641691fc92c8 100644
> --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> @@ -12,7 +12,10 @@
>  #include <linux/clk.h>
>  #include <linux/dma-mapping.h>
>  #include <linux/io.h>
> +#include <linux/media-bus-format.h>
>  #include <linux/module.h>
> +#include <linux/of.h>
> +#include <linux/of_graph.h>
>  #include <linux/platform_device.h>
>  #include <linux/property.h>
>  #include <linux/pm_runtime.h>
> @@ -207,11 +210,41 @@ static void mxsfb_irq_uninstall(struct drm_device *dev)
>  	free_irq(mxsfb->irq, dev);
>  }
>
> +static int mxsfb_of_bus_fmt(const struct device_node *ep, u32 *bus_format)
> +{
> +	u32 bus_width;
> +	int ret;
> +
> +	ret = of_property_read_u32(ep, "bus-width", &bus_width);
> +	if (ret == -EINVAL)
> +		return 0;
> +	if (ret)
> +		return ret;
> +
> +	switch (bus_width) {
> +	case 16:
> +		*bus_format = MEDIA_BUS_FMT_RGB565_1X16;
> +		break;
> +	case 18:
> +		*bus_format = MEDIA_BUS_FMT_RGB666_1X18;
> +		break;
> +	case 24:
> +		*bus_format = MEDIA_BUS_FMT_RGB888_1X24;
> +		break;
> +	default:
> +		return -EINVAL;
> +	}
> +
> +	return 0;
> +}
> +
>  static int mxsfb_load(struct drm_device *drm,
>  		      const struct mxsfb_devdata *devdata)
>  {
>  	struct platform_device *pdev = to_platform_device(drm->dev);
> +	struct device_node *np = pdev->dev.of_node;
>  	struct mxsfb_drm_private *mxsfb;
> +	struct device_node *ep;
>  	int ret;
>
>  	mxsfb = devm_kzalloc(&pdev->dev, sizeof(*mxsfb), GFP_KERNEL);
> @@ -238,6 +271,16 @@ static int mxsfb_load(struct drm_device *drm,
>  	if (IS_ERR(mxsfb->clk_disp_axi))
>  		mxsfb->clk_disp_axi = NULL;
>
> +	ep = of_graph_get_next_endpoint(np, NULL);
> +	if (ep) {
> +		ret = mxsfb_of_bus_fmt(ep, &mxsfb->bus_format);
> +		of_node_put(ep);
> +		if (ret) {
> +			dev_err(drm->dev, "Invalid bus-width endpoint property\n");
> +			return ret;
> +		}
> +	}
> +
>  	ret = dma_set_mask_and_coherent(drm->dev, DMA_BIT_MASK(32));
>  	if (ret)
>  		return ret;
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.h b/drivers/gpu/drm/mxsfb/mxsfb_drv.h
> index d160d921b25f..bdc47ce5be79 100644
> --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.h
> +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.h
> @@ -46,6 +46,8 @@ struct mxsfb_drm_private {
>  	struct drm_connector		*connector;
>  	struct drm_bridge		*bridge;
>
> +	u32				bus_format;
> +
>  	bool				crc_active;
>  };
>
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> index d8ebebc5314b..1d78c486d147 100644
> --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> @@ -386,6 +386,18 @@ static void mxsfb_crtc_atomic_enable(struct drm_crtc *crtc,
>  	if (!bus_format)
>  		bus_format = MEDIA_BUS_FMT_RGB888_1X24;
>
> +	/*
> +	 * Prefer the bus format derived from the OF graph endpoint "bus-width"
> +	 * property when available. Otherwise, use the bus format reported by
> +	 * the downstream bridge or panel.
> +	 *
> +	 * This supports mismatched display and interface bus widths, such as
> +	 * a 24-bit panel connected through an 18-bit interface or an 18-bit
> +	 * panel connected through a 24-bit interface.
> +	 */
> +	if (mxsfb->bus_format)
> +		bus_format = mxsfb->bus_format;
> +
>  	mxsfb_crtc_mode_set_nofb(mxsfb, bridge_state, bus_format);
>
>  	/* Write cur_buf as well to avoid an initial corrupt frame */
> --
> 2.47.3
>
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v5 2/4] drm: mxsfb: Add optional DPI output bus-width configuration
  2026-09-17 14:00 ` [PATCH v5 2/4] drm: mxsfb: Add optional DPI output bus-width configuration Francesco Dolcini
  2026-09-17 14:24   ` Frank Li
@ 2026-09-17 15:31   ` Luca Ceresoli
  1 sibling, 0 replies; 7+ messages in thread
From: Luca Ceresoli @ 2026-09-17 15:31 UTC (permalink / raw)
  To: Francesco Dolcini
  Cc: Marek Vasut, Stefan Agner, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Francesco Dolcini,
	dri-devel, devicetree, linux-kernel, imx, linux-arm-kernel,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Luca Ceresoli,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Alexander Stein

On Thu, 17 Sep 2026 16:00:37 +0200, Francesco Dolcini <francesco@dolcini.it> wrote:
> LCDIF programs LCD_DATABUS_WIDTH from the selected media bus format. The
> format reported by the downstream panel or bridge describes the display
> input, but it does not describe how the LCDIF data pins are physically
> wired on the board.
> 
> These can differ. For example, a 16-bit LCDIF bus can be connected to a
> 24-bit display by wiring the available color bits to the corresponding
> display inputs. In that case, using the display's 24-bit format to
> configure LCDIF selects the wrong data-bus mode and changes the assignment
> of color bits on the LCD_DATA pins.
> 
> [...]

Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Tested-by: Luca Ceresoli <luca.ceresoli@bootlin.com>

-- 
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-09-17 15:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-17 14:00 [PATCH v5 0/4] drm: mxsfb: Support LCDIF interface bus width Francesco Dolcini
2026-09-17 14:00 ` [PATCH v5 1/4] dt-bindings: lcdif: Add endpoint bus-width property Francesco Dolcini
2026-09-17 14:00 ` [PATCH v5 2/4] drm: mxsfb: Add optional DPI output bus-width configuration Francesco Dolcini
2026-09-17 14:24   ` Frank Li
2026-09-17 15:31   ` Luca Ceresoli
2026-09-17 14:00 ` [PATCH v5 3/4] ARM: dts: imx6ull-colibri: Set LCDIF bus width Francesco Dolcini
2026-09-17 14:00 ` [PATCH v5 4/4] ARM: dts: imx7-colibri: " Francesco Dolcini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®