devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Marek Vasut <marek.vasut@mailbox.org>
To: dri-devel@lists.freedesktop.org
Cc: Marek Vasut <marek.vasut@mailbox.org>,
	Abel Vesa <abelvesa@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Fabio Estevam <festevam@gmail.com>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
	Liu Ying <victor.liu@nxp.com>,
	Lucas Stach <l.stach@pengutronix.de>, Peng Fan <peng.fan@nxp.com>,
	Pengutronix Kernel Team <kernel@pengutronix.de>,
	Rob Herring <robh@kernel.org>, Shawn Guo <shawnguo@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	devicetree@vger.kernel.org, imx@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org
Subject: [PATCH 16/39] drm/imx: dc: lb: Pass struct dc_lb_subdev_match_data via OF match data
Date: Sat, 11 Oct 2025 18:51:31 +0200	[thread overview]
Message-ID: <20251011170213.128907-17-marek.vasut@mailbox.org> (raw)
In-Reply-To: <20251011170213.128907-1-marek.vasut@mailbox.org>

Introduce struct dc_lb_subdev_match_data which describes the differences
between i.MX8QXP and i.MX95, which in this case link ID mapping as well
as address space offsets, and pass it as OF match data into the driver, so
the driver can use the match data to correctly select pixel data routing.
This is a preparatory patch for i.MX95 addition. No functional change.

Signed-off-by: Marek Vasut <marek.vasut@mailbox.org>
---
Cc: Abel Vesa <abelvesa@kernel.org>
Cc: Conor Dooley <conor+dt@kernel.org>
Cc: Fabio Estevam <festevam@gmail.com>
Cc: Krzysztof Kozlowski <krzk+dt@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Liu Ying <victor.liu@nxp.com>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Peng Fan <peng.fan@nxp.com>
Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
Cc: Rob Herring <robh@kernel.org>
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: devicetree@vger.kernel.org
Cc: dri-devel@lists.freedesktop.org
Cc: imx@lists.linux.dev
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-clk@vger.kernel.org
---
 drivers/gpu/drm/imx/dc/dc-lb.c | 42 ++++++++++++++++++++++++++--------
 drivers/gpu/drm/imx/dc/dc-pe.h |  3 +++
 2 files changed, 35 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/imx/dc/dc-lb.c b/drivers/gpu/drm/imx/dc/dc-lb.c
index 619353456743c..ba9183b244ab3 100644
--- a/drivers/gpu/drm/imx/dc/dc-lb.c
+++ b/drivers/gpu/drm/imx/dc/dc-lb.c
@@ -56,6 +56,14 @@
 #define  YPOS_MASK				GENMASK(31, 16)
 #define  YPOS(x)				FIELD_PREP(YPOS_MASK, (x))
 
