Received: by 2002:a05:6602:2086:0:0:0:0 with SMTP id a6csp4499106ioa; Wed, 27 Apr 2022 05:17:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw1EjOqu4X6Q5SkZBP5F52fBbvWP+4FVJs6IJxXKR1wy9+lGRt32GRXyDSbY6DE7CeVRGt5 X-Received: by 2002:a05:6a00:84c:b0:50d:4753:780 with SMTP id q12-20020a056a00084c00b0050d47530780mr13064826pfk.74.1651061825497; Wed, 27 Apr 2022 05:17:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651061825; cv=none; d=google.com; s=arc-20160816; b=yrpLI8xi5h+CQOnfpEIihTvLeiN5S3kGEjGShd4sZUagMsQ4yppLVxUQvbfyG23PwP 8Jy1J82+qWIp/V8JsCbbKJ6/TdYW8mw+qI3NrwjmRcPL2omHlMAlHi/7KuDobn1gOZt2 DBrBDfEg95GT67qU7HdeRQranpKjY92QkdO6Q+idaWYBqAuUmsPeQ77TZtO441tTv+tJ pvB+RC3XROQLdsNJeuSOV62Vc/VtKHNDu91i33PpQF1sWoRYngDbFLJEZjyXfCo31JJX YZv6IButCKENM9kGLznhMOy+ILY0PKOrpmjGGz2Wq4WtbuzCv8P+Rvp2Q/1dRt+ohNfL GK7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=FrT1A6ut1uHKtiSP9a1wbP1BfO/8mxv8g9Z5KDxbsgg=; b=bDgNhP8QU01ScybQooA3+aMuyP63bnmwlpWpMRv61vdwODogxIAEvUAbIt08itXBYK 1hgmCtbZh6TtIxwoDgGbR70YuIXqile7veHy7T049bgx/iaQi97DyNyaoqdMDfprQQde ui6nOLThqKf3ocg4RZkjSp86H8xvHcvjMPX4qhf1v8Hl/c1J794lKV0xl1tqG/qDT1zM EvHGxQ9cn8+802FbaJQTfIZyR9G8JDZ20P3REY5eYzHtTfB2UHWU8Gy12sWYEZrJgyox a+42inlI6S7yNnglQONV8SrTcTE1ElFncrNcwgt2aNeGSueIy7nD1X+65Iin1FPajM5t kZZw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=D9kCHFcz; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id u16-20020a17090341d000b00156d87887eesi1633399ple.83.2022.04.27.05.17.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Apr 2022 05:17:05 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=D9kCHFcz; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id E7CE32CCB1; Wed, 27 Apr 2022 04:52:52 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233199AbiD0Lz6 (ORCPT + 99 others); Wed, 27 Apr 2022 07:55:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60634 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233170AbiD0Lz4 (ORCPT ); Wed, 27 Apr 2022 07:55:56 -0400 Received: from mail-ed1-x532.google.com (mail-ed1-x532.google.com [IPv6:2a00:1450:4864:20::532]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AF2522ACB for ; Wed, 27 Apr 2022 04:52:44 -0700 (PDT) Received: by mail-ed1-x532.google.com with SMTP id a1so1650875edt.3 for ; Wed, 27 Apr 2022 04:52:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=FrT1A6ut1uHKtiSP9a1wbP1BfO/8mxv8g9Z5KDxbsgg=; b=D9kCHFcz6/5eS56jF4XO7+B8nsp/FXL//Gs7ZpwFJ3ITljvLViSfef0c1agsVezvvb TAoBp12GBo4zOFJ3Z1XOQWKGN/j4dDEFGn6C+dMW7e3K+adHJVTG7+gZKXbxjXswHIpK 4zmg9dTBOqNWSubqRmBalWlXPzCfv1BVk54lc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=FrT1A6ut1uHKtiSP9a1wbP1BfO/8mxv8g9Z5KDxbsgg=; b=YXls2kPy545pnIYZO19v7JmdNC88LvwV1X+wWJ6TzY7kO2/AQbJ5cIXPNCqklY4bI/ ssGZs5wqygd+tXVKoWRLvGEiRbXaY1Hsuk13E+jfJamVB22Nb1S0i0x/JIQTvVIeFfme lczQuoXpufxSiJwkgUfMxy5ZOR9vQ50HU6OtCK2+SHrKwvoG69GUiNc6Bze0GAw/BSxN NlTw+imfn6FfYUSLliPILXgUPGg72GvieDl/fzCoyS0PSnlgRIB7s7vUfcT26cNxEpUP jPgOTJilKSSP8iCRYyVVA7jz0cRp50E1m+sfG1w6ADEH+vYOLWXSTqY7nz4Ev8t7a+yA r8Wg== X-Gm-Message-State: AOAM533CGthHmznAFYG5mFY53mHwc/m6CFn9XKJwcvXOfe9E20I20EFs /tHrXh6gqarVhVurNtxSMdB0SXdmnnNxbnqAwp9yNg== X-Received: by 2002:a05:6402:c9c:b0:425:d5e0:b69 with SMTP id cm28-20020a0564020c9c00b00425d5e00b69mr21314156edb.271.1651060363213; Wed, 27 Apr 2022 04:52:43 -0700 (PDT) MIME-Version: 1.0 References: <20220420231230.58499-1-bjorn.andersson@linaro.org> <20220420231230.58499-2-bjorn.andersson@linaro.org> <20220421082358.ivpmtak3ednvddrc@houat> In-Reply-To: From: Jagan Teki Date: Wed, 27 Apr 2022 17:22:32 +0530 Message-ID: Subject: Re: [PATCH 2/2] Revert "drm: of: Lookup if child node has panel or bridge" To: Maxime Ripard , Bjorn Andersson , Laurent Pinchart , Paul Kocialkowski , Michael Nazzareno Trimarchi Cc: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Daniel Vetter , Thierry Reding , Rob Clark , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Linus Walleij , Marek Szyprowski , Robert Foss Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Apr 27, 2022 at 12:29 PM Jagan Teki wrote: > > On Thu, Apr 21, 2022 at 1:54 PM Maxime Ripard wrote: > > > > On Thu, Apr 21, 2022 at 01:15:54PM +0530, Jagan Teki wrote: > > > + Linus > > > + Marek > > > + Laurent > > > + Robert > > > > > > On Thu, Apr 21, 2022 at 4:40 AM Bjorn Andersson > > > wrote: > > > > > > > > Commit '80253168dbfd ("drm: of: Lookup if child node has panel or > > > > bridge")' attempted to simplify the case of expressing a simple panel > > > > under a DSI controller, by assuming that the first non-graph child node > > > > was a panel or bridge. > > > > > > > > Unfortunately for non-trivial cases the first child node might not be a > > > > panel or bridge. Examples of this can be a aux-bus in the case of > > > > DisplayPort, or an opp-table represented before the panel node. > > > > > > > > In these cases the reverted commit prevents the caller from ever finding > > > > a reference to the panel. > > > > > > > > This reverts commit '80253168dbfd ("drm: of: Lookup if child node has > > > > panel or bridge")', in favor of using an explicit graph reference to the > > > > panel in the trivial case as well. > > > > > > This eventually breaks many child-based devm_drm_of_get_bridge > > > switched drivers. Do you have any suggestions on how to proceed to > > > succeed in those use cases as well? > > > > I guess we could create a new helper for those, like > > devm_drm_of_get_bridge_with_panel, or something. > > I think using the same existing helper and updating child support is > make sense, as there is a possibility to use the same host for child > and OF-graph bindings. > > I can see two possible solutions (as of now) > > 1. adding "dcs-child-type" bindings for child-based panel or bridge > 2. iterate child and skip those nodes other than panel or bridge. or > iterate sub-child to find it has a panel or bridge-like aux-bus (which > is indeed hard as this configuration seems not 'standard' i think ) > > Any inputs? Checking aux-bus with the sub-node panel can be a possible check to look at it, any comments? --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -244,6 +244,25 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, if (panel) *panel = NULL; + /** + * Devices can also be child nodes when we also control that device + * through the upstream device (ie, MIPI-DCS for a MIPI-DSI device). + * + * Lookup for a child node of the given parent that isn't either port + * or ports. + */ + for_each_available_child_of_node(np, remote) { + if (of_node_name_eq(remote, "port") || + of_node_name_eq(remote, "ports")) + continue; + + if (!(of_node_name_eq(remote, "aux-bus") && + of_get_child_by_name(remote, "panel"))) + continue; + + goto of_find_panel_or_bridge; + } + /* * of_graph_get_remote_node() produces a noisy error message if port * node isn't found and the absence of the port is a legit case here, @@ -254,6 +273,8 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, return -ENODEV; remote = of_graph_get_remote_node(np, port, endpoint); + +of_find_panel_or_bridge: if (!remote) return -ENODEV; Jagan.