From nobody Sat Apr 4 07:50:09 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 11D9437FF49 for ; Fri, 20 Mar 2026 10:46:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003610; cv=none; b=hQYVg1jklE9YpLN0ufIMV83KhTbQYQbkLY73u+aenNSf4u8G9TZq/kEvRXTXGzU4o36CAJUx5oGUDTtMw9VN5LsnsxuRTKjPbIp7JuzGh4dYP9PYAO+ShDBOmFDQqkq8Yf8XeMTfa2xBBkybLx3e5ycA1gzgGeTCSWw4kQSe/V4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003610; c=relaxed/simple; bh=UzvNrvbtD1rtdXXVwhjShRJUrAybWcxGJ5+Qw1LxNwo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YAvEcoyYlXhTk1ZQrJHFLXlagHE/v1fSlw0RBXjcYeAqtHlh4skgrHUFuDLJCQKlAdz+GwPGiHa+tJfaG4qqoGpD51xgKtjgcALxWYa7rUGtgYkqE4Cc6HPRjVTQ2TPi4FGFW+RBUMx12eu3tFy1j5kP+F9jiPlCfsmvqGdUAdA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=h5wv/hd/; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="h5wv/hd/" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id D8831C415B5 for ; Fri, 20 Mar 2026 10:47:11 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 6D62D601A0 for ; Fri, 20 Mar 2026 10:46:46 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 0D16410450B9E; Fri, 20 Mar 2026 11:46:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1774003604; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=BXcIk/NRj8PFc1K1TpjqRHmXNm3bb4oAqAdH6wdWTtU=; b=h5wv/hd/qDbYWSU41Nl9bTFsrOxNYGfHpRGn4j5J3NpByLHohDFfgi7k9ib3YGNsxPL1WH 6qyNogfkM8j+A7nYyg9KA2y11Rhox29DSOi/3SLQYU7oS62LADuaKcMDVPsf8/nJlIpKKJ ZkPzL7fRmJKSdhnezmraEcpaM1Bi+yWd0Wv47tzwDmYkP6nwHtcyU9wmpJFjQDfkRzbELf Zmt97x3qEJUHcxGVBPxig3i2WV74+vCLZ+iNsK0x1g99DKROxbwToIAeCq9un11mX9u5BM bUuega/3JAhjY9qxrcphEknCXIpmbCxd86bCWMwpXr9t6XmVh22ZjQv2jkFlzw== From: Luca Ceresoli Date: Fri, 20 Mar 2026 11:46:12 +0100 Subject: [PATCH 1/8] drm/mxsfb/lcdif: simplify remote pointer management using __free Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260320-drm-lcdif-dbanc-v1-1-479a04133e70@bootlin.com> References: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> In-Reply-To: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> To: Marek Vasut , Stefan Agner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Liu Ying , Rob Herring , Saravana Kannan Cc: "Kory Maincent (TI.com)" , =?utf-8?q?Herv=C3=A9_Codina?= , Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Adam Ford , Alexander Stein , Anson Huang , Christopher Obbard , Daniel Scally , Emanuele Ghidoli , Fabio Estevam , Francesco Dolcini , Frieder Schrempf , Gilles Talis , =?utf-8?q?Goran_Ra=C4=91enovi=C4=87?= , Heiko Schocher , Joao Paulo Goncalves , Josua Mayer , =?utf-8?q?Jo=C3=A3o_Paulo_Gon=C3=A7alves?= , Kieran Bingham , Marco Felsch , Martyn Welch , Oleksij Rempel , Peng Fan , Philippe Schenker , Richard Hu , Shengjiu Wang , Stefan Eichenberger , Vitor Soares , Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 Putting the remote device_node reference requires a of_node_put(ep) in both error return points. Use a cleanup action to simplify the code. Signed-off-by: Luca Ceresoli Reviewed-by: Liu Ying Tested-by: Alexander Stein # TQMa8MPxL/MB= a8MPxL Tested-by: Martyn Welch --- drivers/gpu/drm/mxsfb/lcdif_drv.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/mxsfb/lcdif_drv.c b/drivers/gpu/drm/mxsfb/lcdi= f_drv.c index 47da1d9336b9..756ca96373c8 100644 --- a/drivers/gpu/drm/mxsfb/lcdif_drv.c +++ b/drivers/gpu/drm/mxsfb/lcdif_drv.c @@ -53,16 +53,13 @@ static int lcdif_attach_bridge(struct lcdif_drm_private= *lcdif) int ret; =20 for_each_endpoint_of_node(dev->of_node, ep) { - struct device_node *remote; + struct device_node *remote __free(drm_bridge_put) =3D + of_graph_get_remote_port_parent(ep); struct of_endpoint of_ep; struct drm_encoder *encoder; =20 - remote =3D of_graph_get_remote_port_parent(ep); - if (!of_device_is_available(remote)) { - of_node_put(remote); + if (!of_device_is_available(remote)) continue; - } - of_node_put(remote); =20 ret =3D of_graph_parse_endpoint(ep, &of_ep); if (ret < 0) { --=20 2.53.0 From nobody Sat Apr 4 07:50:09 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E27B257ACF for ; Fri, 20 Mar 2026 10:46:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003620; cv=none; b=bRJs505Bwqt66YknHh1PwOEB6p55XN1YJ6rxvPzcVKSR5Dg63Q8vI9kuFZETvD7auPROaL4UfBABYn5/jHJ6rXP4o3Ri2CwHmXW/n1IegMdGKgPHDWWx5nh2RIE9yA3DYD5n+4NbIpQD+sleKk72M7IUURNNwFTHVFEfRpgVs/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003620; c=relaxed/simple; bh=7sclTjTeAjyJ1uFmwALfvn8o4Jdtfgut1sHma4Wr7Eo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BhidUNRIAlpJ2RVI8LXf9PHiOVmbrfUHz5ZzQZzo0wAo62/qIkfiNh1tp3XuJ11NcxDFD7viZagUckXMaVzxPLSDmbV8FXi80bQFSTY1AZDm/OeTQxypHSk6ceIDy2BTb2i0wZF9pALO3p4ux5wW/wGtHxdtTY50SA7vrC2Psjw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=YzHwYqWw; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="YzHwYqWw" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 80C4DC415B5 for ; Fri, 20 Mar 2026 10:47:22 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 246FF600E0 for ; Fri, 20 Mar 2026 10:46:57 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 9EA1A10450B97; Fri, 20 Mar 2026 11:46:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1774003614; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=dfwoXcfKZfOcrFCvOGrbRQGdzCvJEFHRdHoxTl+8JMk=; b=YzHwYqWw8kdbSA1xpu89lfslknKZSwmuF3aLrpjqoyqFxsahyC4CHj20zWXghkZunEs60b 5huaASm19Vc3IFxQvRDDcy7Z4B5smg4Aip9oo78qeoj2elfe1lIjnNiKT/YhzKLF9feHqz toWHif+d97a5HtGVm3JgTTRarilC0KNxWM5oACGDvzPIkb/ctxbAMeswXS3u8HYyzJC8JW 6I3v/0Ksssn8rOPDxACW7gmx1jTbyqE6jyfRu7asbg3zgil0cQDQYyUxGg8Tg5HvB39fjp s6kHkxRAHf4UdvaAoHngsvaMlaO3+Ma56926yREnEQquPEki9AO03WWePTBVew== From: Luca Ceresoli Date: Fri, 20 Mar 2026 11:46:13 +0100 Subject: [PATCH 2/8] drm/mxsfb/lcdif: don't unnecessarily loop over ports Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260320-drm-lcdif-dbanc-v1-2-479a04133e70@bootlin.com> References: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> In-Reply-To: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> To: Marek Vasut , Stefan Agner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Liu Ying , Rob Herring , Saravana Kannan Cc: "Kory Maincent (TI.com)" , =?utf-8?q?Herv=C3=A9_Codina?= , Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Adam Ford , Alexander Stein , Anson Huang , Christopher Obbard , Daniel Scally , Emanuele Ghidoli , Fabio Estevam , Francesco Dolcini , Frieder Schrempf , Gilles Talis , =?utf-8?q?Goran_Ra=C4=91enovi=C4=87?= , Heiko Schocher , Joao Paulo Goncalves , Josua Mayer , =?utf-8?q?Jo=C3=A3o_Paulo_Gon=C3=A7alves?= , Kieran Bingham , Marco Felsch , Martyn Welch , Oleksij Rempel , Peng Fan , Philippe Schenker , Richard Hu , Shengjiu Wang , Stefan Eichenberger , Vitor Soares , Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 According to the bindings [0] there can be only one port. The in-tree board device trees also don't contain multiple ports (searched thos matching 'fsl,imx(23|28|6sx|8mp|93)-lcdif'). Avoid an unnecessary loop around multipltle ports. This allows to greatly simplify the code. [0] Documentation/devicetree/bindings/display/fsl,lcdif.yaml Signed-off-by: Luca Ceresoli Tested-by: Alexander Stein # TQMa8MPxL/MB= a8MPxL Tested-by: Martyn Welch --- Viewing this patch with '--ignore-all-space' is recommended --- drivers/gpu/drm/mxsfb/lcdif_drv.c | 77 ++++++++++++++---------------------= ---- 1 file changed, 27 insertions(+), 50 deletions(-) diff --git a/drivers/gpu/drm/mxsfb/lcdif_drv.c b/drivers/gpu/drm/mxsfb/lcdi= f_drv.c index 756ca96373c8..83e134c04882 100644 --- a/drivers/gpu/drm/mxsfb/lcdif_drv.c +++ b/drivers/gpu/drm/mxsfb/lcdif_drv.c @@ -48,61 +48,38 @@ static const struct drm_encoder_funcs lcdif_encoder_fun= cs =3D { static int lcdif_attach_bridge(struct lcdif_drm_private *lcdif) { struct device *dev =3D lcdif->drm->dev; - struct device_node *ep; + struct drm_encoder *encoder; struct drm_bridge *bridge; int ret; =20 - for_each_endpoint_of_node(dev->of_node, ep) { - struct device_node *remote __free(drm_bridge_put) =3D - of_graph_get_remote_port_parent(ep); - struct of_endpoint of_ep; - struct drm_encoder *encoder; - - if (!of_device_is_available(remote)) - continue; - - ret =3D of_graph_parse_endpoint(ep, &of_ep); - if (ret < 0) { - dev_err(dev, "Failed to parse endpoint %pOF\n", ep); - of_node_put(ep); - return ret; - } - - bridge =3D devm_drm_of_get_bridge(dev, dev->of_node, 0, of_ep.id); - if (IS_ERR(bridge)) { - of_node_put(ep); - return dev_err_probe(dev, PTR_ERR(bridge), - "Failed to get bridge for endpoint%u\n", - of_ep.id); - } - - encoder =3D devm_kzalloc(dev, sizeof(*encoder), GFP_KERNEL); - if (!encoder) { - dev_err(dev, "Failed to allocate encoder for endpoint%u\n", - of_ep.id); - of_node_put(ep); - return -ENOMEM; - } - - encoder->possible_crtcs =3D drm_crtc_mask(&lcdif->crtc); - ret =3D drm_encoder_init(lcdif->drm, encoder, &lcdif_encoder_funcs, - DRM_MODE_ENCODER_NONE, NULL); - if (ret) { - dev_err(dev, "Failed to initialize encoder for endpoint%u: %d\n", - of_ep.id, ret); - of_node_put(ep); - return ret; - } - - ret =3D drm_bridge_attach(encoder, bridge, NULL, 0); - if (ret) { - of_node_put(ep); - return dev_err_probe(dev, ret, - "Failed to attach bridge for endpoint%u\n", - of_ep.id); - } + struct device_node *remote __free(device_node) =3D + of_graph_get_remote_node(dev->of_node, 0, -1); + + if (!of_device_is_available(remote)) + return 0; + + bridge =3D devm_drm_of_get_bridge(dev, dev->of_node, 0, -1); + if (IS_ERR(bridge)) + return dev_err_probe(dev, PTR_ERR(bridge), "Failed to get bridge\n"); + + encoder =3D devm_kzalloc(dev, sizeof(*encoder), GFP_KERNEL); + if (!encoder) { + dev_err(dev, "Failed to allocate encoder\n"); + return -ENOMEM; } =20 + encoder->possible_crtcs =3D drm_crtc_mask(&lcdif->crtc); + ret =3D drm_encoder_init(lcdif->drm, encoder, &lcdif_encoder_funcs, + DRM_MODE_ENCODER_NONE, NULL); + if (ret) { + dev_err(dev, "Failed to initialize encoder: %d\n", ret); + return ret; + } + + ret =3D drm_bridge_attach(encoder, bridge, NULL, 0); + if (ret) + return dev_err_probe(dev, ret, "Failed to attach bridge\n"); + return 0; } =20 --=20 2.53.0 From nobody Sat Apr 4 07:50:09 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 944AF2D73A1 for ; Fri, 20 Mar 2026 10:47:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003630; cv=none; b=JM0hrYJa5ybWajTv3EJfu02Z5aIMZrzDlAkgImiOQ4j7XcoZ8SXNICv1+SIor/ps96XSq+An4N35wMZtyEv4Ftvh0qwslSx47auzrZa81da/nzBO56CMG+v+ExcDJWpH8WR7VJTpTthdm8AI8TAN9BjmyZWAJ1O2wRzkjLo0I5Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003630; c=relaxed/simple; bh=dtL5ghEhjLIjzFEf4xoeTyBgXuA0ZX74OGfoFZS4o6w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HlYqbrqE5wn4rdHnmIUorPQaFpTwQCeeice1RyQxZ6ht+uLX5c5uYXJlNMHsXGIGhUKkssVmY+b1Y4aJoNCH/d5myhvQcPgCEQ3w0oAywF3JdPpDI/BGBsiZsHLCSMtMuJoSHLoKrhGIBK8jTDrPEmuhWIcC3D1+80gYPwDhwvo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=b0usys/h; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="b0usys/h" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id B9A03C415B5 for ; Fri, 20 Mar 2026 10:47:33 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 5A204600E0 for ; Fri, 20 Mar 2026 10:47:08 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 4215310450B9C; Fri, 20 Mar 2026 11:46:54 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1774003625; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=uqivpiK0EZCZ1GJzIO6qlD0UY/zTX2jimlhOlJX9+J8=; b=b0usys/hnRS2Fr9NfUVkW6SirYB8SXTdJjTxeH9MM7GK4qT2fXIU3RFMZbWCK0ZoGW5zLo oN+2nl4hoV9mgyOKb3anTMfGFYXucRrfsJprsxnNSH2U4xaFfS8vNxUe48cOBI+BP1Y+DT E1DVv8d3lYXpeik3x7rqaHbQ0o+f3AG2r07ukYuEe5Ohs8Ax/3U4KuVfiuCT0f9HjzAoN6 als/m0eQya/PgWGchzytujlX9enQAxkDRCx17CILGjWOJUN+9/wZ2/5vYmYyWaEHCRAMhm 4XEDoFZl5NnnBeQ4a6FKLJZNBMfFduE7Linncvc47zw2GUbAzoBBRCjOmuX+VA== From: Luca Ceresoli Date: Fri, 20 Mar 2026 11:46:14 +0100 Subject: [PATCH 3/8] drm/mxsfb/lcdif: use dev_err_probe() consistently in lcdif_attach_bridge Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260320-drm-lcdif-dbanc-v1-3-479a04133e70@bootlin.com> References: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> In-Reply-To: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> To: Marek Vasut , Stefan Agner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Liu Ying , Rob Herring , Saravana Kannan Cc: "Kory Maincent (TI.com)" , =?utf-8?q?Herv=C3=A9_Codina?= , Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Adam Ford , Alexander Stein , Anson Huang , Christopher Obbard , Daniel Scally , Emanuele Ghidoli , Fabio Estevam , Francesco Dolcini , Frieder Schrempf , Gilles Talis , =?utf-8?q?Goran_Ra=C4=91enovi=C4=87?= , Heiko Schocher , Joao Paulo Goncalves , Josua Mayer , =?utf-8?q?Jo=C3=A3o_Paulo_Gon=C3=A7alves?= , Kieran Bingham , Marco Felsch , Martyn Welch , Oleksij Rempel , Peng Fan , Philippe Schenker , Richard Hu , Shengjiu Wang , Stefan Eichenberger , Vitor Soares , Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 lcdif_attach_bridge() uses dev_err_probe() in some error paths, dev_err() + return in others. Use dev_err_probe() for all of them to make code consistent and simpler. Signed-off-by: Luca Ceresoli Reviewed-by: Liu Ying Tested-by: Alexander Stein # TQMa8MPxL/MB= a8MPxL Tested-by: Martyn Welch --- drivers/gpu/drm/mxsfb/lcdif_drv.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/mxsfb/lcdif_drv.c b/drivers/gpu/drm/mxsfb/lcdi= f_drv.c index 83e134c04882..e40253ad607b 100644 --- a/drivers/gpu/drm/mxsfb/lcdif_drv.c +++ b/drivers/gpu/drm/mxsfb/lcdif_drv.c @@ -63,18 +63,14 @@ static int lcdif_attach_bridge(struct lcdif_drm_private= *lcdif) return dev_err_probe(dev, PTR_ERR(bridge), "Failed to get bridge\n"); =20 encoder =3D devm_kzalloc(dev, sizeof(*encoder), GFP_KERNEL); - if (!encoder) { - dev_err(dev, "Failed to allocate encoder\n"); - return -ENOMEM; - } + if (!encoder) + return dev_err_probe(dev, -ENOMEM, "Failed to allocate encoder\n"); =20 encoder->possible_crtcs =3D drm_crtc_mask(&lcdif->crtc); ret =3D drm_encoder_init(lcdif->drm, encoder, &lcdif_encoder_funcs, DRM_MODE_ENCODER_NONE, NULL); - if (ret) { - dev_err(dev, "Failed to initialize encoder: %d\n", ret); - return ret; - } + if (ret) + return dev_err_probe(dev, ret, "Failed to initialize encoder\n"); =20 ret =3D drm_bridge_attach(encoder, bridge, NULL, 0); if (ret) --=20 2.53.0 From nobody Sat Apr 4 07:50:09 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 073C82EAD1C for ; Fri, 20 Mar 2026 10:47:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003640; cv=none; b=MAl3hKqoG/zMoWZFcnLY0VLbZ4EPSOFsiUvidWWYeyC93lPLs35Ee2k7gWdZET9GD3cHE+g+cduYVfJ8ZC54CjHnLgxZ3V3a82KrteXoJh5aEU85q0YFqgFjzkBDBPejaFNFWALdClj9A0IpFenMxi8r7OqigUH7jjCdHLfS7aQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003640; c=relaxed/simple; bh=VfapbADAepNi41hQOyHb6MoM56xjFYAsQBZo2WA5ERo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f5jJKmWIYa5ZinbeL7CXdXYem7r03LoHAf4c1hD0iiyaWqK4ndqrcy/NabPDGQqgAJWyQwXgdcqyxTRNlbkfHwLw5JGsrVdc9xxZ4Zk3NfMK0OAPkuQzd4Pdo/Mu5xBeQ2TehhiaSDR6O8K+re9K6bQw4Abkef8dHcWnaIHnKCU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=TXc1o2vt; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="TXc1o2vt" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 33080C4042D for ; Fri, 20 Mar 2026 10:47:43 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id C93E7601A0 for ; Fri, 20 Mar 2026 10:47:17 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 6D49810450A35; Fri, 20 Mar 2026 11:47:06 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1774003635; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=XbMfNfupY1VfnZEkIIda79LO69pWcXv3nSLGBIpLS3Y=; b=TXc1o2vt65RFdnHE36jvwmA3uWA9LppHucLNBayn5LTscMGEgQvMgJFcYq4XtpaMHv1Lr6 Jm56xae17+BrM7hqTPHLRxTzK1kCRE7WdQBiP8xRWwJ/Yn1FvIS7930MDqzZDlOUClxVJk WcIco9DemcN126+i1P3mfhZ7HjgiUJ9xV06UK9VXnZdYVnZoRapQEn7qnq3YKhZjXkj1+E oME9weNqWf+XvozQQAkSh2a7WGanuXQ7xNKW3NA9AKm2wOmrHYyRl8EAX0j/QGS1uXqUAJ v0ZS4pdagVQXBaW9qCXsuTbbFyQj8MECWohNixYntJ6i8MXqMFgItTq9fOJkdA== From: Luca Ceresoli Date: Fri, 20 Mar 2026 11:46:15 +0100 Subject: [PATCH 4/8] drm/bridge: dw-hdmi: document the output_port field Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260320-drm-lcdif-dbanc-v1-4-479a04133e70@bootlin.com> References: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> In-Reply-To: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> To: Marek Vasut , Stefan Agner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Liu Ying , Rob Herring , Saravana Kannan Cc: "Kory Maincent (TI.com)" , =?utf-8?q?Herv=C3=A9_Codina?= , Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Adam Ford , Alexander Stein , Anson Huang , Christopher Obbard , Daniel Scally , Emanuele Ghidoli , Fabio Estevam , Francesco Dolcini , Frieder Schrempf , Gilles Talis , =?utf-8?q?Goran_Ra=C4=91enovi=C4=87?= , Heiko Schocher , Joao Paulo Goncalves , Josua Mayer , =?utf-8?q?Jo=C3=A3o_Paulo_Gon=C3=A7alves?= , Kieran Bingham , Marco Felsch , Martyn Welch , Oleksij Rempel , Peng Fan , Philippe Schenker , Richard Hu , Shengjiu Wang , Stefan Eichenberger , Vitor Soares , Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 The meaning of this flag may not be obvious at first sight. Signed-off-by: Luca Ceresoli Reviewed-by: Liu Ying Tested-by: Alexander Stein # TQMa8MPxL/MB= a8MPxL Tested-by: Martyn Welch --- include/drm/bridge/dw_hdmi.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h index 336f062e1f9d..45f6ba1a8ee1 100644 --- a/include/drm/bridge/dw_hdmi.h +++ b/include/drm/bridge/dw_hdmi.h @@ -126,6 +126,11 @@ struct dw_hdmi_phy_ops { struct dw_hdmi_plat_data { struct regmap *regm; =20 + /* + * The HDMI output port number (which must be 1) if it is described + * in the device tree. 0 if the device tree does not describe the + * next component (legacy mode). + */ unsigned int output_port; =20 unsigned long input_bus_encoding; --=20 2.53.0 From nobody Sat Apr 4 07:50:09 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1F301257ACF for ; Fri, 20 Mar 2026 10:47:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003651; cv=none; b=PTkqf0typ62K0LmllSlx7EfgrBnto8wJTXmA+STmbSWR6mPBaWtjUQE/lOGXdjglHtlUk3OP/SkAl1vGB76Sf73SlByMdoKX4Y/zP0DXmqZllwI2Qu1fCf1/mf9oZ1d5zxO1mrRG3rfsi0ZnU4dV29i1frP4DT/7yft1YsB98NY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003651; c=relaxed/simple; bh=p+eMap3mH3REm8nRAr+tgfNilhf9vKt5CevjwuJG+Fg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kYeroRZfjDwTvN1CsJ3QEKn+v4cj1GCxS13kJmDlRRQ3EiMPQtBWCEi5Ylbgmae7aueNFYJznYFylN+GEd6cG+TOJhCx2kdeRJGZoj6Daf7groiWwPRcG1T9NGREpdM7qq2NYhu4RsySEjpDI3nwPcHzv+qySZWwc97tvz2uK6A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=QFcWkJ82; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="QFcWkJ82" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 4C06AC4042D for ; Fri, 20 Mar 2026 10:47:53 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id E4B1A601A0 for ; Fri, 20 Mar 2026 10:47:27 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id CD09B10450B8F; Fri, 20 Mar 2026 11:47:15 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1774003645; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=epcCiuzdQ1u6Epk9LtsHc2oPHZxzaiyD1zsIWDZOAME=; b=QFcWkJ82ylexSInmRDANxSHTwK9A3hbd2iBAlyZTtBzfzAVgv+6As+Ei0+Wta0tVjL7Ssx SPWbAZ0u+l/hMNJTKx9n3x8MrOPvXLipwrF81cdfYzOsavnoCiPRKtFSo0LHi5nDPIe0V1 o0TYKsw3af8yoeUp8EfMqeVsi48IAE1dl5zsMAoV/ozrOYbRTQptooqq2KXIHLF1vOiuT5 podhqzqMnp+IyZhdUOWauEpLjRYJH86d6kQX5n/BfQNQhEzK6YFTxQqBEguZ4IhG/winEv 8fS+1HybWGBqBpniQ8l5tNxoVC7H5uuhYbZP9DhqxwMgryivMYGSC+b2qs2h6Q== From: Luca Ceresoli Date: Fri, 20 Mar 2026 11:46:16 +0100 Subject: [PATCH 5/8] drm/bridge: dw-hdmi: warn on unsupported attach combination Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260320-drm-lcdif-dbanc-v1-5-479a04133e70@bootlin.com> References: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> In-Reply-To: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> To: Marek Vasut , Stefan Agner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Liu Ying , Rob Herring , Saravana Kannan Cc: "Kory Maincent (TI.com)" , =?utf-8?q?Herv=C3=A9_Codina?= , Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Adam Ford , Alexander Stein , Anson Huang , Christopher Obbard , Daniel Scally , Emanuele Ghidoli , Fabio Estevam , Francesco Dolcini , Frieder Schrempf , Gilles Talis , =?utf-8?q?Goran_Ra=C4=91enovi=C4=87?= , Heiko Schocher , Joao Paulo Goncalves , Josua Mayer , =?utf-8?q?Jo=C3=A3o_Paulo_Gon=C3=A7alves?= , Kieran Bingham , Marco Felsch , Martyn Welch , Oleksij Rempel , Peng Fan , Philippe Schenker , Richard Hu , Shengjiu Wang , Stefan Eichenberger , Vitor Soares , Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 dw-hdmi can operate in two different modes, depending on the platform data as set by the driver: A. hdmi->plat_data->output_port =3D 0: the HDMI output (port@1) in device tree is not used B. hdmi->plat_data->output_port =3D 1: the HDMI output (port@1) is parsed to find the next bridge Only case B is supported when the DRM_BRIDGE_ATTACH_NO_CONNECTOR flag is passed to the attach callback. Emit a warning when this is violated. Also return -EINVAL which would be returned by drm_bridge_attach() right after anyway. Signed-off-by: Luca Ceresoli Reviewed-by: Liu Ying Tested-by: Alexander Stein # TQMa8MPxL/MB= a8MPxL Tested-by: Martyn Welch --- Note: Returning when teh warning triggers does not change the functional behaviour of this function. It is not strictly necessary in this patch but it will have to be done anyway in the following patch. --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index ee88c0e793b0..a668d66aeece 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2910,6 +2910,10 @@ static int dw_hdmi_bridge_attach(struct drm_bridge *= bridge, { struct dw_hdmi *hdmi =3D bridge->driver_private; =20 + /* DRM_BRIDGE_ATTACH_NO_CONNECTOR requires a remote-endpoint to the next = bridge */ + if (WARN_ON((flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) && !hdmi->plat_data-= >output_port)) + return -EINVAL; + if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) return drm_bridge_attach(encoder, hdmi->bridge.next_bridge, bridge, flags); --=20 2.53.0 From nobody Sat Apr 4 07:50:09 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0C033806A2 for ; Fri, 20 Mar 2026 10:47:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003661; cv=none; b=RGLqMmx9QFs3TNkO+kPJ3d+umMVZXDnoPSLu1PzyCxTYxtH3ycHmhMP7TfJSFeyCwo+WgPVvXv2Ui7YhxoLZtrgdKDjOeq8LRgqlR59C+ZUNR9LfP181dL/2rJh70Pyo91QIXQUQ3you9FVyxpcEmji/1ptOiT3H7k7Ywmo8+wU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003661; c=relaxed/simple; bh=ZZwn4L0ybODysxUKm03rAH4gUKFsaVf10PmNRRT4aEA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TTdbrR3wxYemCoPyNoFuhP6FoaEjK8A8iZu9TKZHK/dRdZJTL4giX+uxMmyG9my90lqV5BsMZDj7U8Ikh+s6ijMzwvmXkZg/Erxa2lsLVLvzZ4xfkV6oq7KC5RmkS5v9SYLw6pIPlB0e4Sf0w4Upr8NKg+Egkfi+8+J9zsf0qrw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=YyDIv8/7; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="YyDIv8/7" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 7CECF1A2F19 for ; Fri, 20 Mar 2026 10:47:38 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 4A6AD601A0 for ; Fri, 20 Mar 2026 10:47:38 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id DE56910450B7D; Fri, 20 Mar 2026 11:47:25 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1774003655; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=pETdlghxzqqCiEaPvqoDlYYapxYDufD9KCFbn4elZEk=; b=YyDIv8/7bYdeDocu6CUlzpZGjMnkb4PjerL8Ig+ktu5K5fgHaHUFSkG5523JrwqPi1KXsR jslev06n9xeaxJ+FEFr5Z9p9u28uuIpCRAjLlu2gQ9QXFW0m+YO0QiUp47fr9MzuizaVqu IgYFjTDfLJqJkHrMjfNrT+5E5OLbX4y50tgdR1CA62DFk/hqaaycr8K2LvOcSmmQ9T32Zp DfGoybuKtc1Luv3ACMFPEB8nPRCJTh5tbdsc1VPx3XcqqsWYaet4aRCKB1Yod4YeKCWJRE Tc7ta9eaQHs/oM937/IGyw0d5CTg4kZaL92GvKauTB3rjTq/8mK585OFd0+LCg== From: Luca Ceresoli Date: Fri, 20 Mar 2026 11:46:17 +0100 Subject: [PATCH 6/8] drm/bridge: dw-hdmi: move next_bridge lookup to attach time Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260320-drm-lcdif-dbanc-v1-6-479a04133e70@bootlin.com> References: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> In-Reply-To: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> To: Marek Vasut , Stefan Agner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Liu Ying , Rob Herring , Saravana Kannan Cc: "Kory Maincent (TI.com)" , =?utf-8?q?Herv=C3=A9_Codina?= , Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Adam Ford , Alexander Stein , Anson Huang , Christopher Obbard , Daniel Scally , Emanuele Ghidoli , Fabio Estevam , Francesco Dolcini , Frieder Schrempf , Gilles Talis , =?utf-8?q?Goran_Ra=C4=91enovi=C4=87?= , Heiko Schocher , Joao Paulo Goncalves , Josua Mayer , =?utf-8?q?Jo=C3=A3o_Paulo_Gon=C3=A7alves?= , Kieran Bingham , Marco Felsch , Martyn Welch , Oleksij Rempel , Peng Fan , Philippe Schenker , Richard Hu , Shengjiu Wang , Stefan Eichenberger , Vitor Soares , Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 This driver looks up the next_bridge at probe time and stores it in hdmi->bridge.next_bridge, but only uses the stored value when attaching, and only in the DRM_BRIDGE_ATTACH_NO_CONNECTOR case. This will be problematic with an upcoming change, adding an hdmi-connector using a device tree overlay when not present. That change is in turn necessary to migrate the i.MX LCDIF driver to the bridge-connector. The problem is that, adding the hdmi-connector via an overlay, devlink considers hdmi-connector a consumer of the dw-hdmi device, generating a chicken-egg problem: * hdmi-connector probe won't be tried until dw-hdmi is probed (devlink) * dw-hdmi probe will defer until it finds the next_bridge (the hdmi-connector wrapper bridge) In preparation for those changes, move the next_bridge lookup from probe to attach, when it is actually used. This allows dw-hdmi to probe, so that the hdmi-connector can probe as well. Also avoid storing the pointer in hdmi->bridge.next_bridge: the value is computed when needed, thus a local variable is enough. Finally, this also allows to slightly improve the code by not doing any DT lookup in the !DRM_BRIDGE_ATTACH_NO_CONNECTOR case. Signed-off-by: Luca Ceresoli Tested-by: Alexander Stein # TQMa8MPxL/MB= a8MPxL Tested-by: Martyn Welch --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 41 +++++++++------------------= ---- 1 file changed, 12 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/br= idge/synopsys/dw-hdmi.c index a668d66aeece..4ee865a1a6c8 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2914,9 +2914,18 @@ static int dw_hdmi_bridge_attach(struct drm_bridge *= bridge, if (WARN_ON((flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) && !hdmi->plat_data-= >output_port)) return -EINVAL; =20 - if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) - return drm_bridge_attach(encoder, hdmi->bridge.next_bridge, - bridge, flags); + if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) { + struct device_node *remote __free(device_node) =3D + of_graph_get_remote_node(hdmi->dev->of_node, + hdmi->plat_data->output_port, -1); + if (!remote) + return -EPROBE_DEFER; + + struct drm_bridge *next_bridge __free(drm_bridge_put) =3D + of_drm_find_and_get_bridge(remote); + + return drm_bridge_attach(encoder, next_bridge, bridge, flags); + } =20 return dw_hdmi_connector_create(hdmi); } @@ -3307,28 +3316,6 @@ static void dw_hdmi_init_hw(struct dw_hdmi *hdmi) * Probe/remove API, used from platforms based on the DRM bridge API. */ =20 -static int dw_hdmi_parse_dt(struct dw_hdmi *hdmi) -{ - struct device_node *remote; - - if (!hdmi->plat_data->output_port) - return 0; - - - remote =3D of_graph_get_remote_node(hdmi->dev->of_node, - hdmi->plat_data->output_port, - -1); - if (!remote) - return -ENODEV; - - hdmi->bridge.next_bridge =3D of_drm_find_and_get_bridge(remote); - of_node_put(remote); - if (!hdmi->bridge.next_bridge) - return -EPROBE_DEFER; - - return 0; -} - bool dw_hdmi_bus_fmt_is_420(struct dw_hdmi *hdmi) { return hdmi_bus_fmt_is_yuv420(hdmi->hdmi_data.enc_out_bus_format); @@ -3373,10 +3360,6 @@ struct dw_hdmi *dw_hdmi_probe(struct platform_device= *pdev, mutex_init(&hdmi->cec_notifier_mutex); spin_lock_init(&hdmi->audio_lock); =20 - ret =3D dw_hdmi_parse_dt(hdmi); - if (ret < 0) - return ERR_PTR(ret); - ddc_node =3D of_parse_phandle(np, "ddc-i2c-bus", 0); if (ddc_node) { hdmi->ddc =3D of_get_i2c_adapter_by_node(ddc_node); --=20 2.53.0 From nobody Sat Apr 4 07:50:09 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F461257ACF for ; Fri, 20 Mar 2026 10:47:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003670; cv=none; b=XALbwWIQduhonqH4+R+7IbRn2vrDjrCaM4EFqSzzEj5n5j11YP7FGZK1PceuHv0C44LxeRz/+d5jrH+8+TaXUSFSKq6redsdkiJeLUyAVUcydXdvo9YUAVz7EndUozi8WYh/XrzTzqkspKu2tlu0piSgfvhQ0iCcR3dhrpIazbE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003670; c=relaxed/simple; bh=A3d2Wv3FocWHEgZVdbErxCV2J7dm1h/wPtvHIzxv0S0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=q6Yg1dEwzOJ9LCF7K9/DpGj8GyhtaWjN42cmtXxwZSmO6Ouv5v93f0a7zPJFUsCIq8GxnHC1Jn7rDuR7o5P1GHxrzyhQ/TzECYs9abnA8unbxkfgqFuFRwO/0KEWCdF0BkwrvMCTKvqk4e962cx3YdcqVZrd3TGBXTtMIeiK6dQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=I4PzVzb1; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="I4PzVzb1" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 74F5D1A2F19 for ; Fri, 20 Mar 2026 10:47:47 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 47A41600E0 for ; Fri, 20 Mar 2026 10:47:47 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id EBDD110450B97; Fri, 20 Mar 2026 11:47:35 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1774003664; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=5G7RwZVT0cLv89cnUOQqWhPwxDiqoXXImEAhtCM4UBQ=; b=I4PzVzb13TLDpsWD86Xf1LnxDItNfPdLQqcchBZIAbf/l3V5OxBoR77gYCp4V2B4P3FtND ZWYxY+XskZIi5SeicAOR/nzFqZfpS/E0X8G95OQ/Ai8EASpKYkvhVi4ssOGVmu0GHolmfI D5o1XdhqpReZqi0FkxMpShiuVJaPcRKH12IBrTFKaoVW11FFtlyV7UTOaYYKZUYuiu7RA8 4+RkgUr/N+vH7pe9HZq0Jir6NnV9dwBifDl001om9VOffC+cZZdFTAh5jgqunzRXeOMjoc 8hQAkAfHmExObMYsjQja6trmZbIUseirbyfRGzOkHEs+GZ5wo3ZzvfXLqTku/Q== From: Luca Ceresoli Date: Fri, 20 Mar 2026 11:46:18 +0100 Subject: [PATCH 7/8] drm/bridge: imx8mp-hdmi-tx: add an hdmi-connector when missing using a DT overlay at boot time Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260320-drm-lcdif-dbanc-v1-7-479a04133e70@bootlin.com> References: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> In-Reply-To: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> To: Marek Vasut , Stefan Agner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Liu Ying , Rob Herring , Saravana Kannan Cc: "Kory Maincent (TI.com)" , =?utf-8?q?Herv=C3=A9_Codina?= , Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Adam Ford , Alexander Stein , Anson Huang , Christopher Obbard , Daniel Scally , Emanuele Ghidoli , Fabio Estevam , Francesco Dolcini , Frieder Schrempf , Gilles Talis , =?utf-8?q?Goran_Ra=C4=91enovi=C4=87?= , Heiko Schocher , Joao Paulo Goncalves , Josua Mayer , =?utf-8?q?Jo=C3=A3o_Paulo_Gon=C3=A7alves?= , Kieran Bingham , Marco Felsch , Martyn Welch , Oleksij Rempel , Peng Fan , Philippe Schenker , Richard Hu , Shengjiu Wang , Stefan Eichenberger , Vitor Soares , Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 The imx8mp-hdmi-tx one of many drivers based on dw-hdmi. dw-hdmi in turn can operate in two different modes, depending on the platform data as set by the driver: A. hdmi->plat_data->output_port =3D 0: the HDMI output (port@1) in device tree is not used [0] B. hdmi->plat_data->output_port =3D 1: the HDMI output (port@1) is parsed to find the next bridge The imx8mp-hdmi-tx driver falls in case A. This implies next_bridge will always be NULL, and so dw_hdmi_bridge_attach() [1] will always fail if called with the DRM_BRIDGE_ATTACH_NO_CONNECTOR flag. In fact case A assumes that DRM_BRIDGE_ATTACH_NO_CONNECTOR is not set and in that case it adds the connector programmatically at bridge attach time. Support for DRM_BRIDGE_ATTACH_NO_CONNECTOR is implemented by dw-hdmi.c in case B. So, in preparation to support DRM_BRIDGE_ATTACH_NO_CONNECTOR in imx8mp-hdmi-tx, move to case B by setting hdmi->plat_data->output_port =3D = 1. However this change requires that port@1 is connected to a "next bridge" DT node, typically the HDMI connector, because dw-hdmi won't add the connector when using DRM_BRIDGE_ATTACH_NO_CONNECTOR. Many dts files for imx8mp-based boards in the kernel have such a connector described and linked to port@1, so a connector is added by the display-connector driver along with a bridge wrapping it. Sadly some of those dts files don't have the connector described. Adding it would solve the problem easily, but this would break existing devices which do not update the dtb when upgrading to a newer kernel. To preserve backward compatibility for such devices, introduce a module adding the hdmi-connector node to the live device tree at init time. This allows the dw-hdmi code to find the next bridge (the one wrapping the hdmi-connector) and let the pipeline work as before. [0] https://elixir.bootlin.com/linux/v7.0-rc1/source/drivers/gpu/drm/bridge= /synopsys/dw-hdmi.c#L3310 [1] https://elixir.bootlin.com/linux/v7.0-rc1/source/drivers/gpu/drm/bridge= /synopsys/dw-hdmi.c#L2907 Signed-off-by: Luca Ceresoli Tested-by: Alexander Stein # TQMa8MPxL/MB= a8MPxL Tested-by: Martyn Welch --- This patch is inspired by commit 0ff223d99147 ("drm/tilcdc: Convert legacy panel binding via DT overlay at boot time") --- drivers/gpu/drm/bridge/imx/Kconfig | 17 ++++++ drivers/gpu/drm/bridge/imx/Makefile | 2 + .../bridge/imx/imx8mp-hdmi-tx-connector-fixup.c | 60 ++++++++++++++++++= ++++ .../bridge/imx/imx8mp-hdmi-tx-connector-fixup.dtso | 38 ++++++++++++++ drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c | 1 + 5 files changed, 118 insertions(+) diff --git a/drivers/gpu/drm/bridge/imx/Kconfig b/drivers/gpu/drm/bridge/im= x/Kconfig index b9028a5e5a06..b9ce140a93dc 100644 --- a/drivers/gpu/drm/bridge/imx/Kconfig +++ b/drivers/gpu/drm/bridge/imx/Kconfig @@ -25,6 +25,23 @@ config DRM_IMX8MP_DW_HDMI_BRIDGE Choose this to enable support for the internal HDMI encoder found on the i.MX8MP SoC. =20 +config DRM_IMX8MP_DW_HDMI_BRIDGE_CONNECTOR_FIXUP + bool "Support device tree blobs without an hdmi-connector node" + default y + depends on DRM_IMX8MP_DW_HDMI_BRIDGE + depends on OF + select OF_OVERLAY + select DRM_DISPLAY_CONNECTOR + help + Modifies at early boot the live device tree of boards using the + i.MX8MP fsl,imx8mp-hdmi-tx adding a hdmi-connector node linked to + the htmi-tx. This is needed to support bridge-connector usage in + the i.MX8MP LCDIF driver. + + You need this if you use the i.MX8MP HDMI output and your board + device tree file does not have an hdmi-connector node connected + to it. + config DRM_IMX8MP_HDMI_PAI tristate "Freescale i.MX8MP HDMI PAI bridge support" depends on OF diff --git a/drivers/gpu/drm/bridge/imx/Makefile b/drivers/gpu/drm/bridge/i= mx/Makefile index 8d01fda25451..84499fe2e444 100644 --- a/drivers/gpu/drm/bridge/imx/Makefile +++ b/drivers/gpu/drm/bridge/imx/Makefile @@ -1,6 +1,8 @@ obj-$(CONFIG_DRM_IMX_LDB_HELPER) +=3D imx-ldb-helper.o obj-$(CONFIG_DRM_IMX_LEGACY_BRIDGE) +=3D imx-legacy-bridge.o obj-$(CONFIG_DRM_IMX8MP_DW_HDMI_BRIDGE) +=3D imx8mp-hdmi-tx.o +obj-$(CONFIG_DRM_IMX8MP_DW_HDMI_BRIDGE_CONNECTOR_FIXUP) +=3D imx8mp-hdmi-t= x-connector-fixup.o \ + imx8mp-hdmi-tx-connector-fixup.dtbo.o obj-$(CONFIG_DRM_IMX8MP_HDMI_PAI) +=3D imx8mp-hdmi-pai.o obj-$(CONFIG_DRM_IMX8MP_HDMI_PVI) +=3D imx8mp-hdmi-pvi.o obj-$(CONFIG_DRM_IMX8QM_LDB) +=3D imx8qm-ldb.o diff --git a/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx-connector-fixup.c b/= drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx-connector-fixup.c new file mode 100644 index 000000000000..8c423b9bfa50 --- /dev/null +++ b/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx-connector-fixup.c @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Add an hdmi-connector node to boards using the imx8mp hdmi_tx which + * don't have one. This is needed for the i.MX LCDIF to work with + * DRM_BRIDGE_ATTACH_NO_CONNECTOR. + * + * Copyright (C) 2026 GE HealthCare + * Author: Luca Ceresoli + */ + +#include +#include +#include +#include + +/* Embedded dtbo symbols created by cmd_wrap_S_dtb in scripts/Makefile.dtb= s */ +extern char __dtbo_imx8mp_hdmi_tx_connector_fixup_begin[]; +extern char __dtbo_imx8mp_hdmi_tx_connector_fixup_end[]; + +static int __init imx8mp_hdmi_tx_connector_fixup_init(void) +{ + struct device_node *hdmi_tx __free(device_node) =3D NULL; + struct device_node *endpoint __free(device_node) =3D NULL; + struct device_node *hdmi_conn __free(device_node) =3D NULL; + void *dtbo_start; + u32 dtbo_size; + int ovcs_id; + int err; + + hdmi_tx =3D of_find_node_by_path("/soc@0/bus@32c00000/hdmi@32fd8000"); + if (!of_device_is_available(hdmi_tx)) + return 0; + + /* If endpoint exists, assume an hdmi-connector exists already */ + endpoint =3D of_find_node_by_path("/soc@0/bus@32c00000/hdmi@32fd8000/port= s/port@1/endpoint"); + if (endpoint) + return 0; + + dtbo_start =3D __dtbo_imx8mp_hdmi_tx_connector_fixup_begin; + dtbo_size =3D __dtbo_imx8mp_hdmi_tx_connector_fixup_end - + __dtbo_imx8mp_hdmi_tx_connector_fixup_begin; + + err =3D of_overlay_fdt_apply(dtbo_start, dtbo_size, &ovcs_id, NULL); + if (err) + return err; + + hdmi_conn =3D of_find_node_by_name(NULL, "fixup-hdmi-connector"); + if (!hdmi_conn) { + err =3D -ENODEV; + goto overlay_remove; + } + + return 0; + +overlay_remove: + of_overlay_remove(&ovcs_id); + return err; +} + +subsys_initcall(imx8mp_hdmi_tx_connector_fixup_init); diff --git a/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx-connector-fixup.dtso= b/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx-connector-fixup.dtso new file mode 100644 index 000000000000..ee718ca1b11b --- /dev/null +++ b/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx-connector-fixup.dtso @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * DTS overlay adding an hdmi-connector node to boards using the imx8mp hd= mi_tx + * + * Copyright (C) 2026 GE HealthCare + * Author: Luca Ceresoli + */ + +/dts-v1/; +/plugin/; + +&{/} { + fixup-hdmi-connector { + compatible =3D "hdmi-connector"; + label =3D "HDMI"; + type =3D "a"; + + port { + fixup_hdmi_connector_in: endpoint { + remote-endpoint =3D <&hdmi_tx_out>; + }; + }; + }; + + soc@0 { + bus@32c00000 { + hdmi@32fd8000 { + ports { + port@1 { + hdmi_tx_out: endpoint { + remote-endpoint =3D <&fixup_hdmi_connector_in>; + }; + }; + }; + }; + }; + }; +}; diff --git a/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c b/drivers/gpu/drm/= bridge/imx/imx8mp-hdmi-tx.c index 32fd3554e267..8e8cfd66f23b 100644 --- a/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c +++ b/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-tx.c @@ -138,6 +138,7 @@ static int imx8mp_dw_hdmi_probe(struct platform_device = *pdev) plat_data->phy_name =3D "SAMSUNG HDMI TX PHY"; plat_data->priv_data =3D hdmi; plat_data->phy_force_vendor =3D true; + plat_data->output_port =3D 1; =20 platform_set_drvdata(pdev, hdmi); =20 --=20 2.53.0 From nobody Sat Apr 4 07:50:09 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 86EC631F994 for ; Fri, 20 Mar 2026 10:47:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003679; cv=none; b=p2cOlws0vYNvwNtlCaE30YybA2E0030XDQ3QMGxd3LWN1W2n0CabTUcRS9VcjNobTv8oiPO/ieeOJEuHV88ntUdjG+jC6qpQm6DAqI59X5tBAANVSES20A5T6DnZHUspOFVMsRo0OEByjm7zMeQQHnS47xzmvPsMdS0ISQj5qgA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774003679; c=relaxed/simple; bh=8yY00GLq7/QZCFWK0+7e9KfD4HG+wxOWqbZcKAHdVJE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DXUrxKuOWIi1rI+WwiAoHKUIvRS8UXLzxajPUUouFT1ZguT8r1ADMm1cuhfZHS3yjQIAyg9Bqu4tpmkRbwfJ/d/NjnvuN9itZ0knhVPG/PS3l2wn05acNqOC6b7t0+KMQ8kzbNqCcxfg9nZXiRc72mmIanepmeXmsZMetxMpg+8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=b4Mgr3wJ; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="b4Mgr3wJ" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 509C41A2F19 for ; Fri, 20 Mar 2026 10:47:57 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 2844F600E0 for ; Fri, 20 Mar 2026 10:47:57 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 7DF5310450A35; Fri, 20 Mar 2026 11:47:45 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1774003674; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=4T4axWR8ozOJ/Xi7kzHVRqa4a+zl3Ng+9KLl2BPnmnU=; b=b4Mgr3wJeBvoLayCkTLc8I0Qd/rCXnaK7pKNSXwumkcaoUPp6XZ8y7WZBak34cq4+ovggZ Zzus/vja8EuoI+KEcrFbmYn471Wv6wW1qEXGhcnRv7Lq8anVpAUmYuod/6HkKv6RPBDDCF Z6iE412IJ40rF7IrMJbBy93lRazXIwP+PHknq+tP5+k8JBchMqpOJggDQs1jD8eoPuu6P/ rEWgFa3XJt7668IvDIfYOZdO1WPUXJCG7QYNs668QlUDVZaXThmB5s9v+s3uMfkgof5YlK 0mYmHWg9BIzIcCct8iB1XXicjpafjEI9QsVMWkaX2T6oI0CO9ZlSDGJTZOEmhw== From: Luca Ceresoli Date: Fri, 20 Mar 2026 11:46:19 +0100 Subject: [PATCH 8/8] drm/mxsfb/lcdif: use DRM_BRIDGE_ATTACH_NO_CONNECTOR and the bridge-connector Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260320-drm-lcdif-dbanc-v1-8-479a04133e70@bootlin.com> References: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> In-Reply-To: <20260320-drm-lcdif-dbanc-v1-0-479a04133e70@bootlin.com> To: Marek Vasut , Stefan Agner , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Liu Ying , Rob Herring , Saravana Kannan Cc: "Kory Maincent (TI.com)" , =?utf-8?q?Herv=C3=A9_Codina?= , Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Adam Ford , Alexander Stein , Anson Huang , Christopher Obbard , Daniel Scally , Emanuele Ghidoli , Fabio Estevam , Francesco Dolcini , Frieder Schrempf , Gilles Talis , =?utf-8?q?Goran_Ra=C4=91enovi=C4=87?= , Heiko Schocher , Joao Paulo Goncalves , Josua Mayer , =?utf-8?q?Jo=C3=A3o_Paulo_Gon=C3=A7alves?= , Kieran Bingham , Marco Felsch , Martyn Welch , Oleksij Rempel , Peng Fan , Philippe Schenker , Richard Hu , Shengjiu Wang , Stefan Eichenberger , Vitor Soares , Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 Convert this driver to DRM_BRIDGE_ATTACH_NO_CONNECTOR and to the drm_bridge_connector framework which is the current DRM bridge best practice. Signed-off-by: Luca Ceresoli Tested-by: Alexander Stein # TQMa8MPxL/MB= a8MPxL Tested-by: Martyn Welch --- drivers/gpu/drm/mxsfb/Kconfig | 1 + drivers/gpu/drm/mxsfb/lcdif_drv.c | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/mxsfb/Kconfig b/drivers/gpu/drm/mxsfb/Kconfig index 264e74f45554..1a8a5d1ba8c0 100644 --- a/drivers/gpu/drm/mxsfb/Kconfig +++ b/drivers/gpu/drm/mxsfb/Kconfig @@ -33,6 +33,7 @@ config DRM_IMX_LCDIF select DRM_GEM_DMA_HELPER select DRM_PANEL select DRM_PANEL_BRIDGE + select DRM_BRIDGE_CONNECTOR help Choose this option if you have an LCDIFv3 LCD controller. Those devices are found in various i.MX SoC (i.MX8MP, diff --git a/drivers/gpu/drm/mxsfb/lcdif_drv.c b/drivers/gpu/drm/mxsfb/lcdi= f_drv.c index e40253ad607b..3388d959c93d 100644 --- a/drivers/gpu/drm/mxsfb/lcdif_drv.c +++ b/drivers/gpu/drm/mxsfb/lcdif_drv.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -50,6 +51,7 @@ static int lcdif_attach_bridge(struct lcdif_drm_private *= lcdif) struct device *dev =3D lcdif->drm->dev; struct drm_encoder *encoder; struct drm_bridge *bridge; + struct drm_connector *connector; int ret; =20 struct device_node *remote __free(device_node) =3D @@ -72,10 +74,18 @@ static int lcdif_attach_bridge(struct lcdif_drm_private= *lcdif) if (ret) return dev_err_probe(dev, ret, "Failed to initialize encoder\n"); =20 - ret =3D drm_bridge_attach(encoder, bridge, NULL, 0); + ret =3D drm_bridge_attach(encoder, bridge, NULL, DRM_BRIDGE_ATTACH_NO_CON= NECTOR); if (ret) return dev_err_probe(dev, ret, "Failed to attach bridge\n"); =20 + connector =3D drm_bridge_connector_init(lcdif->drm, encoder); + if (IS_ERR(connector)) + return dev_err_probe(dev, PTR_ERR(connector), "Failed to init bridge_con= nector\n"); + + ret =3D drm_connector_attach_encoder(connector, encoder); + if (ret) + return dev_err_probe(dev, ret, "Failed to attach connector\n"); + return 0; } =20 --=20 2.53.0