+struct dc_lb_subdev_match_data {
+	const enum dc_link_id		*pri_sels;
+	const enum dc_link_id		*sec_sels;
+	const enum dc_link_id		first_lb;
+	unsigned int			last_cf;
+	const struct dc_subdev_info	*info;
+};
+
 enum dc_lb_blend_func {
 	DC_LAYERBLEND_BLEND_ZERO,
 	DC_LAYERBLEND_BLEND_ONE,
@@ -119,7 +127,7 @@ static const struct regmap_config dc_lb_cfg_regmap_config = {
 	.max_register = POSITION,
 };
 
-static const enum dc_link_id prim_sels[] = {
+static const enum dc_link_id prim_sels_imx8qxp[] = {
 	/* common options */
 	LINK_ID_NONE,
 	LINK_ID_CONSTFRAME0,
@@ -137,12 +145,22 @@ static const enum dc_link_id prim_sels[] = {
 	LINK_ID_LAYERBLEND1_MX8QXP,
 	LINK_ID_LAYERBLEND2_MX8QXP,
 	LINK_ID_LAYERBLEND3_MX8QXP,
+	LINK_ID_LAST
 };
 
-static const enum dc_link_id sec_sels[] = {
+static const enum dc_link_id sec_sels_imx8qxp[] = {
 	LINK_ID_NONE,
 	LINK_ID_FETCHWARP2,
 	LINK_ID_FETCHLAYER0,
+	LINK_ID_LAST
+};
+
+static const struct dc_lb_subdev_match_data dc_lb_match_data_imx8qxp = {
+	.pri_sels = prim_sels_imx8qxp,
+	.sec_sels = sec_sels_imx8qxp,
+	.first_lb = LINK_ID_LAYERBLEND0_MX8QXP,
+	.last_cf = 5,
+	.info = dc_lb_info_imx8qxp,
 };
 
 enum dc_link_id dc_lb_get_link_id(struct dc_lb *lb)
@@ -152,11 +170,10 @@ enum dc_link_id dc_lb_get_link_id(struct dc_lb *lb)
 
 void dc_lb_pec_dynamic_prim_sel(struct dc_lb *lb, enum dc_link_id prim)
 {
-	int fixed_sels_num = ARRAY_SIZE(prim_sels) - 4;
 	int i;
 
-	for (i = 0; i < fixed_sels_num + lb->id; i++) {
-		if (prim_sels[i] == prim) {
+	for (i = 0; i < lb->last_cf + lb->id; i++) {
+		if (lb->pri_sels[i] == prim) {
 			regmap_write_bits(lb->reg_pec, PIXENGCFG_DYNAMIC,
 					  PIXENGCFG_DYNAMIC_PRIM_SEL_MASK,
 					  PIXENGCFG_DYNAMIC_PRIM_SEL(prim));
@@ -169,10 +186,10 @@ void dc_lb_pec_dynamic_prim_sel(struct dc_lb *lb, enum dc_link_id prim)
 
 void dc_lb_pec_dynamic_sec_sel(struct dc_lb *lb, enum dc_link_id sec)
 {
-	int i;
+	int i = 0;
 
-	for (i = 0; i < ARRAY_SIZE(sec_sels); i++) {
-		if (sec_sels[i] == sec) {
+	while (lb->sec_sels[i] != LINK_ID_LAST) {
+		if (lb->sec_sels[i++] == sec) {
 			regmap_write_bits(lb->reg_pec, PIXENGCFG_DYNAMIC,
 					  PIXENGCFG_DYNAMIC_SEC_SEL_MASK,
 					  PIXENGCFG_DYNAMIC_SEC_SEL(sec));
@@ -245,6 +262,8 @@ void dc_lb_init(struct dc_lb *lb)
 
 static int dc_lb_bind(struct device *dev, struct device *master, void *data)
 {
+	const struct dc_lb_subdev_match_data *dc_lb_match_data = device_get_match_data(dev);
+	const struct dc_subdev_info *dc_lb_info = dc_lb_match_data->info;
 	struct platform_device *pdev = to_platform_device(dev);
 	struct dc_drm_device *dc_drm = data;
 	struct resource *res_pec;
@@ -281,7 +300,10 @@ static int dc_lb_bind(struct device *dev, struct device *master, void *data)
 	}
 
 	lb->dev = dev;
-	lb->link = LINK_ID_LAYERBLEND0_MX8QXP + lb->id;
+	lb->link = dc_lb_match_data->first_lb + lb->id;
+	lb->pri_sels = dc_lb_match_data->pri_sels;
+	lb->sec_sels = dc_lb_match_data->sec_sels;
+	lb->last_cf = dc_lb_match_data->last_cf;
 
 	dc_drm->lb[lb->id] = lb;
 
@@ -310,7 +332,7 @@ static void dc_lb_remove(struct platform_device *pdev)
 }
 
 static const struct of_device_id dc_lb_dt_ids[] = {
-	{ .compatible = "fsl,imx8qxp-dc-layerblend" },
+	{ .compatible = "fsl,imx8qxp-dc-layerblend", .data = &dc_lb_match_data_imx8qxp },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, dc_lb_dt_ids);
diff --git a/drivers/gpu/drm/imx/dc/dc-pe.h b/drivers/gpu/drm/imx/dc/dc-pe.h
index 7928f947b0cef..492d193127bc1 100644
--- a/drivers/gpu/drm/imx/dc/dc-pe.h
+++ b/drivers/gpu/drm/imx/dc/dc-pe.h
@@ -65,6 +65,9 @@ struct dc_lb {
 	struct regmap *reg_cfg;
 	int id;
 	enum dc_link_id link;
+	const enum dc_link_id *pri_sels;
+	const enum dc_link_id *sec_sels;
+	unsigned int last_cf;
 };
 
 struct dc_pe {
-- 
2.51.0


  parent reply	other threads:[~2025-10-11 17:03 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-11 16:51 [PATCH 00/39] Add i.MX95 DPU/DSI/LVDS support Marek Vasut
2025-10-11 16:51 ` [PATCH 01/39] dt-bindings: display: imx: Document i.MX95 Display Controller DomainBlend Marek Vasut
2025-10-15 13:24   ` Rob Herring
2025-10-16  2:07     ` Liu Ying
2025-10-17 15:15       ` Marek Vasut
2025-10-18  6:09         ` Ying Liu
2025-10-21  6:52       ` Krzysztof Kozlowski
2025-10-11 16:51 ` [PATCH 02/39] drm/imx: Add " Marek Vasut
2025-10-13 16:38   ` Frank Li
2025-10-14 11:50     ` Marek Vasut
2025-10-11 16:51 ` [PATCH 03/39] dt-bindings: display: imx: Document i.MX95 Display Controller processing units Marek Vasut
2025-10-13 16:49   ` Frank Li
2025-10-14 11:52     ` Marek Vasut
2025-10-15  8:59       ` Liu Ying
2025-10-15 10:19         ` Marek Vasut
2025-10-16  2:28           ` Liu Ying
2025-10-16  2:58             ` Liu Ying
2025-10-17 15:18             ` Marek Vasut
2025-10-18  5:44               ` Ying Liu
2025-10-11 16:51 ` [PATCH 04/39] drm/imx: dc: Use bulk clock Marek Vasut
2025-10-13 16:54   ` Frank Li
2025-10-14 12:02     ` Marek Vasut
2025-10-11 16:51 ` [PATCH 05/39] drm/imx: dc: Rework dc_subdev_get_id() to drop ARRAY_SIZE() use Marek Vasut
2025-10-13 16:56   ` Frank Li
2025-10-14 14:03     ` Marek Vasut
2025-10-14 15:11       ` Frank Li
2025-10-14 21:11         ` Marek Vasut
2025-10-15  9:14           ` Liu Ying
2025-10-15 14:31             ` Frank Li
2025-10-16  2:50               ` Liu Ying
2025-10-11 16:51 ` [PATCH 06/39] drm/imx: dc: Rename i.MX8QXP specific Link IDs Marek Vasut
2025-10-13 16:58   ` Frank Li
2025-10-11 16:51 ` [PATCH 07/39] drm/imx: dc: cf: Pass struct dc_subdev_info via OF match data Marek Vasut
2025-10-13 17:01   ` Frank Li
2025-10-11 16:51 ` [PATCH 08/39] drm/imx: dc: de: Pass struct dc_de_subdev_match_data " Marek Vasut
2025-10-13 17:05   ` Frank Li
2025-10-11 16:51 ` [PATCH 09/39] drm/imx: dc: ed: Rework dc_ed_pec_src_sel() to drop ARRAY_SIZE() use Marek Vasut
2025-10-13 18:24   ` Frank Li
2025-10-11 16:51 ` [PATCH 10/39] drm/imx: dc: ed: Pass struct dc_ed_subdev_match_data via OF match data Marek Vasut
2025-10-13 18:26   ` Frank Li
2025-10-11 16:51 ` [PATCH 11/39] drm/imx: dc: fg: Parametrize register access Marek Vasut
2025-10-13 18:29   ` Frank Li
2025-10-11 16:51 ` [PATCH 12/39] drm/imx: dc: ed: Pass struct dc_fg_subdev_match_data via OF match data Marek Vasut
2025-10-13 18:31   ` Frank Li
2025-10-11 16:51 ` [PATCH 13/39] drm/imx: dc: fu: Describe remaining register offsets Marek Vasut
2025-10-13 18:34   ` Frank Li
2025-10-11 16:51 ` [PATCH 14/39] drm/imx: dc: fu: Inline FRAC_OFFSET into FetchLayer and FetchWrap Marek Vasut
2025-10-13 18:39   ` Frank Li
2025-10-11 16:51 ` [PATCH 15/39] drm/imx: dc: fu: Pass struct dc_fu_subdev_match_data via OF match data Marek Vasut
2025-10-13 18:43   ` Frank Li
2025-10-11 16:51 ` Marek Vasut [this message]
2025-10-13 18:45   ` [PATCH 16/39] drm/imx: dc: lb: Pass struct dc_lb_subdev_match_data " Frank Li
2025-10-11 16:51 ` [PATCH 17/39] drm/imx: dc: tc: Pass struct dc_tc_subdev_match_data " Marek Vasut
2025-10-11 16:51 ` [PATCH 18/39] drm/imx: dc: ic: Pass struct dc_ic_subdev_match_data " Marek Vasut
2025-10-11 16:51 ` [PATCH 19/39] drm/imx: dc: ic: Use DT node as interrupt controller name Marek Vasut
2025-10-11 16:51 ` [PATCH 20/39] drm/imx: dc: Configure display CSR clock feed select Marek Vasut
2025-10-13 18:48   ` Frank Li
2025-10-17 15:20     ` Marek Vasut
2025-10-11 16:51 ` [PATCH 21/39] drm/imx: dc: crtc: Do not check disabled CRTCs Marek Vasut
2025-10-13 18:50   ` Frank Li
2025-10-14 21:41     ` Marek Vasut
2025-10-11 16:51 ` [PATCH 22/39] drm/imx: dc: Keep FU unit running on i.MX95 Marek Vasut
2025-10-13 18:52   ` Frank Li
2025-10-11 16:51 ` [PATCH 23/39] drm/imx: dc: Add OF match data for i.MX95 Marek Vasut
2025-10-13 18:54   ` Frank Li
2025-10-11 16:51 ` [PATCH 24/39] drm/imx: Add more RGB swizzling options Marek Vasut
2025-10-11 16:51 ` [PATCH 25/39] dt-bindings: display: bridge: Document NXP i.MX95 pixel interleaver support Marek Vasut
2025-10-13 18:57   ` Frank Li
2025-10-17 14:55     ` Marek Vasut
2025-10-11 16:51 ` [PATCH 26/39] drm/bridge: imx: Add " Marek Vasut
2025-10-13 19:02   ` Frank Li
2025-10-11 16:51 ` [PATCH 27/39] dt-bindings: display: bridge: Document NXP i.MX95 pixel link support Marek Vasut
2025-10-13 19:08   ` Frank Li
2025-10-17 15:01     ` Marek Vasut
2025-10-11 16:51 ` [PATCH 28/39] drm/bridge: imx: Add " Marek Vasut
2025-10-13 19:10   ` Frank Li
2025-10-11 16:51 ` [PATCH 29/39] dt-bindings: display: bridge: Document Freescale i.MX95 MIPI DSI Marek Vasut
2025-10-13 19:13   ` Frank Li
2025-10-17 15:37     ` Marek Vasut
2025-10-11 16:51 ` [PATCH 30/39] drm/bridge: imx93-mipi-dsi: Add i.MX95 PLL initialization Marek Vasut
2025-10-11 16:51 ` [PATCH 31/39] dt-bindings: clock: Split support for i.MX95 LVDS CSR Marek Vasut
2025-10-13 19:17   ` Frank Li
2025-10-17 15:49     ` Marek Vasut
2025-10-11 16:51 ` [PATCH 32/39] dt-bindings: display: bridge: Document i.MX95 LVDS display bridge binding Marek Vasut
2025-10-13 19:20   ` Frank Li
2025-10-17 15:04     ` Marek Vasut
2025-10-11 16:51 ` [PATCH 33/39] drm: bridge: imx: Add i.MX95 LVDS Display Bridge (LDB) driver Marek Vasut
2025-10-11 16:51 ` [PATCH 34/39] dt-bindings: display: bridge: ldb: Add an i.MX95 entry Marek Vasut
2025-10-13 11:34   ` Rob Herring (Arm)
2025-10-11 16:51 ` [PATCH 35/39] drm/bridge: fsl-ldb: Parse register offsets from DT Marek Vasut
2025-10-13 19:23   ` Frank Li
2025-10-17 15:39     ` Marek Vasut
2025-10-11 16:51 ` [PATCH 36/39] drm/bridge: fsl-ldb: Add i.MX95 support Marek Vasut
2025-10-13 19:24   ` Frank Li
2025-10-11 16:51 ` [PATCH 37/39] dt-bindings: interrupt-controller: fsl,irqsteer: " Marek Vasut
2025-10-13 19:25   ` Frank Li
2025-10-15 13:31   ` Rob Herring (Arm)
2025-10-11 16:51 ` [PATCH 38/39] dt-bindings: clock: support i.MX95 Display Stream CSR module Marek Vasut
2025-10-13 19:26   ` Frank Li
2025-10-17 15:05     ` Marek Vasut
2025-10-15 13:33   ` Rob Herring
2025-10-17 15:08     ` Marek Vasut
2025-10-11 16:51 ` [PATCH 39/39] arm64: dts: imx95: Describe display pipeline Marek Vasut
2025-10-14  8:51 ` [PATCH 00/39] Add i.MX95 DPU/DSI/LVDS support Liu Ying
2025-10-14 21:55   ` Marek Vasut
2025-10-15 10:00     ` Liu Ying
2025-10-15 16:18       ` Marek Vasut
2025-10-20  2:15         ` Ying Liu
2025-10-14  9:13 ` Liu Ying
2025-10-14 22:09   ` Marek Vasut
2025-10-15 10:09     ` Liu Ying
2025-10-17 15:54       ` Marek Vasut
2025-10-20  2:35         ` Liu Ying

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=20251011170213.128907-17-marek.vasut@mailbox.org \
    --to=marek.vasut@mailbox.org \
    --cc=Laurent.pinchart@ideasonboard.com \
    --cc=abelvesa@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=festevam@gmail.com \
    --cc=imx@lists.linux.dev \
    --cc=kernel@pengutronix.de \
    --cc=krzk+dt@kernel.org \
    --cc=l.stach@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=peng.fan@nxp.com \
    --cc=robh@kernel.org \
    --cc=shawnguo@kernel.org \
    --cc=tzimmermann@suse.de \
    --cc=victor.liu@nxp.com \
    /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;
as well as URLs for NNTP newsgroup(s).