From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 ACF1F18A6CF; Mon, 4 May 2026 15:22:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777908152; cv=none; b=LIVEZfpDX1MRsL9Jpcg/JmabHWApsZaMUDcHr6cB/irLldxWp3naFUI6oPpxfQ9hZViCDo398F5pHMnFVkDDF9eagiQ3WoMIZbA3Cj4DqViu0sIdwQtySCKR0DjBhruaVGipM2zHiNnQ+sA6/t5wk7qzbZ9Yv2AU+/vxykXy/ic= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777908152; c=relaxed/simple; bh=zqH6L+EG9wUTO7Qoyz4neBCPa6T/Ac/tjYvnTvOAB7Y=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=lZtdD8bdcVGcgIRYH7s2qF4xWvQWVFCy/xxxmN1Ci7W+0gez/5+zNVBF5XeqKSzc2EM3LDvkE0403OgA/Rk2WdfrYT+BitRB05hXglhTm4lA5ysQ8Jg93szgjD8GWnMA5W1/LPPYXS8MSlSvSzmrEBzAECLAt0BbWSq2OATqS58= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=GHXtwh5T; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="GHXtwh5T" Received: from killaraus.ideasonboard.com (2001-14ba-703d-e500--2a1.rev.dnainternet.fi [IPv6:2001:14ba:703d:e500::2a1]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 183FC175; Mon, 4 May 2026 17:22:26 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1777908146; bh=zqH6L+EG9wUTO7Qoyz4neBCPa6T/Ac/tjYvnTvOAB7Y=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=GHXtwh5T5BDC8Q9lFPK/5JEuWFjkhO2o8t8eJUO5EnQigc23poa+JjvgYhTAKT0fZ 2WAfqiKfoaQQcpeFgC0FcTCWmZWo3te0QcHcWFshgYdHWgitgFsqCdYFkqpJQIapQY LQ0xWLVZ2ygWK/cNBfWeyY0dm7tXSECuDWeQGXVI= Date: Mon, 4 May 2026 18:22:26 +0300 From: Laurent Pinchart To: Luca Ceresoli Cc: Andrzej Hajda , Neil Armstrong , Robert Foss , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek , Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Biju Das , Dmitry Baryshkov Subject: Re: [PATCH v4 08/11] drm/bridge: adv7511: switch to of_drm_get_bridge_by_endpoint() Message-ID: <20260504152226.GB1455860@killaraus.ideasonboard.com> References: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-8-b578c3daaf10@bootlin.com> 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-Disposition: inline In-Reply-To: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-8-b578c3daaf10@bootlin.com> Hi Luca, Thank you for the patch. On Mon, May 04, 2026 at 12:45:11PM +0200, Luca Ceresoli wrote: > This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the > @panel parameter, thus using a reduced feature set of that function. > Replace this call with the simpler of_drm_get_bridge_by_endpoint(). > > Since of_drm_get_bridge_by_endpoint() increases the refcount of the > returned bridge, ensure it is put on removal. To achieve this, instead of > adding an explicit drm_bridge_put(), migrate to the bridge::next_bridge > pointer which is automatically put when the bridge is eventually freed. > > Tested-by: Biju Das > Reviewed-by: Dmitry Baryshkov > Signed-off-by: Luca Ceresoli Reviewed-by: Laurent Pinchart > --- > Changes in v3: > - fix ERR_PTR deref when -ENODEV is returned > --- > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 - > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 15 +++++++++------ > 2 files changed, 9 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h > index 8be7266fd4f4..12c95198d9a4 100644 > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h > @@ -354,7 +354,6 @@ struct adv7511 { > enum drm_connector_status status; > bool powered; > > - struct drm_bridge *next_bridge; > struct drm_display_mode curr_mode; > > unsigned int f_tmds; > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c > index f318080f1139..8304978535e4 100644 > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c > @@ -849,8 +849,8 @@ static int adv7511_bridge_attach(struct drm_bridge *bridge, > struct adv7511 *adv = bridge_to_adv7511(bridge); > int ret = 0; > > - if (adv->next_bridge) { > - ret = drm_bridge_attach(encoder, adv->next_bridge, bridge, > + if (adv->bridge.next_bridge) { > + ret = drm_bridge_attach(encoder, adv->bridge.next_bridge, bridge, > flags | DRM_BRIDGE_ATTACH_NO_CONNECTOR); > if (ret) > return ret; > @@ -1249,10 +1249,13 @@ static int adv7511_probe(struct i2c_client *i2c) > > memset(&link_config, 0, sizeof(link_config)); > > - ret = drm_of_find_panel_or_bridge(dev->of_node, 1, -1, NULL, > - &adv7511->next_bridge); > - if (ret && ret != -ENODEV) > - return ret; > + adv7511->bridge.next_bridge = of_drm_get_bridge_by_endpoint(dev->of_node, 1, -1); > + if (IS_ERR(adv7511->bridge.next_bridge)) { > + if (PTR_ERR(adv7511->bridge.next_bridge) == -ENODEV) > + adv7511->bridge.next_bridge = NULL; > + else > + return PTR_ERR(adv7511->bridge.next_bridge); > + } > > if (adv7511->info->link_config) > ret = adv7511_parse_dt(dev->of_node, &link_config); -- Regards, Laurent Pinchart