Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp181833pxb; Wed, 4 Nov 2020 18:57:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJziNOwrsQnOP2It1DB4XtdRWVs1Op8jWNyL2UHSc/ydWRmGETUAYhtXYdsxIDIjBbxW+6Fu X-Received: by 2002:a17:906:a090:: with SMTP id q16mr258488ejy.220.1604545073112; Wed, 04 Nov 2020 18:57:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604545073; cv=none; d=google.com; s=arc-20160816; b=q5fHxHOSdM55NM623sTL/sIefk/M3q1XurO6tX0zy1Bvzw1iyMgJqOUF6ZfWYr9gjz yWZ5Aqksb1ZS5OIKZgMYPzURI6pfwh1hZlqhzy/6QZIn6aXTlpHrtQZp+HidFrLpyreT FHhfmlkAsSPvdVlAQW18H2fRkQbzakk7p+QRI2r8zbrJqFxivY/OVzk4Z87j1gzto+E4 97oxP9qBK7z4xt1ivAxsRvnUep+/lIvUZnKIiVr9vy48C7msmP7y1OczFlJ1z6kuxZn8 fy3zWjwoffUAO4EVsySP9N4MBIMWVHAhrUMsWKNj6VLRYxTSmpy+Eay6ubyP++mZJmkA Me0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:sender:dkim-signature; bh=HXkyO8z8X08APZbARCQP/2vgXX6ay0o50V4fzW8aU6s=; b=xIiXHsdMhsVbfpKZRxYe4voH6dOZFZgtUhFPlZV1CKcal1dS8FtvkbjF/dghv5GXL7 nEtExbeRFixNtc6wCv/NpMbAd/zQFNA8OUPx1rKxfBuJOy5hTG3iGKYWvFHPMOjjlPqe g9bltUVsws1w9cYBjChA24NaZZOmL8ZisWjrlLMg0x0/0ADRBqTUoiN4bIU7bulvu4pK g2No+wZnY+p3o9W9iRAQkCKofM6K6LZrZ0akleEfgJ92OoV8Z/mXYiqlyCtoiLC9dwt/ ShnDcgU8ct6vBj4YNd9Poaa22TT1Vpxwyon7FC9zqeKkBlVoLB1sXvAWN6AjCPDeLvMS HzsA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="I0A/S4Q3"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h16si157738ejd.579.2020.11.04.18.57.27; Wed, 04 Nov 2020 18:57:53 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="I0A/S4Q3"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733111AbgKDXYn (ORCPT + 99 others); Wed, 4 Nov 2020 18:24:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44976 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733055AbgKDXYc (ORCPT ); Wed, 4 Nov 2020 18:24:32 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A7272C0613D2 for ; Wed, 4 Nov 2020 15:24:30 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id u13so400833ybk.9 for ; Wed, 04 Nov 2020 15:24:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:in-reply-to:message-id:mime-version:references:subject :from:to:cc; bh=HXkyO8z8X08APZbARCQP/2vgXX6ay0o50V4fzW8aU6s=; b=I0A/S4Q3YJdLVtlrppRCljyO3Nbqezxq71d58jzcyH2drf1IpsBN1WngrsFLfhJTk9 cKkqvnL+/3U4DIuWdfhDuhwsYLFWPNF78W/a6aonqyWMtVdjVAR7eB5kwpqK0KAOOL6N ZbkOjr3Nl/48a42VD9DUcuCEqznCBSw27YQ2GuEzLPSJyfF4DzgTnGjVGKpzio+WjoB4 ELOqLtaqJ/80inf1AL67t7zsC6/XrE5aL/v/W5ctpfs5PGfpoRpzSWRYGakuX3vfISnD ktU9aHTXftzitdhU+WBUAe3RXa6WeH0zPY4VncGHbbLiZmL5g+xNvv5bSAD6wYtz7yVh tnnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=HXkyO8z8X08APZbARCQP/2vgXX6ay0o50V4fzW8aU6s=; b=Yfm3o6p+W3u6rjRT+e5tp9pPDveUHRYeaUNKCh1Y7Oy9mPKdpm3OeRMRqZfBHiFdNO XaUldkJF5FnkeFRvK1zEsL0inKjUmB5x/wiyDd+Uv3+39ucBN8We05h883fhQWwERGo7 EYRxW9NTrZOMnv4FDbDQ+qo3kCSGCD5bnb3DGs6VQK2MKIv+ByeQ05dj5AZe4od/HHj1 wFsPtWfa6hpO6nJsiS5muV+H3KABedZBzzNmIhnbAbJqNE667Ba1uB1YErEmYlPKJL+w mAoCr2D8OK99/IXA1G5W46iYnCR8ePuMoJyTFd/isRK7iz1a7PTOi32HAH6+cjS3vXec lbGA== X-Gm-Message-State: AOAM531MKFyuSyQqbYk5ZdED74ccEQLSzaaxPxMumAjYSeYgNBFG7452 hAFuRfCX/MyazHX/NQasbRy583/o/jvVxgA= Sender: "saravanak via sendgmr" X-Received: from saravanak.san.corp.google.com ([2620:15c:2d:3:7220:84ff:fe09:fedc]) (user=saravanak job=sendgmr) by 2002:a25:774f:: with SMTP id s76mr259364ybc.235.1604532269897; Wed, 04 Nov 2020 15:24:29 -0800 (PST) Date: Wed, 4 Nov 2020 15:23:49 -0800 In-Reply-To: <20201104232356.4038506-1-saravanak@google.com> Message-Id: <20201104232356.4038506-13-saravanak@google.com> Mime-Version: 1.0 References: <20201104232356.4038506-1-saravanak@google.com> X-Mailer: git-send-email 2.29.1.341.ge80a0c044ae-goog Subject: [PATCH v1 12/18] driver core: Add fw_devlink_parse_fwtree() From: Saravana Kannan To: "Rafael J. Wysocki" , "Rafael J. Wysocki" , Len Brown , Greg Kroah-Hartman , Ard Biesheuvel , Rob Herring , Frank Rowand , Marc Zyngier , Thomas Gleixner Cc: Saravana Kannan , Tomi Valkeinen , Laurent Pinchart , Grygorii Strashko , kernel-team@android.com, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-efi@vger.kernel.org, devicetree@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This function is a wrapper around fwnode_operations.add_links(). This function parses each node in a fwnode tree and create fwnode links for each of those nodes. The information for creating the fwnode links (the supplier and consumer fwnode) is obtained by parsing the properties in each of the fwnodes. This function also ensures that no fwnode is parsed more than once by marking the fwnodes as parsed. Signed-off-by: Saravana Kannan --- drivers/base/core.c | 19 +++++++++++++++++++ include/linux/fwnode.h | 3 +++ 2 files changed, 22 insertions(+) diff --git a/drivers/base/core.c b/drivers/base/core.c index 4a0907574646..ee28d8c7ee85 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -1543,6 +1543,25 @@ static bool fw_devlink_is_permissive(void) return fw_devlink_flags == DL_FLAG_SYNC_STATE_ONLY; } +static void fw_devlink_parse_fwnode(struct fwnode_handle *fwnode) +{ + if (fwnode->flags & FWNODE_FLAG_LINKS_ADDED) + return; + + fwnode_call_int_op(fwnode, add_links, NULL); + fwnode->flags |= FWNODE_FLAG_LINKS_ADDED; +} + +static void fw_devlink_parse_fwtree(struct fwnode_handle *fwnode) +{ + struct fwnode_handle *child = NULL; + + fw_devlink_parse_fwnode(fwnode); + + while ((child = fwnode_get_next_available_child_node(fwnode, child))) + fw_devlink_parse_fwtree(child); +} + static void fw_devlink_link_device(struct device *dev) { int fw_ret; diff --git a/include/linux/fwnode.h b/include/linux/fwnode.h index ec02e1e939cc..9aaf9e4f3994 100644 --- a/include/linux/fwnode.h +++ b/include/linux/fwnode.h @@ -15,12 +15,15 @@ struct fwnode_operations; struct device; +#define FWNODE_FLAG_LINKS_ADDED BIT(0) + struct fwnode_handle { struct fwnode_handle *secondary; const struct fwnode_operations *ops; struct device *dev; struct list_head suppliers; struct list_head consumers; + u32 flags; }; struct fwnode_link { -- 2.29.1.341.ge80a0c044ae-goog