From nobody Mon Feb 9 10:51:34 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 2495B2ECD2A for ; Fri, 9 Jan 2026 07:31:51 +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=1767943912; cv=none; b=WjE7y62UvnUwx5/EqZD4TgRpkOCJEypi7vjg2p+Xd6c6Obcf6+SdqXs0c6FabhKETyHMRFacoJ4aQIJYBt4qtVnW/aPqlHiM3e0xHujXKLEnaEt0yoel4vpmbJjs840b2wTgxH3Y9kImoUoSuYkJETPuFf1fFHDsx83lm0eAi7Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943912; c=relaxed/simple; bh=pW8Rqlf9CIE7RE0N7FuyghveRIlSbCH8G1NmOkF9Fkw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NCp2cCeLWY2gfNQ8mCozUhPFKskwq31YtvbCWP2I4sioGJyL9hvP656Lsv6Jqp03JI6ehXXhgP9Wqr78iMyR8zRMxbx5DHjBforCk/FGdNiQVx9SJntAM8d8zWSYCD/nigjLVqYC5IdjOEUOuc2tFEt0wjhwV7Gx41S1uzvcwgI= 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=jABOhxKZ; 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="jABOhxKZ" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 859DB1A273A; Fri, 9 Jan 2026 07:31:49 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 5418060734; Fri, 9 Jan 2026 07:31:49 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id D2901103C87F9; Fri, 9 Jan 2026 08:31:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1767943907; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=7G0VQZhCL0E1RG/9vT5q4DhtmO9Jz5X+7mGnytpns6k=; b=jABOhxKZYevXq35Y/dw2OauCpOzC4O5PvKI4NVE0SWcsexbyfyRaVjJEYfkRcMOwLrsmmc JZsZZPMU/tn1RZ11AeFV8wudEjS0FpNduTmCweyYhIkpHZhJ6Eqj2YAzo7y3tpHyMpO4YE lf02ZwqPTxUlrPRJYx7USyhoZDAaBgqH6PjXGbMgb0ZGuWHclq6JKI+OXUdiyPMtc8YV7l sMbWc//+lnblF9FnL3mL3ARa2rq3yVQ5ZdEL3l30W+0O2P5acKrZd8YvanmZS8E0MAlh4B G0CYNTSrWZ/AqT+N+3Ve0DGrsyljbGn7k5/X8BP40arYYyIZ5oRMhZipOEXDPQ== From: Luca Ceresoli Date: Fri, 09 Jan 2026 08:31:32 +0100 Subject: [PATCH v2 01/12] drm: of: drm_of_panel_bridge_remove(): fix device_node leak 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: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-1-8bad3ef90b9f@bootlin.com> References: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> In-Reply-To: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philippe Cornu , benjamin.gaignard@linaro.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Adrien Grassein , Liu Ying , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Inki Dae , Jagan Teki , Marek Szyprowski Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , stable@vger.kernel.org X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 drm_of_panel_bridge_remove() uses of_graph_get_remote_node() to get a device_node but does not put the node reference. Fixes: c70087e8f16f ("drm/drm_of: add drm_of_panel_bridge_remove function") Cc: stable@vger.kernel.org # v4.15 Acked-by: Maxime Ripard Signed-off-by: Luca Ceresoli --- include/drm/drm_of.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h index 7f0256dae3f1..f3e55ea2174c 100644 --- a/include/drm/drm_of.h +++ b/include/drm/drm_of.h @@ -5,6 +5,7 @@ #include #include #if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_DRM_PANEL_BRIDGE) +#include #include #endif =20 @@ -173,6 +174,8 @@ static inline int drm_of_panel_bridge_remove(const stru= ct device_node *np, bridge =3D of_drm_find_bridge(remote); drm_panel_bridge_remove(bridge); =20 + of_node_put(remote); + return 0; #else return -EINVAL; --=20 2.52.0 From nobody Mon Feb 9 10:51:34 2026 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (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 3F5862F12AC for ; Fri, 9 Jan 2026 07:31:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943915; cv=none; b=apYggSyy1opQaYpckyqgauHpfzxyM6fvOCbJ8L25K9a3ZNUu+bzWFUxIjLybxyV2aOy+4C0uoWjptHPSRp1Zd0H8r6CH1/1QN/LeTDdm3mJGuz7qnH0IUnhqcECTw3Se7KmMUXpJG3Qw40w+TAyeJIUPRcddTz1Ne0ADs+HqPCk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943915; c=relaxed/simple; bh=lCoE1iIwBZ3+cKNZRDBiptAWs5br4SmMSzQWSEEet2c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CSC0AGwePVIgiIUEit2q4Zc/EORxMxHv4DcD7aHdGsPTxrXdatuugXAyJG5kyc9vrtP+AZn4xLOxo5rzeE6lhD2k/vIfd66CVWhK6JXnw0kfRYXoLH6gbjVniTCsFUzb6AVJqbGRYS9mXW0WyjncH+JOC5WCGnhO0xr6Npv9ABI= 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=d/GBUMzy; arc=none smtp.client-ip=185.246.85.4 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="d/GBUMzy" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 073EB4E4201C; Fri, 9 Jan 2026 07:31:53 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id CE3FF60734; Fri, 9 Jan 2026 07:31:52 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 56B9E103C8820; Fri, 9 Jan 2026 08:31:48 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1767943911; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=gRp+L8UjoWDmuIpXqFfLmzodLWWfkNseQ+dp2qEU4qk=; b=d/GBUMzyOhyO6LiVGwWMVSTwjXJiCKoYcpKd9hSZVUfHnaWKqsfm77Es/Y3M4CDLrDmE7T q/Np1b0DiwrGutUJuMxA8VlxH1GAcBbWgs29aOxh2sDn/VAKdmRdsonPD8pAkXtjNncmKF v3BlnsL78EGj5KNwKQUqRZTqdsK8euUgX2TPT/czOtUTnFD2q//gOWMBEjNkagV6DWwt6M j/7bGcj+3gJAKAZ7ek+YNMxHT2YYYSr1+41gzbCQ+BYmbzBmRVgi4sTSJfR0KnobunBHnJ YlGEYY3wHaMXPR7i1nzIQeRV7OouKo0K3C0EX6FNJu+ti976/h4aPcemX+uSUA== From: Luca Ceresoli Date: Fri, 09 Jan 2026 08:31:33 +0100 Subject: [PATCH v2 02/12] drm: of: drm_of_panel_bridge_remove(): convert to of_drm_find_and_get_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: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-2-8bad3ef90b9f@bootlin.com> References: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> In-Reply-To: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philippe Cornu , benjamin.gaignard@linaro.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Adrien Grassein , Liu Ying , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Inki Dae , Jagan Teki , Marek Szyprowski Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 of_drm_find_bridge() is deprecated. Move to its replacement of_drm_find_and_get_bridge() which gets a bridge reference, and ensure it is put when done. Acked-by: Maxime Ripard Signed-off-by: Luca Ceresoli --- include/drm/drm_of.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h index f3e55ea2174c..f2f2bf82eff9 100644 --- a/include/drm/drm_of.h +++ b/include/drm/drm_of.h @@ -171,9 +171,10 @@ static inline int drm_of_panel_bridge_remove(const str= uct device_node *np, if (!remote) return -ENODEV; =20 - bridge =3D of_drm_find_bridge(remote); + bridge =3D of_drm_find_and_get_bridge(remote); drm_panel_bridge_remove(bridge); =20 + drm_bridge_put(bridge); of_node_put(remote); =20 return 0; --=20 2.52.0 From nobody Mon Feb 9 10:51:34 2026 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (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 66B612F12AC for ; Fri, 9 Jan 2026 07:31:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943919; cv=none; b=YyuWcI8PqpfuSqvSwFoZpWcvCQt05i2wwHAI4LU+aA8e2AZLZdshFUMIANtXKQnV46elHhqlXS3kt4gSIvj9cx3WTFuxLENkWun+dnjnmbQbhikB8ZnKNXutzf7vPts8NV1T7HFo5IOgbbrK6JxYfclLCC0nuVKMSbXcbWo9VAI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943919; c=relaxed/simple; bh=nT+4wy5IuQ1fTasRk376WO3GHIalG7SRQ/MlMuxaomM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dmW4i0287H/AvSYypWXoR6qlSwZpa49SU+hd5w74CNj/VaHAhcajr2LzaLnd3DgGU2kqTsyxsj0MwokTFSHCaI6ltiImlT1ptX7OZYXYIHDEvbu+C98DXBg5Depv4il0ok0PRjTcBVLdmRHnObFFNmaEeMMiomNm9ICyrowBcd4= 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=Wj+4gEOs; arc=none smtp.client-ip=185.246.85.4 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="Wj+4gEOs" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 2475E4E4201A; Fri, 9 Jan 2026 07:31:57 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id ED8A360734; Fri, 9 Jan 2026 07:31:56 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id E56EA103C87E8; Fri, 9 Jan 2026 08:31:51 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1767943915; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=xbfkkRL/MGRcgqDvDpIMuvcsCJnlzFYd2Dd6uEyNIfE=; b=Wj+4gEOsRDpvVFKtj85yDoEYt0GlQBO/GV44M9b6EjHHFe2U47E2xYOG2Y6Nho9UJHBkyH t53Y7OJYp/uu1v8nuQgSwSj3lQyfJR+sLkr8OrkKWiBjsu6hKdgxUuHY6lMU+WLE28kugh lt1ImhFCS3fknd8S8kJQaKuGp8IH4JW/q6fe5/8ym7KWXTVM1dTzy7zhKJwOjE4kyESM7K aDhqUvDW1LZhHE0RlYJVtNpp7hakA7X1WHECacKR82S+pr6vtgJX3S0jMsceQobszIE2fK Q6Nd/+RE0tlV/3M9KNk3GLR/lFER7XYiMZfiZgfsyf428iQvqOoIG4dacgQGmQ== From: Luca Ceresoli Date: Fri, 09 Jan 2026 08:31:34 +0100 Subject: [PATCH v2 03/12] drm/bridge: sii902x: convert to of_drm_find_and_get_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: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-3-8bad3ef90b9f@bootlin.com> References: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> In-Reply-To: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philippe Cornu , benjamin.gaignard@linaro.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Adrien Grassein , Liu Ying , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Inki Dae , Jagan Teki , Marek Szyprowski Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 of_drm_find_bridge() is deprecated. Move to its replacement of_drm_find_and_get_bridge() which gets a bridge reference, and ensure it is put when done by using the drm_bridge::next_bridge pointer. Acked-by: Maxime Ripard Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/sii902x.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii9= 02x.c index 1f0aba28ad1e..12497f5ce4ff 100644 --- a/drivers/gpu/drm/bridge/sii902x.c +++ b/drivers/gpu/drm/bridge/sii902x.c @@ -175,7 +175,6 @@ struct sii902x { struct i2c_client *i2c; struct regmap *regmap; struct drm_bridge bridge; - struct drm_bridge *next_bridge; struct drm_connector connector; struct gpio_desc *reset_gpio; struct i2c_mux_core *i2cmux; @@ -421,7 +420,7 @@ static int sii902x_bridge_attach(struct drm_bridge *bri= dge, int ret; =20 if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) - return drm_bridge_attach(encoder, sii902x->next_bridge, + return drm_bridge_attach(encoder, sii902x->bridge.next_bridge, bridge, flags); =20 drm_connector_helper_add(&sii902x->connector, @@ -1204,9 +1203,9 @@ static int sii902x_probe(struct i2c_client *client) return -ENODEV; } =20 - sii902x->next_bridge =3D of_drm_find_bridge(remote); + sii902x->bridge.next_bridge =3D of_drm_find_and_get_bridge(remote); of_node_put(remote); - if (!sii902x->next_bridge) + if (!sii902x->bridge.next_bridge) return dev_err_probe(dev, -EPROBE_DEFER, "Failed to find remote bridge\n"); } --=20 2.52.0 From nobody Mon Feb 9 10:51:34 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 D1D3C2F3C19 for ; Fri, 9 Jan 2026 07:32:01 +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=1767943923; cv=none; b=lOjn1/t3/0WvXzeJ4Qhdhe2N0pfyR/hZVaAtBub0zODYW0tyD70Yjgjr0sk5wRJUgMlbq4MPTITpUPEqpuiI4+YmoLQR9C30/olbgvF/DxPqXz8N54B/WY4O5Lnmkbojv0FnQG3XsPJ5LtVqiy0cktWgiTRXEB2xJEsExsho+S8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943923; c=relaxed/simple; bh=Wm9vtPD7u/6mXIH2palH008pxUbYphqB67C7NqBE+Uc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=krTNj7DV8QjrGsn6se5FyYs0l3XpwyVQsaXuPIZhvycJtkRMcDTV6teYYX5+dEqA4Cyp23VdAmise+P6y559Ux4U1rbEWemfi3fdTojQZM9LNV84HQoy3lzYGKK+QMXnMFlYMCIEnGrpubvOC/OLdBUZ1ttGM7j2WnXabjQaAFE= 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=iGbPeTtF; 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="iGbPeTtF" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id B7D1B1A273A; Fri, 9 Jan 2026 07:32:00 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 8CD3760734; Fri, 9 Jan 2026 07:32:00 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id E5A6C103C881F; Fri, 9 Jan 2026 08:31:55 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1767943919; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=FMUIcmX1ssvYnvOCBSl/fsdMgg8W5jXv5tr1P/C0UEk=; b=iGbPeTtFCVzJVQ6tozr5mnARxFxazh+jedm+A1PS86TzzTDjfxP99pLlPgw/WahU3TlG8a FSP6f0gGNfM8KzqqAudm0ZbEN8AMxkWBpsWnmprHXfdTPIVk5cjpqG+VqjEM8dxo7qWyw/ T1n3dh2qJTLwRq4haP4FK0wXoDFEHhkES8onZBbM5kzhO6KQ5b7QMBQjt2C9urOXCgJEl3 w8447TOw8hlu314rpF+DqDMUb5pwXacWEPp0HslEDOwA4ofD20+THJmH543Sv8KkykeRAC dhzm1WtI1IeJb8fdYV61C0NRAHW+h5wOcMjYphEBuPiLGeNyh2INXctXcN4r/g== From: Luca Ceresoli Date: Fri, 09 Jan 2026 08:31:35 +0100 Subject: [PATCH v2 04/12] drm/bridge: thc63lvd1024: convert to of_drm_find_and_get_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: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-4-8bad3ef90b9f@bootlin.com> References: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> In-Reply-To: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philippe Cornu , benjamin.gaignard@linaro.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Adrien Grassein , Liu Ying , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Inki Dae , Jagan Teki , Marek Szyprowski Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 of_drm_find_bridge() is deprecated. Move to its replacement of_drm_find_and_get_bridge() which gets a bridge reference, and ensure it is put when done by using the drm_bridge::next_bridge pointer. Acked-by: Maxime Ripard Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/thc63lvd1024.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/bridge/thc63lvd1024.c b/drivers/gpu/drm/bridge= /thc63lvd1024.c index 2cb7cd0c0608..c804222846c3 100644 --- a/drivers/gpu/drm/bridge/thc63lvd1024.c +++ b/drivers/gpu/drm/bridge/thc63lvd1024.c @@ -32,7 +32,6 @@ struct thc63_dev { struct gpio_desc *oe; =20 struct drm_bridge bridge; - struct drm_bridge *next; =20 struct drm_bridge_timings timings; }; @@ -48,7 +47,7 @@ static int thc63_attach(struct drm_bridge *bridge, { struct thc63_dev *thc63 =3D to_thc63(bridge); =20 - return drm_bridge_attach(encoder, thc63->next, bridge, flags); + return drm_bridge_attach(encoder, thc63->bridge.next_bridge, bridge, flag= s); } =20 static enum drm_mode_status thc63_mode_valid(struct drm_bridge *bridge, @@ -132,9 +131,9 @@ static int thc63_parse_dt(struct thc63_dev *thc63) return -ENODEV; } =20 - thc63->next =3D of_drm_find_bridge(remote); + thc63->bridge.next_bridge =3D of_drm_find_and_get_bridge(remote); of_node_put(remote); - if (!thc63->next) + if (!thc63->bridge.next_bridge) return -EPROBE_DEFER; =20 endpoint =3D of_graph_get_endpoint_by_regs(thc63->dev->of_node, --=20 2.52.0 From nobody Mon Feb 9 10:51:34 2026 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (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 A2C7E2ED164 for ; Fri, 9 Jan 2026 07:32:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943927; cv=none; b=VtAaNIfTuyjxbTOaZTFLTo7W81GovrqwfErHdYrfWZKxklzKGNgzjlAQ9LFcZVc7U2If7sBzCDAqSDj+pL5g9pMX5sWxdtDbJbh9JEahO1KBfg35zPp0WOmnmOn0GcQ3DCXYVXeCo2vdSOvTbcrQnNUtvkWGb7CIXGzMbNTOWxE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943927; c=relaxed/simple; bh=DV+r/ISEZOQSU+HJQZA2LHrKuK9CqCC70n2/SzpZbVA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tWgGVk6giIZ1lnBUoBMrw0H1GTi6PyNg3DtFA9GAmgtqjP9ptIXqVi9RsgypbUFYmIScoXo3msUdjZl0J5UyqstTGmYskqjiR6bQNLAWJr74LNX8mj2P7DkdiOh094Z/SKU2kmkBFdPi+Ympz+m0/CX4rViTefd06ueWUHzqhJw= 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=1kO/tS9S; arc=none smtp.client-ip=185.246.85.4 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="1kO/tS9S" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 4775E4E4201A; Fri, 9 Jan 2026 07:32:04 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 1D8B960734; Fri, 9 Jan 2026 07:32:04 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id DD607103C87F9; Fri, 9 Jan 2026 08:31:59 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1767943922; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=tEemrmaT5Vu69sGAU9788b4b4bAHyoioGXyQ1NCe9sE=; b=1kO/tS9SGm3MhUt/nJLbjtVQeGUWbQQwTYY7Zr7xS2Ls6WEVPc4QbnSBZryoMW0uMAvrKt A5KDF1NtJLYt6QrofdXbTefl0KKkjZPTKqcFhS+HEFqsm2E4FlcMSjHb7hDI0ev0VXheRq WEpdUmefRvpWDKUK6z57Kako5EUTrVxSFM9ypvGAbCB7zATtyACOVJItenRJW7xPtDVPUZ M3vkIZLIBWmW1kbCpAjp2EGpUO0tEQUQaVd+waVgVXeKVduYB8iomNxkR99taSqRIAxoAC mUAbUYFHeWQh7ZCkSImKeeI6fuMOBjnVIFpzF80ZZaT6qRmsK0hgVtpmr731xg== From: Luca Ceresoli Date: Fri, 09 Jan 2026 08:31:36 +0100 Subject: [PATCH v2 05/12] drm/bridge: tfp410: convert to of_drm_find_and_get_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: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-5-8bad3ef90b9f@bootlin.com> References: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> In-Reply-To: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philippe Cornu , benjamin.gaignard@linaro.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Adrien Grassein , Liu Ying , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Inki Dae , Jagan Teki , Marek Szyprowski Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 of_drm_find_bridge() is deprecated. Move to its replacement of_drm_find_and_get_bridge() which gets a bridge reference, and ensure it is put when done by using the drm_bridge::next_bridge pointer. Acked-by: Maxime Ripard Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/ti-tfp410.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti= -tfp410.c index b80ee089f880..11b5bb50e9f4 100644 --- a/drivers/gpu/drm/bridge/ti-tfp410.c +++ b/drivers/gpu/drm/bridge/ti-tfp410.c @@ -30,7 +30,6 @@ struct tfp410 { struct gpio_desc *powerdown; =20 struct drm_bridge_timings timings; - struct drm_bridge *next_bridge; =20 struct device *dev; }; @@ -53,8 +52,8 @@ static int tfp410_get_modes(struct drm_connector *connect= or) const struct drm_edid *drm_edid; int ret; =20 - if (dvi->next_bridge->ops & DRM_BRIDGE_OP_EDID) { - drm_edid =3D drm_bridge_edid_read(dvi->next_bridge, connector); + if (dvi->bridge.next_bridge->ops & DRM_BRIDGE_OP_EDID) { + drm_edid =3D drm_bridge_edid_read(dvi->bridge.next_bridge, connector); if (!drm_edid) DRM_INFO("EDID read failed. Fallback to standard modes\n"); } else { @@ -89,7 +88,7 @@ tfp410_connector_detect(struct drm_connector *connector, = bool force) { struct tfp410 *dvi =3D drm_connector_to_tfp410(connector); =20 - return drm_bridge_detect(dvi->next_bridge, connector); + return drm_bridge_detect(dvi->bridge.next_bridge, connector); } =20 static const struct drm_connector_funcs tfp410_con_funcs =3D { @@ -126,7 +125,7 @@ static int tfp410_attach(struct drm_bridge *bridge, struct tfp410 *dvi =3D drm_bridge_to_tfp410(bridge); int ret; =20 - ret =3D drm_bridge_attach(encoder, dvi->next_bridge, bridge, + ret =3D drm_bridge_attach(encoder, dvi->bridge.next_bridge, bridge, DRM_BRIDGE_ATTACH_NO_CONNECTOR); if (ret < 0) return ret; @@ -134,14 +133,14 @@ static int tfp410_attach(struct drm_bridge *bridge, if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) return 0; =20 - if (dvi->next_bridge->ops & DRM_BRIDGE_OP_DETECT) + if (dvi->bridge.next_bridge->ops & DRM_BRIDGE_OP_DETECT) dvi->connector.polled =3D DRM_CONNECTOR_POLL_HPD; else dvi->connector.polled =3D DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POL= L_DISCONNECT; =20 - if (dvi->next_bridge->ops & DRM_BRIDGE_OP_HPD) { + if (dvi->bridge.next_bridge->ops & DRM_BRIDGE_OP_HPD) { INIT_DELAYED_WORK(&dvi->hpd_work, tfp410_hpd_work_func); - drm_bridge_hpd_enable(dvi->next_bridge, tfp410_hpd_callback, + drm_bridge_hpd_enable(dvi->bridge.next_bridge, tfp410_hpd_callback, dvi); } =20 @@ -149,8 +148,8 @@ static int tfp410_attach(struct drm_bridge *bridge, &tfp410_con_helper_funcs); ret =3D drm_connector_init_with_ddc(bridge->dev, &dvi->connector, &tfp410_con_funcs, - dvi->next_bridge->type, - dvi->next_bridge->ddc); + dvi->bridge.next_bridge->type, + dvi->bridge.next_bridge->ddc); if (ret) { dev_err(dvi->dev, "drm_connector_init_with_ddc() failed: %d\n", ret); @@ -169,8 +168,8 @@ static void tfp410_detach(struct drm_bridge *bridge) { struct tfp410 *dvi =3D drm_bridge_to_tfp410(bridge); =20 - if (dvi->connector.dev && dvi->next_bridge->ops & DRM_BRIDGE_OP_HPD) { - drm_bridge_hpd_disable(dvi->next_bridge); + if (dvi->connector.dev && dvi->bridge.next_bridge->ops & DRM_BRIDGE_OP_HP= D) { + drm_bridge_hpd_disable(dvi->bridge.next_bridge); cancel_delayed_work_sync(&dvi->hpd_work); } } @@ -362,10 +361,10 @@ static int tfp410_init(struct device *dev, bool i2c) if (!node) return -ENODEV; =20 - dvi->next_bridge =3D of_drm_find_bridge(node); + dvi->bridge.next_bridge =3D of_drm_find_and_get_bridge(node); of_node_put(node); =20 - if (!dvi->next_bridge) + if (!dvi->bridge.next_bridge) return -EPROBE_DEFER; =20 /* Get the powerdown GPIO. */ --=20 2.52.0 From nobody Mon Feb 9 10:51:34 2026 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (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 8515C2F618F for ; Fri, 9 Jan 2026 07:32:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943930; cv=none; b=PuwTRHwWSZmHSBJvnrREW+/xdp2dZNDACnraHB2b2uR74gI0135h3ZQaYXxLLkGjh/DtZilKuODSN3m5qlVnwH62AZuQ9mjVKKWKtaGzXELaTy5bfq1BpeOuofFiNm5Yvv98PvMwetM7uApCymbrC0VZZqmMtL/iwCozAovJ4BI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943930; c=relaxed/simple; bh=+GQeLLeQGiiqeSkUPzm3KmieaFZlwilwQOvruzSGIAA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=p30iH2ciQBv3MRhR/moFpeNbuY8tppzEYHOHAOvBLs90eHblVo4JYNQXAeIMzFSbUf//y1p6J1BSjEMw/GU25nOVTSKNTsdhIERxevYmX8I/Gz+NGG4BJfZLmM4kqEvs62bVMKYWKpl7yYAFO6PWrioB0+PKur597a7NJ4P0oMw= 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=jVXcrIc4; arc=none smtp.client-ip=185.246.85.4 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="jVXcrIc4" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 478E14E4201B; Fri, 9 Jan 2026 07:32:08 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 1CBC060734; Fri, 9 Jan 2026 07:32:08 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 60D54103C87E8; Fri, 9 Jan 2026 08:32:03 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1767943926; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=pvuq5NEmZ16/DzSCFHN8BV0xmbV1KisdqLZgcDHC9U8=; b=jVXcrIc4JnfqfMct2bEuj9t8dkEePcr6nz63e9VJ67RavE+olD8VyP1qMO/a09x4+h/wDb ivg7VZ25KTYwG6Wb9vGOC/R2e0zbQjm18wPAR7OIXRFuRh/QIdichOL4F/jmXwqpUlrEMW X8GACYbPiHJ3MnDEvvGeerWqrYSmfayl6TODTt582TKWJ468VT57HEQ38M6lgqG5uwTFhA y6PMstdYOc6ShDTmndTVUSA7AVCDCssCup/n4jiIA+6FiekPnToWlC9ApQUglx/Vcy23Rh KSfKGTilVtWZDdw+MECb89yG6Fs/mkvIOGZEO+BzOqQGBPower3RF1fFjZnkNQ== From: Luca Ceresoli Date: Fri, 09 Jan 2026 08:31:37 +0100 Subject: [PATCH v2 06/12] drm/bridge: tpd12s015: convert to of_drm_find_and_get_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: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-6-8bad3ef90b9f@bootlin.com> References: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> In-Reply-To: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philippe Cornu , benjamin.gaignard@linaro.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Adrien Grassein , Liu Ying , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Inki Dae , Jagan Teki , Marek Szyprowski Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 of_drm_find_bridge() is deprecated. Move to its replacement of_drm_find_and_get_bridge() which gets a bridge reference, and ensure it is put when done by using the drm_bridge::next_bridge pointer. Acked-by: Maxime Ripard Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/ti-tpd12s015.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/bridge/ti-tpd12s015.c b/drivers/gpu/drm/bridge= /ti-tpd12s015.c index dcf686c4e73d..136e47ad1a10 100644 --- a/drivers/gpu/drm/bridge/ti-tpd12s015.c +++ b/drivers/gpu/drm/bridge/ti-tpd12s015.c @@ -28,8 +28,6 @@ struct tpd12s015_device { struct gpio_desc *ls_oe_gpio; struct gpio_desc *hpd_gpio; int hpd_irq; - - struct drm_bridge *next_bridge; }; =20 static inline struct tpd12s015_device *to_tpd12s015(struct drm_bridge *bri= dge) @@ -47,7 +45,7 @@ static int tpd12s015_attach(struct drm_bridge *bridge, if (!(flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)) return -EINVAL; =20 - ret =3D drm_bridge_attach(encoder, tpd->next_bridge, + ret =3D drm_bridge_attach(encoder, tpd->bridge.next_bridge, bridge, flags); if (ret < 0) return ret; @@ -138,10 +136,10 @@ static int tpd12s015_probe(struct platform_device *pd= ev) if (!node) return -ENODEV; =20 - tpd->next_bridge =3D of_drm_find_bridge(node); + tpd->bridge.next_bridge =3D of_drm_find_and_get_bridge(node); of_node_put(node); =20 - if (!tpd->next_bridge) + if (!tpd->bridge.next_bridge) return -EPROBE_DEFER; =20 /* Get the control and HPD GPIOs. */ --=20 2.52.0 From nobody Mon Feb 9 10:51:34 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 242EE2F6910 for ; Fri, 9 Jan 2026 07:32:13 +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=1767943934; cv=none; b=UuG9PYXOl71jx8aHfbwkxU1RrAWnq9xjBowm2YF3aFcRLLSinLRSSf3Tvyjcw2/h6n30j53+vhZPLdZn80ElDIvYN+IJe+uiVpw5bFGvC4gbn/tJFy11NzkbNcdwHxXFBko8N3TkgHlFQCKn63dqliian9+eKvnJ/2EV1HjH2j0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943934; c=relaxed/simple; bh=MugQDuFuK5JOnrxc5w6SX22Xm2uYlCfAP1WuWo+fTG8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uypqvLaTNMWKoyXc+nxSV6QyF1lKm/3UGrBdKeHqBU36D4n6qLmderlhTW+KKfnI71LGEpTbILZMH3ZreCCu9ZUMjG+R3s2wAisCqlXga/YlBjo3HTLRaHlpch83P46XqXyblnkniwcKjSgkcgLzb84KJfot/6qYINEdJiK6ygE= 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=XRC/D36U; 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="XRC/D36U" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id ED8511A273A; Fri, 9 Jan 2026 07:32:11 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id C18C260734; Fri, 9 Jan 2026 07:32:11 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 4C144103C87F9; Fri, 9 Jan 2026 08:32:07 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1767943930; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=mRT58lzEzd+gLCQT0DaHvPwQU+Zbax+UmuJHfDra6JM=; b=XRC/D36UGx21h9ZgVCVfwREKXJPrX7XxTKk0lpFMtj8GPfDjB8N+YAtS5MxP/Em+bsvFdb 6+EIa7mzQ2QgdHHL/P3aRzbeT+Nxh8JWcN1Iq9Dr7Zl1wSovDssC4GjE+uyONBtJEpSaEI sXvsQVvuTvp0+B+kOoBUI9CgM9ICtcCTfRDybNsqVtj09FrpPYnYZHVdSWQSSAoOl3pH3I qlHUp96T9k4SP8Pw3AnBpPqlAm1NBHKxg074dLyUPx7sFXITMCW8IKHc3qic3JXYzvgEsj u/gvOVrM4OqVf+di3o2h7rQcGxN4aZ2GiZkdkOLnX2ElBJOzN/6hLeqCPPKN+Q== From: Luca Ceresoli Date: Fri, 09 Jan 2026 08:31:38 +0100 Subject: [PATCH v2 07/12] drm/bridge: lt8912b: convert to of_drm_find_and_get_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: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-7-8bad3ef90b9f@bootlin.com> References: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> In-Reply-To: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philippe Cornu , benjamin.gaignard@linaro.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Adrien Grassein , Liu Ying , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Inki Dae , Jagan Teki , Marek Szyprowski Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 of_drm_find_bridge() is deprecated. Move to its replacement of_drm_find_and_get_bridge() which gets a bridge reference, and ensure it is put when done by using the drm_bridge::next_bridge pointer. Acked-by: Maxime Ripard Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/lontium-lt8912b.c | 31 +++++++++++++++-------------= --- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/bridge/lontium-lt8912b.c b/drivers/gpu/drm/bri= dge/lontium-lt8912b.c index 342374cb8fc6..8a0b48efca58 100644 --- a/drivers/gpu/drm/bridge/lontium-lt8912b.c +++ b/drivers/gpu/drm/bridge/lontium-lt8912b.c @@ -35,7 +35,6 @@ struct lt8912 { struct regmap *regmap[I2C_MAX_IDX]; =20 struct device_node *host_node; - struct drm_bridge *hdmi_port; =20 struct mipi_dsi_device *dsi; =20 @@ -407,8 +406,8 @@ lt8912_connector_detect(struct drm_connector *connector= , bool force) { struct lt8912 *lt =3D connector_to_lt8912(connector); =20 - if (lt->hdmi_port->ops & DRM_BRIDGE_OP_DETECT) - return drm_bridge_detect(lt->hdmi_port, connector); + if (lt->bridge.next_bridge->ops & DRM_BRIDGE_OP_DETECT) + return drm_bridge_detect(lt->bridge.next_bridge, connector); =20 return lt8912_check_cable_status(lt); } @@ -429,7 +428,7 @@ static int lt8912_connector_get_modes(struct drm_connec= tor *connector) u32 bus_format =3D MEDIA_BUS_FMT_RGB888_1X24; int ret, num; =20 - drm_edid =3D drm_bridge_edid_read(lt->hdmi_port, connector); + drm_edid =3D drm_bridge_edid_read(lt->bridge.next_bridge, connector); drm_edid_connector_update(connector, drm_edid); if (!drm_edid) return 0; @@ -519,8 +518,8 @@ static int lt8912_bridge_connector_init(struct drm_brid= ge *bridge) struct lt8912 *lt =3D bridge_to_lt8912(bridge); struct drm_connector *connector =3D <->connector; =20 - if (lt->hdmi_port->ops & DRM_BRIDGE_OP_HPD) { - drm_bridge_hpd_enable(lt->hdmi_port, lt8912_bridge_hpd_cb, lt); + if (lt->bridge.next_bridge->ops & DRM_BRIDGE_OP_HPD) { + drm_bridge_hpd_enable(lt->bridge.next_bridge, lt8912_bridge_hpd_cb, lt); connector->polled =3D DRM_CONNECTOR_POLL_HPD; } else { connector->polled =3D DRM_CONNECTOR_POLL_CONNECT | @@ -529,7 +528,7 @@ static int lt8912_bridge_connector_init(struct drm_brid= ge *bridge) =20 ret =3D drm_connector_init(bridge->dev, connector, <8912_connector_funcs, - lt->hdmi_port->type); + lt->bridge.next_bridge->type); if (ret) goto exit; =20 @@ -549,7 +548,7 @@ static int lt8912_bridge_attach(struct drm_bridge *brid= ge, struct lt8912 *lt =3D bridge_to_lt8912(bridge); int ret; =20 - ret =3D drm_bridge_attach(encoder, lt->hdmi_port, bridge, + ret =3D drm_bridge_attach(encoder, lt->bridge.next_bridge, bridge, DRM_BRIDGE_ATTACH_NO_CONNECTOR); if (ret < 0) { dev_err(lt->dev, "Failed to attach next bridge (%d)\n", ret); @@ -585,8 +584,8 @@ static void lt8912_bridge_detach(struct drm_bridge *bri= dge) =20 lt8912_hard_power_off(lt); =20 - if (lt->connector.dev && lt->hdmi_port->ops & DRM_BRIDGE_OP_HPD) - drm_bridge_hpd_disable(lt->hdmi_port); + if (lt->connector.dev && lt->bridge.next_bridge->ops & DRM_BRIDGE_OP_HPD) + drm_bridge_hpd_disable(lt->bridge.next_bridge); } =20 static enum drm_mode_status @@ -611,8 +610,8 @@ lt8912_bridge_detect(struct drm_bridge *bridge, struct = drm_connector *connector) { struct lt8912 *lt =3D bridge_to_lt8912(bridge); =20 - if (lt->hdmi_port->ops & DRM_BRIDGE_OP_DETECT) - return drm_bridge_detect(lt->hdmi_port, connector); + if (lt->bridge.next_bridge->ops & DRM_BRIDGE_OP_DETECT) + return drm_bridge_detect(lt->bridge.next_bridge, connector); =20 return lt8912_check_cable_status(lt); } @@ -626,8 +625,8 @@ static const struct drm_edid *lt8912_bridge_edid_read(s= truct drm_bridge *bridge, * edid must be read through the ddc bus but it must be * given to the hdmi connector node. */ - if (lt->hdmi_port->ops & DRM_BRIDGE_OP_EDID) - return drm_bridge_edid_read(lt->hdmi_port, connector); + if (lt->bridge.next_bridge->ops & DRM_BRIDGE_OP_EDID) + return drm_bridge_edid_read(lt->bridge.next_bridge, connector); =20 dev_warn(lt->dev, "The connected bridge does not supports DRM_BRIDGE_OP_E= DID\n"); return NULL; @@ -723,8 +722,8 @@ static int lt8912_parse_dt(struct lt8912 *lt) goto err_free_host_node; } =20 - lt->hdmi_port =3D of_drm_find_bridge(port_node); - if (!lt->hdmi_port) { + lt->bridge.next_bridge =3D of_drm_find_and_get_bridge(port_node); + if (!lt->bridge.next_bridge) { ret =3D -EPROBE_DEFER; dev_err_probe(lt->dev, ret, "%s: Failed to get hdmi port\n", __func__); goto err_free_host_node; --=20 2.52.0 From nobody Mon Feb 9 10:51:34 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 CCF2E2F7449 for ; Fri, 9 Jan 2026 07:32:17 +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=1767943939; cv=none; b=lCS7NsFsVUUFPlh/CPRuo8dE2HmLiKH1WBTf/uoCcUqsW1iw9nTAxE8FDqLbBSyQwbuS8JRI4wZEZG77wWqd4dVOAU9I7JlTnELjZ3V0ctlOIYl9QXZfJl0wM0SDHe93FQQnm8q2ORkvdVS9Miz9Oc9FYLPrgCmwP/cQs6D/BXA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943939; c=relaxed/simple; bh=LLtFnmZdGnsTnzMIaY3k4S3r5yFxMsWKzoWjwCfgxPM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=g06KFRYRgSggJkdWTYJYle/7nsEdeyna0q8hAhFnFj9C5OuUyJIdxsvEHG1ckTLVQR8O1rpBYR/ewgL9XCEb36M95Eh3Eg5vqCuRUD7B3C6HG4u+6mTnNAkgV4OJ+3MXXwE9g61X2FAtttkgoMnth6dpPoNvdHYTN3LVOAAS6E4= 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=uGrm2Yh8; 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="uGrm2Yh8" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 9ABD51A272E; Fri, 9 Jan 2026 07:32:16 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 6FE6A60734; Fri, 9 Jan 2026 07:32:16 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 00DDA103C881F; Fri, 9 Jan 2026 08:32:10 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1767943935; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=GxKIdaKvfopekWvG3hWQtDnNeXJiX7i9YK2gyW5SATs=; b=uGrm2Yh8nMAkdUDVxEMReHX/rp073WAEC8AuKIwYdsjF7jvVbJWnZVLt/HMUXJ456u9I2k T+sHC/WNkPQAl91yt58yr4H93+vm3bHo9tBVYc8iB3pMJrAsugXLt0lOrvje6bwsA5HT/4 9mskfawdl3gHTEJEsJhWmRCBTONx4pNMMDoc6poS+9SRrGrKz+xamS74fQaEtvWD7KyfSu fVQU7HhTnzkHJ5DqK3Lconib10bEPvwO+uLwGWpLXvt0Zg/4aUF69UoguJOT4rwHdWEWFk 9vBEBtdq0X01kgxwRvBw4vxjdfkUTDuNIx4L40Qoit2RdKup8SofWc+EqirxSA== From: Luca Ceresoli Date: Fri, 09 Jan 2026 08:31:39 +0100 Subject: [PATCH v2 08/12] drm/bridge: imx8mp-hdmi-pvi: convert to of_drm_find_and_get_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: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-8-8bad3ef90b9f@bootlin.com> References: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> In-Reply-To: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philippe Cornu , benjamin.gaignard@linaro.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Adrien Grassein , Liu Ying , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Inki Dae , Jagan Teki , Marek Szyprowski Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 of_drm_find_bridge() is deprecated. Move to its replacement of_drm_find_and_get_bridge() which gets a bridge reference, and ensure it is put when done by using the drm_bridge::next_bridge pointer. Acked-by: Maxime Ripard Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/imx/imx8mp-hdmi-pvi.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-pvi.c b/drivers/gpu/drm= /bridge/imx/imx8mp-hdmi-pvi.c index 3a6f8587a257..15fbb1be07cd 100644 --- a/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-pvi.c +++ b/drivers/gpu/drm/bridge/imx/imx8mp-hdmi-pvi.c @@ -29,7 +29,6 @@ struct imx8mp_hdmi_pvi { struct drm_bridge bridge; struct device *dev; - struct drm_bridge *next_bridge; void __iomem *regs; }; =20 @@ -45,7 +44,7 @@ static int imx8mp_hdmi_pvi_bridge_attach(struct drm_bridg= e *bridge, { struct imx8mp_hdmi_pvi *pvi =3D to_imx8mp_hdmi_pvi(bridge); =20 - return drm_bridge_attach(encoder, pvi->next_bridge, + return drm_bridge_attach(encoder, pvi->bridge.next_bridge, bridge, flags); } =20 @@ -78,8 +77,8 @@ static void imx8mp_hdmi_pvi_bridge_enable(struct drm_brid= ge *bridge, if (mode->flags & DRM_MODE_FLAG_PHSYNC) val |=3D PVI_CTRL_OP_HSYNC_POL | PVI_CTRL_INP_HSYNC_POL; =20 - if (pvi->next_bridge->timings) - bus_flags =3D pvi->next_bridge->timings->input_bus_flags; + if (pvi->bridge.next_bridge->timings) + bus_flags =3D pvi->bridge.next_bridge->timings->input_bus_flags; else if (bridge_state) bus_flags =3D bridge_state->input_bus_cfg.flags; =20 @@ -108,7 +107,7 @@ imx8mp_hdmi_pvi_bridge_get_input_bus_fmts(struct drm_br= idge *bridge, unsigned int *num_input_fmts) { struct imx8mp_hdmi_pvi *pvi =3D to_imx8mp_hdmi_pvi(bridge); - struct drm_bridge *next_bridge =3D pvi->next_bridge; + struct drm_bridge *next_bridge =3D pvi->bridge.next_bridge; struct drm_bridge_state *next_state; =20 if (!next_bridge->funcs->atomic_get_input_bus_fmts) @@ -157,10 +156,10 @@ static int imx8mp_hdmi_pvi_probe(struct platform_devi= ce *pdev) if (!remote) return -EINVAL; =20 - pvi->next_bridge =3D of_drm_find_bridge(remote); + pvi->bridge.next_bridge =3D of_drm_find_and_get_bridge(remote); of_node_put(remote); =20 - if (!pvi->next_bridge) + if (!pvi->bridge.next_bridge) return dev_err_probe(&pdev->dev, -EPROBE_DEFER, "could not find next bridge\n"); =20 @@ -168,7 +167,7 @@ static int imx8mp_hdmi_pvi_probe(struct platform_device= *pdev) =20 /* Register the bridge. */ pvi->bridge.of_node =3D pdev->dev.of_node; - pvi->bridge.timings =3D pvi->next_bridge->timings; + pvi->bridge.timings =3D pvi->bridge.next_bridge->timings; =20 drm_bridge_add(&pvi->bridge); =20 --=20 2.52.0 From nobody Mon Feb 9 10:51:34 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 B20E32F7AB1 for ; Fri, 9 Jan 2026 07:32:21 +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=1767943943; cv=none; b=miUygGhACtgm9gsksKMiTrkwijm/Z50R3OPzyJVZP21F2Ai0md8Bjs9AiqhMAEd9jEEFtbs9qiHzMio2r9XJOJ3fmbG4N3lCjl7+JMm5vPqDN/YRUinBYCZF+PITtuRJb8VWwB714a2T14tW5MjmiJTWC7NM0K9rIcUghvnktxU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943943; c=relaxed/simple; bh=fhNzlyhzzrUEuAu+qrB+QlWifLmuyV+mW85mNvaP6T0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GjtGP+EIL4D8LdzHWnbgrvJ8wnX+5mE5WYJl51N3Z5Ppl3lwew9P6v/ikoUOCC66ZuGYwZtFe4yipMf3SWxhgChx89z2yHZY24Yi53NZ+UxOb8oL5aT1dTjKFloUxIKTBNvGaB250fjObdF8phXP0C6/k6Pp2+Rnh2Cu0Az7ZdU= 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=wfUa1/x9; 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="wfUa1/x9" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 867B41A272E; Fri, 9 Jan 2026 07:32:20 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 5BD2660734; Fri, 9 Jan 2026 07:32:20 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 9918E103C8820; Fri, 9 Jan 2026 08:32:15 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1767943939; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=7iqDfxUkukxgHnkpAItwIxVCJfcJyoW7v+OTkqRu2ww=; b=wfUa1/x9gPAJupv1NstN+FEpg1om/b5kWSEidra5PWmkVO4FW8xChlVs1fv9YaEpqgg9vw EjVH2k3qcUiR7mrD4+W8UWjRSLHXgziWvt3z4voAAr3oJpG0p3rHJdJATXAq4wb394IS/r HwETWKZH4skir9SCWpHBKTUG5H9L2Ia3VYSVQCTHIe5chjz/jBChWun0ORiOba/70HWhUZ VmnukaJSCwHVos01/UHjy6n9CyVr5icw0t8Yta/VL7TqHMJyLkpzfg+GZRYJ4Gvxe9xFRc nZmal0FhoVttm/3ajVc20pMxH4RnGAPKWnsQM6nbRkPg+4pdcWhnZYvM62bfgQ== From: Luca Ceresoli Date: Fri, 09 Jan 2026 08:31:40 +0100 Subject: [PATCH v2 09/12] drm/bridge: imx8qxp-ldb: convert to of_drm_find_and_get_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: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-9-8bad3ef90b9f@bootlin.com> References: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> In-Reply-To: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philippe Cornu , benjamin.gaignard@linaro.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Adrien Grassein , Liu Ying , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Inki Dae , Jagan Teki , Marek Szyprowski Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 of_drm_find_bridge() is deprecated. Move to its replacement of_drm_find_and_get_bridge() which gets a bridge reference, and ensure it is put when done. Since the companion bridge pointer is used by many bridge funcs, putting its reference in the remove function would be dangerous. Use .destroy to put it on final deallocation. Signed-off-by: Luca Ceresoli Acked-by: Maxime Ripard --- Changes in v2: - put in .destroy, not in remove --- drivers/gpu/drm/bridge/imx/imx8qxp-ldb.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/imx/imx8qxp-ldb.c b/drivers/gpu/drm/bri= dge/imx/imx8qxp-ldb.c index 122502968927..675995cbeb6b 100644 --- a/drivers/gpu/drm/bridge/imx/imx8qxp-ldb.c +++ b/drivers/gpu/drm/bridge/imx/imx8qxp-ldb.c @@ -62,6 +62,15 @@ static inline struct imx8qxp_ldb *base_to_imx8qxp_ldb(st= ruct ldb *base) return container_of(base, struct imx8qxp_ldb, base); } =20 +static void imx8qxp_ldb_bridge_destroy(struct drm_bridge *bridge) +{ + struct ldb_channel *ldb_ch =3D bridge->driver_private; + struct ldb *ldb =3D ldb_ch->ldb; + struct imx8qxp_ldb *imx8qxp_ldb =3D base_to_imx8qxp_ldb(ldb); + + drm_bridge_put(imx8qxp_ldb->companion); +} + static void imx8qxp_ldb_set_phy_cfg(struct imx8qxp_ldb *imx8qxp_ldb, unsigned long di_clk, bool is_split, struct phy_configure_opts_lvds *phy_cfg) @@ -391,6 +400,7 @@ imx8qxp_ldb_bridge_mode_valid(struct drm_bridge *bridge, } =20 static const struct drm_bridge_funcs imx8qxp_ldb_bridge_funcs =3D { + .destroy =3D imx8qxp_ldb_bridge_destroy, .atomic_duplicate_state =3D drm_atomic_helper_bridge_duplicate_state, .atomic_destroy_state =3D drm_atomic_helper_bridge_destroy_state, .atomic_reset =3D drm_atomic_helper_bridge_reset, @@ -552,7 +562,7 @@ static int imx8qxp_ldb_parse_dt_companion(struct imx8qx= p_ldb *imx8qxp_ldb) goto out; } =20 - imx8qxp_ldb->companion =3D of_drm_find_bridge(companion_port); + imx8qxp_ldb->companion =3D of_drm_find_and_get_bridge(companion_port); if (!imx8qxp_ldb->companion) { ret =3D -EPROBE_DEFER; DRM_DEV_DEBUG_DRIVER(dev, --=20 2.52.0 From nobody Mon Feb 9 10:51:34 2026 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (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 D06112ED164 for ; Fri, 9 Jan 2026 07:32:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943947; cv=none; b=FAvowFJLwaY9wqIGPXScI+KLjavYuNiaS/LX9p6Vxn+Rt7c9AGJ6oX+zZy7BLqtiXjlYZytYDRIHP1S38VNGK+A13Ck57obXjmMEQchvD3eQrZUgYekW9yZkW4Pr1CMBPD0/Hjd6/VqwM+QvY37qJ1EMaU4ib1ulqN4wSMfJYYE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943947; c=relaxed/simple; bh=KSL2l9Nhr9MJtBx01zg+IQEWAc+m7BWeTGMVVVLcJCg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GtVUgfQHAzNjYCiS8U4HzKf/eMHw7BSwa6vKXwCKI6bIP+lUpq+AsRL8zaZYHMJt0UBMKiTEpEmmL4Tu44foNZOcWfMSv6fNwQ1tKIrakLqvM9Ql231w9BWTXwTkodiNdz5QsybpZT2XQyXqCZx64iAiA/MOU7AmWm60DB9Y2Rw= 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=R9lGI9yu; arc=none smtp.client-ip=185.246.85.4 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="R9lGI9yu" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id A0EC54E4201A; Fri, 9 Jan 2026 07:32:24 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 755ED60734; Fri, 9 Jan 2026 07:32:24 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 9C88A103C87E8; Fri, 9 Jan 2026 08:32:19 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1767943943; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=u2y2VqIJAA06H1k3L5bHNZmoiLt8l/HcFcKFwhue0ts=; b=R9lGI9yuKuRCVLqejCsbPo6uvVI4QMrNJR7s37pp2V9gRBFkHEVlU9BAS9VH1mH80ED1lq CO6/jZ8H6sDZRdxvw0SbYVQ5UfUt0RyCZP0zm9eF58tziBhxZ0HhPu/60A9xdlG5g0YuHE MkTfeIERWYHfWDA/rEkBg2h/k+IeO+dHREaoQdRK5hBNZ6VStXYZyYL1MSblClJS8l6ZmX arWj+84HshE3IJzyHLeOK+7R7aY0/upR/wMKxuJNPGvQuF9h89AS5xsMJ90y3GK9rpvgny bextH8LFCOa8lt0bQCa6xjk76zVCSB1jvVUIDYhw3esXwqhixu0LsfRxrw471Q== From: Luca Ceresoli Date: Fri, 09 Jan 2026 08:31:41 +0100 Subject: [PATCH v2 10/12] drm/bridge: samsung-dsim: samsung_dsim_host_attach: use a temporary variable for the next 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: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-10-8bad3ef90b9f@bootlin.com> References: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> In-Reply-To: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philippe Cornu , benjamin.gaignard@linaro.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Adrien Grassein , Liu Ying , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Inki Dae , Jagan Teki , Marek Szyprowski Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 In preparation to handle refcounting of the out_bridge, we need to ensure the out_bridge pointer contains either a valid bridge pointer or NULL, not an ERR_PTR. Otherwise calls such as drm_bridge_get/put() would try to redeference an ERR_PTR. As a preliminary cleanup, add a temporary local 'next_bridge' pointer and only copy it in dsi->out_bridge as late as possible, i.e. just before calling pdata->host_ops->attach() which uses it (only in the exynos driver). Not strictly needed, but for symmetry move the clearing of dsi->out_bridge in samsung_dsim_host_detach() to after pdata->host_ops->detach(). Signed-off-by: Luca Ceresoli Acked-by: Maxime Ripard Tested-by: Marek Szyprowski --- Changes in v2: - fix "pointer set too late" bug (NULL pointer deref in the exynos case) - *not* add Acked-by: Maxime as the patch has changed --- drivers/gpu/drm/bridge/samsung-dsim.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index eabc4c32f6ab..8dd058124e93 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -1886,6 +1886,7 @@ static int samsung_dsim_host_attach(struct mipi_dsi_h= ost *host, { struct samsung_dsim *dsi =3D host_to_dsi(host); const struct samsung_dsim_plat_data *pdata =3D dsi->plat_data; + struct drm_bridge *next_bridge; struct device *dev =3D dsi->dev; struct device_node *np =3D dev->of_node; struct device_node *remote; @@ -1924,17 +1925,17 @@ static int samsung_dsim_host_attach(struct mipi_dsi= _host *host, =20 panel =3D of_drm_find_panel(remote); if (!IS_ERR(panel)) { - dsi->out_bridge =3D devm_drm_panel_bridge_add(dev, panel); + next_bridge =3D devm_drm_panel_bridge_add(dev, panel); } else { - dsi->out_bridge =3D of_drm_find_bridge(remote); - if (!dsi->out_bridge) - dsi->out_bridge =3D ERR_PTR(-EINVAL); + next_bridge =3D of_drm_find_bridge(remote); + if (!next_bridge) + next_bridge =3D ERR_PTR(-EINVAL); } =20 of_node_put(remote); =20 - if (IS_ERR(dsi->out_bridge)) { - ret =3D PTR_ERR(dsi->out_bridge); + if (IS_ERR(next_bridge)) { + ret =3D PTR_ERR(next_bridge); DRM_DEV_ERROR(dev, "failed to find the bridge: %d\n", ret); return ret; } @@ -1958,10 +1959,13 @@ static int samsung_dsim_host_attach(struct mipi_dsi= _host *host, return ret; } =20 + // The next bridge can be used by host_ops->attach + dsi->out_bridge =3D next_bridge; + if (pdata->host_ops && pdata->host_ops->attach) { ret =3D pdata->host_ops->attach(dsi, device); if (ret) - return ret; + goto err_release_next_bridge; } =20 dsi->lanes =3D device->lanes; @@ -1969,6 +1973,10 @@ static int samsung_dsim_host_attach(struct mipi_dsi_= host *host, dsi->mode_flags =3D device->mode_flags; =20 return 0; + +err_release_next_bridge: + dsi->out_bridge =3D NULL; + return ret; } =20 static void samsung_dsim_unregister_te_irq(struct samsung_dsim *dsi) @@ -1985,11 +1993,11 @@ static int samsung_dsim_host_detach(struct mipi_dsi= _host *host, struct samsung_dsim *dsi =3D host_to_dsi(host); const struct samsung_dsim_plat_data *pdata =3D dsi->plat_data; =20 - dsi->out_bridge =3D NULL; - if (pdata->host_ops && pdata->host_ops->detach) pdata->host_ops->detach(dsi, device); =20 + dsi->out_bridge =3D NULL; + samsung_dsim_unregister_te_irq(dsi); =20 drm_bridge_remove(&dsi->bridge); --=20 2.52.0 From nobody Mon Feb 9 10:51:34 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 2BA1C2EDD52 for ; Fri, 9 Jan 2026 07:32:30 +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=1767943951; cv=none; b=HtpAiTQPCQFPgPpoeaoaY9s4SjhWbtV6WgWJN04aXc7fibsJtW5zMkhDtGOWLE6HvRa38Clh7ceBQBeb7F1vpL5pyJ2ifQ0chWvnmUH6FPl093bKl1yNtmqfpr34c33XoO4s6YNJIfWDm/MPDhmgxrv+GSmY/Mi40IgnfqSgDhY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943951; c=relaxed/simple; bh=3lRA5UXykJ8gdtcfDk2ULYkb67RbSv2uK7o452R+hCU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=c5IqZsxXk6SoeOO5HDzhF6aGnPCOMSRHgQ+zF0klxEvbaqXvLVilnl/8sLfKDZ5PH3QzVdBvjiAMIVgnT7EwQH70crRQJo8SGoUeJhOTodENbNUIObiuqEA6CmgYbCWYi3mM3kfCAR57dE7EVx+C2eVTZE2RH2xJpQe9NKRBJOY= 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=T3zepkq5; 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="T3zepkq5" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id E39F91A272E; Fri, 9 Jan 2026 07:32:28 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id B8A6F60734; Fri, 9 Jan 2026 07:32:28 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 9B3AB103C881F; Fri, 9 Jan 2026 08:32:23 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1767943947; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=0r3rD4W5ezQ0xu0xO1qKH5iyRy5OL3+U0stR4Z3O8ig=; b=T3zepkq5Q3grgigK4K0Sj9+UHJaN6C38rikLE0qRHsqh0jPLlAiUxN3wII9sFO8ZY0NeEt Up4k/h0NdXHy2Y3LgY3myRMF/TSOmw+zadFHqWuHRgeVJQyjUAtmnoEj5g2YHQ4uJFjT0+ h4Mj8cOiuhr6yRC/jTg3yvmXVVx95g6REKcZ2Syw2eNOv2v50oZoVewM+vxFq8lMRs9B7I CqbTcCEGuhdNsDuVKA6iVWYSnS2/WNatw99qcK6DJpqdVl2TlMpVkDVQbDUagWhgnctjPR qvMtyIL3l+mrIqzXa+SWj4UUDKg7vTV0sWOa2Qa+czBxdX7OSdRDIOoopBv+2A== From: Luca Ceresoli Date: Fri, 09 Jan 2026 08:31:42 +0100 Subject: [PATCH v2 11/12] drm/bridge: samsung-dsim: samsung_dsim_host_attach: don't use the bridge pointer as an error indicator 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: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-11-8bad3ef90b9f@bootlin.com> References: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> In-Reply-To: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philippe Cornu , benjamin.gaignard@linaro.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Adrien Grassein , Liu Ying , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Inki Dae , Jagan Teki , Marek Szyprowski Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 In preparation to handle refcounting of the out_bridge, we need to ensure the out_bridge pointer contains either a valid bridge pointer or NULL, not an ERR_PTR. Otherwise calls such as drm_bridge_get/put() would try to redeference an ERR_PTR. Stop using IS_ERR(next_bridge) as an indication of an error, and instead use the 'ret' integer. No functional change. Acked-by: Maxime Ripard Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/samsung-dsim.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index 8dd058124e93..afaa63c4d3f7 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -1891,7 +1891,7 @@ static int samsung_dsim_host_attach(struct mipi_dsi_h= ost *host, struct device_node *np =3D dev->of_node; struct device_node *remote; struct drm_panel *panel; - int ret; + int ret =3D 0; =20 /* * Devices can also be child nodes when we also control that device @@ -1926,16 +1926,17 @@ static int samsung_dsim_host_attach(struct mipi_dsi= _host *host, panel =3D of_drm_find_panel(remote); if (!IS_ERR(panel)) { next_bridge =3D devm_drm_panel_bridge_add(dev, panel); + if (IS_ERR(next_bridge)) + ret =3D PTR_ERR(next_bridge); } else { next_bridge =3D of_drm_find_bridge(remote); if (!next_bridge) - next_bridge =3D ERR_PTR(-EINVAL); + ret =3D -EINVAL; } =20 of_node_put(remote); =20 - if (IS_ERR(next_bridge)) { - ret =3D PTR_ERR(next_bridge); + if (ret) { DRM_DEV_ERROR(dev, "failed to find the bridge: %d\n", ret); return ret; } --=20 2.52.0 From nobody Mon Feb 9 10:51:34 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 899472F12CE for ; Fri, 9 Jan 2026 07:32:33 +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=1767943955; cv=none; b=N9n6/2ab5XbFFMS5IDUtdsJH16/8rkiM9StomcMZLT2125LgjlB6/OSr4r1/JYsWIr/+KtNTmL4h8NsPcMzkStQp6oXe75jQFHnuAMDOgPx8PstICgIBaMwE3p0tbVXvRRuLnkPouy+5NpVk14qjIueRbQznrMR3XK/WazA8N/8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767943955; c=relaxed/simple; bh=XzkXbCn59QgP9B7qVBSs5EAoHavS4pqXomKdIU7YJrs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=scI4LDnYeMGAoXQ1Fm1zmMMoss+8zH6eeRLanVdIFvetw9z1Pym5OSEdPlw1vIEAIEJGcS3u0mg2K378JewtIlu2jE9YYmrBWItLwq33DNY8p3MHYShSQGbsFwq5x/Hs6aphLFi9wkZPBAXuDKsQPRSmhHKTzCRx7uW+nlQTpPo= 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=s5o6j5fP; 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="s5o6j5fP" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 58CE91A272E; Fri, 9 Jan 2026 07:32:32 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 2D19360734; Fri, 9 Jan 2026 07:32:32 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id C1FEC103C8824; Fri, 9 Jan 2026 08:32:27 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1767943951; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=d9BhD/PZC1kxqwJeXLHP33WT7i5IxLGIjFxALfOr/gE=; b=s5o6j5fP4T/foYWtW4Uw4m4njZIpEH0ozWBO/b2efjL9bvHjFDDIctze0qRdssa1U0UTYs sZpGlMgEYhfruFllK8zx6bwqdNyJXgRoTiomC7S2DrfHeZROxJA6aMCgT/SfnZZKmebSm8 28hJ4ZLbka/uWjPOWcj5PHBaU0HE80z63rCEYmP23oVnAvwv3vArpXoU4axwp9wPlshlaZ jA2qcxCwlkcYACxsSeyFr4WPxkWmSD3Z4S69FkLVgKnCOV8OkPOhgaCNXsGVmOr5NroYUJ izCcPJkGm35gjctuq3qUhDh5toStD0hDjW9maICZy1MclLrltq9Eb08drAVfRg== From: Luca Ceresoli Date: Fri, 09 Jan 2026 08:31:43 +0100 Subject: [PATCH v2 12/12] drm/bridge: samsung-dsim: samsung_dsim_host_attach: convert to of_drm_find_and_get_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: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-12-8bad3ef90b9f@bootlin.com> References: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> In-Reply-To: <20260109-drm-bridge-alloc-getput-drm_of_find_bridge-2-v2-0-8bad3ef90b9f@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philippe Cornu , benjamin.gaignard@linaro.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Adrien Grassein , Liu Ying , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Inki Dae , Jagan Teki , Marek Szyprowski Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 of_drm_find_bridge() is deprecated. Move to its replacement of_drm_find_and_get_bridge() which gets a bridge reference, and ensure it is put when done. Also switch to the drm_bridge::next_bridge pointer. This needs to handle both cases: when of_drm_find_panel() succeeds and when it fails. In the 'else' case (i.e. when of_drm_find_panel() fails), just switch to of_drm_find_and_get_bridge() to ensure the bridge is not freed while in use in the function tail, when it is stored in dsi->bridge.next_bridge. In the 'then' case (i.e. when of_drm_find_panel() succeeds), devm_drm_panel_bridge_add() already increments the refcount using devres which ties the bridge allocation lifetime to the device lifetime, so we would not need to do anything. However to have the same behaviour in both branches take an additional reference here, so that the bridge needs to be put whichever branch is taken without more complicated logic. Ensure to clear the bridge pointer however, to avoid calling drm_bridge_put() on an ERR_PTR. Signed-off-by: Luca Ceresoli --- Changes in v2: - updated after "pointer set too late" fix inprevious patch - *not* add Acked-by: Maxime as the patch has changed --- drivers/gpu/drm/bridge/samsung-dsim.c | 20 +++++++++++++------- include/drm/bridge/samsung-dsim.h | 1 - 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index afaa63c4d3f7..1d85e706c74b 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -1828,7 +1828,7 @@ static int samsung_dsim_attach(struct drm_bridge *bri= dge, { struct samsung_dsim *dsi =3D bridge_to_dsi(bridge); =20 - return drm_bridge_attach(encoder, dsi->out_bridge, bridge, + return drm_bridge_attach(encoder, dsi->bridge.next_bridge, bridge, flags); } =20 @@ -1886,7 +1886,7 @@ static int samsung_dsim_host_attach(struct mipi_dsi_h= ost *host, { struct samsung_dsim *dsi =3D host_to_dsi(host); const struct samsung_dsim_plat_data *pdata =3D dsi->plat_data; - struct drm_bridge *next_bridge; + struct drm_bridge *next_bridge __free(drm_bridge_put) =3D NULL; struct device *dev =3D dsi->dev; struct device_node *np =3D dev->of_node; struct device_node *remote; @@ -1926,10 +1926,14 @@ static int samsung_dsim_host_attach(struct mipi_dsi= _host *host, panel =3D of_drm_find_panel(remote); if (!IS_ERR(panel)) { next_bridge =3D devm_drm_panel_bridge_add(dev, panel); - if (IS_ERR(next_bridge)) + if (IS_ERR(next_bridge)) { ret =3D PTR_ERR(next_bridge); + next_bridge =3D NULL; // Inhibit the cleanup action on an ERR_PTR + } else { + drm_bridge_get(next_bridge); + } } else { - next_bridge =3D of_drm_find_bridge(remote); + next_bridge =3D of_drm_find_and_get_bridge(remote); if (!next_bridge) ret =3D -EINVAL; } @@ -1961,7 +1965,7 @@ static int samsung_dsim_host_attach(struct mipi_dsi_h= ost *host, } =20 // The next bridge can be used by host_ops->attach - dsi->out_bridge =3D next_bridge; + dsi->bridge.next_bridge =3D drm_bridge_get(next_bridge); =20 if (pdata->host_ops && pdata->host_ops->attach) { ret =3D pdata->host_ops->attach(dsi, device); @@ -1976,7 +1980,8 @@ static int samsung_dsim_host_attach(struct mipi_dsi_h= ost *host, return 0; =20 err_release_next_bridge: - dsi->out_bridge =3D NULL; + drm_bridge_put(dsi->bridge.next_bridge); + dsi->bridge.next_bridge =3D NULL; return ret; } =20 @@ -1997,7 +2002,8 @@ static int samsung_dsim_host_detach(struct mipi_dsi_h= ost *host, if (pdata->host_ops && pdata->host_ops->detach) pdata->host_ops->detach(dsi, device); =20 - dsi->out_bridge =3D NULL; + drm_bridge_put(dsi->bridge.next_bridge); + dsi->bridge.next_bridge =3D NULL; =20 samsung_dsim_unregister_te_irq(dsi); =20 diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung= -dsim.h index 31d7ed589233..03005e474704 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -100,7 +100,6 @@ struct samsung_dsim_plat_data { struct samsung_dsim { struct mipi_dsi_host dsi_host; struct drm_bridge bridge; - struct drm_bridge *out_bridge; struct device *dev; struct drm_display_mode mode; =20 --=20 2.52.0