Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2825173ybl; Sun, 8 Dec 2019 01:32:51 -0800 (PST) X-Google-Smtp-Source: APXvYqy7EUSZ48syodo9Us4iX/ec78NsvyBfEBLFT8Qz4ait0+W8cngVoQohvQxBRcVbzpmqZVfG X-Received: by 2002:a05:6808:658:: with SMTP id z24mr20027801oih.91.1575797570968; Sun, 08 Dec 2019 01:32:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575797570; cv=none; d=google.com; s=arc-20160816; b=0Lje999W120zqRUVMLBxTvfY3c1OHgGMf8KfrG/1WUlrUmbxNAXBi+tIPMvvul4yBd GissSwKywy6H3aOJN/BTcE7JJ01Hi7Boladz1AAcVMXC+yt4mHePSiKmEku99sI8V3MJ cw5jF45Iv+AQWBsKWTX18P1G3goZHsxbBuNoaayV6hh3UKAKN8RUNy2gj3DYzO1ODLA2 rUlV1y5HWS78kBEGwshXrTDxzMx/kXp5uiCBp20FCT6E/cqm2vA8O1G6Cu/FqMPQZi8d J+fFYSHwoD+2a3FojxPimM20w9WcW7cAsmG/vCAT/QPA0PWxbtQcFrNhZ6RuoLEF6CMr kwNQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=JaX5yJFCTKSDqVs1iN0TxE7NSgzC/sW4l5mRxc/wOoA=; b=WNcIboK3VqrfdpJjfUS1HiHwDIAI1pgyTth9rRkIcC4bDAierSNq4VsyWpzPy9+feJ VlIFjx/fYv4j/KHYKAf4Wf8QjgXhSXeUZ2u4wji2RLXE5Br3bzLoE1N48VZbyXwKjB7a SYIDMZnRorK5nGuLr2/AXAgVEGBbFCjU98bUIwrx6r7P3cKTW55KgKFiZU/6FiszWcZO XgdwQQ4eawieHMc1FhbM9CI5m5qEr6M7Z6hL/caSDah6n4CNPylQkljh/5bpcsOzGBPa q8b87hdjauxySBrzCrHLKWIMgLQgk4E9YAv/xgtXXrcdF6k+v2AtC7ZcIiOfkcD1qGcs ThOA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d2si10557898oth.267.2019.12.08.01.32.39; Sun, 08 Dec 2019 01:32:50 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726465AbfLHJb6 (ORCPT + 99 others); Sun, 8 Dec 2019 04:31:58 -0500 Received: from asavdk4.altibox.net ([109.247.116.15]:58452 "EHLO asavdk4.altibox.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726387AbfLHJb5 (ORCPT ); Sun, 8 Dec 2019 04:31:57 -0500 Received: from ravnborg.org (unknown [158.248.194.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by asavdk4.altibox.net (Postfix) with ESMTPS id C4ED58063C; Sun, 8 Dec 2019 10:31:51 +0100 (CET) Date: Sun, 8 Dec 2019 10:31:50 +0100 From: Sam Ravnborg To: Rob Clark Cc: dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, aarch64-laptops@lists.linaro.org, Rob Clark , Jeffrey Hugo , open list , Bjorn Andersson , Vasily Khoruzhick , David Airlie , Laurent Pinchart , Sean Paul Subject: Re: [PATCH 2/4] drm/of: add support to find any enabled endpoint Message-ID: <20191208093150.GA21141@ravnborg.org> References: <20191207203553.286017-1-robdclark@gmail.com> <20191207203553.286017-3-robdclark@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20191207203553.286017-3-robdclark@gmail.com> User-Agent: Mutt/1.10.1 (2018-07-13) X-CMAE-Score: 0 X-CMAE-Analysis: v=2.3 cv=VcLZwmh9 c=1 sm=1 tr=0 a=UWs3HLbX/2nnQ3s7vZ42gw==:117 a=UWs3HLbX/2nnQ3s7vZ42gw==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=kj9zAlcOel0A:10 a=cm27Pg_UAAAA:8 a=e5mUnYsNAAAA:8 a=AkfTbbr1AOnX2gBTQ4oA:9 a=CjuIK1q_8ugA:10 a=xmb-EsYY8bH0VWELuYED:22 a=Vxmtnl_E_bksehYqCbjh:22 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Rob. Patch looks good, one small improvement proposal. On Sat, Dec 07, 2019 at 12:35:51PM -0800, Rob Clark wrote: > From: Rob Clark > > To handle the case where there are multiple panel endpoints, only one of > which is enabled/installed, add support for a wildcard endpoint value to > request finding whichever endpoint is enabled. > > Signed-off-by: Rob Clark > --- > drivers/gpu/drm/drm_of.c | 41 +++++++++++++++++++++++++++++++++++++++- > 1 file changed, 40 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c > index 0ca58803ba46..2baf44e401b8 100644 > --- a/drivers/gpu/drm/drm_of.c > +++ b/drivers/gpu/drm/drm_of.c > @@ -219,11 +219,44 @@ int drm_of_encoder_active_endpoint(struct device_node *node, > } > EXPORT_SYMBOL_GPL(drm_of_encoder_active_endpoint); > > +static int find_enabled_endpoint(const struct device_node *node, u32 port) > +{ > + struct device_node *endpoint_node, *remote; > + u32 endpoint = 0; > + > + for (endpoint = 0; ; endpoint++) { > + endpoint_node = of_graph_get_endpoint_by_regs(node, port, endpoint); > + if (!endpoint_node) { > + pr_debug("No more endpoints!\n"); > + return -ENODEV; > + } > + > + remote = of_graph_get_remote_port_parent(endpoint_node); > + of_node_put(endpoint_node); > + if (!remote) { > + pr_debug("no valid remote node\n"); > + continue; > + } > + > + if (!of_device_is_available(remote)) { > + pr_debug("not available for remote node\n"); > + of_node_put(remote); > + continue; > + } > + > + pr_debug("found enabled endpoint %d for %s\n", endpoint, remote->name); > + of_node_put(remote); > + return endpoint; > + } > + > + return -ENODEV; > +} This function seems pretty generic. Should this be part of drivers/of/property.c - as others may have the same need? > + > /** > * drm_of_find_panel_or_bridge - return connected panel or bridge device > * @np: device tree node containing encoder output ports > * @port: port in the device tree node > - * @endpoint: endpoint in the device tree node > + * @endpoint: endpoint in the device tree node, or -1 to find an enabled endpoint > * @panel: pointer to hold returned drm_panel > * @bridge: pointer to hold returned drm_bridge Introducing a define would make it easier to use this function in the right way. For example: #define OF_ENDPOINT_FIRST -1 Then we would see this code in the user side: + ret = drm_of_find_panel_or_bridge(pdata->dev->of_node, 1, OF_ENDPOINT_FIRST, &pdata->panel, NULL); Or something like this. Sam > * > @@ -246,6 +279,12 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, > if (panel) > *panel = NULL; > > + if (endpoint == -1) { > + endpoint = find_enabled_endpoint(np, port); > + if (endpoint < 0) > + return endpoint; > + } > + > remote = of_graph_get_remote_node(np, port, endpoint); > if (!remote) > return -ENODEV; > -- > 2.23.0 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel