From patchwork Tue Jan 10 12:00:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 90684 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp579440qgi; Tue, 10 Jan 2017 04:00:40 -0800 (PST) X-Received: by 10.99.95.151 with SMTP id t145mr3509293pgb.75.1484049639992; Tue, 10 Jan 2017 04:00:39 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w28si1931554pge.203.2017.01.10.04.00.39; Tue, 10 Jan 2017 04:00:39 -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 S1031252AbdAJMAc (ORCPT + 25 others); Tue, 10 Jan 2017 07:00:32 -0500 Received: from foss.arm.com ([217.140.101.70]:50478 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1030876AbdAJMA3 (ORCPT ); Tue, 10 Jan 2017 07:00:29 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3F5C8707; Tue, 10 Jan 2017 04:00:29 -0800 (PST) Received: from e107155-lin.cambridge.arm.com (unknown [10.1.210.28]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id CB21C3F242; Tue, 10 Jan 2017 04:00:27 -0800 (PST) From: Sudeep Holla To: linux-arm-kernel@lists.infradead.org Cc: Sudeep Holla , Rob Herring , Catalin Marinas , Will Deacon , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Tan Xiaojun , Mark Rutland Subject: [PATCH 1/2][UPDATE] of: base: add support to get the number of cache levels Date: Tue, 10 Jan 2017 12:00:16 +0000 Message-Id: <1484049616-22388-1-git-send-email-sudeep.holla@arm.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1484048479-19767-1-git-send-email-sudeep.holla@arm.com> References: <1484048479-19767-1-git-send-email-sudeep.holla@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It is useful to have helper function just to get the number of cache levels for a given logical cpu. This patch adds the support for the same. It will be used on ARM64 platform where the device tree provides the information for the additional non-architected/transparent/external last level caches that are not integrated with the processors. Cc: Rob Herring Cc: Mark Rutland Signed-off-by: Sudeep Holla --- drivers/of/base.c | 23 +++++++++++++++++++++++ include/linux/of.h | 1 + 2 files changed, 24 insertions(+) -- 2.7.4 diff --git a/drivers/of/base.c b/drivers/of/base.c index d4bea3c797d6..80e557eca858 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -2268,6 +2269,28 @@ struct device_node *of_find_next_cache_node(const struct device_node *np) } /** + * of_count_cache_levels - Find the total number of cache levels for the + * given logical cpu + * + * @cpu: cpu number(logical index) for which cache levels is being counted + * + * Returns the total number of cache levels for the given logical cpu + */ +int of_count_cache_levels(unsigned int cpu) +{ + int level = 0; + struct device_node *np = of_cpu_device_node_get(cpu); + + while (np) { + level++; + of_node_put(np); + np = of_find_next_cache_node(np); + } + + return level; +} + +/** * of_graph_parse_endpoint() - parse common endpoint node properties * @node: pointer to endpoint device_node * @endpoint: pointer to the OF endpoint data structure diff --git a/include/linux/of.h b/include/linux/of.h index d72f01009297..c8597ae71ff3 100644 --- a/include/linux/of.h +++ b/include/linux/of.h @@ -280,6 +280,7 @@ extern struct device_node *of_get_child_by_name(const struct device_node *node, /* cache lookup */ extern struct device_node *of_find_next_cache_node(const struct device_node *); +extern int of_count_cache_levels(unsigned int cpu); extern struct device_node *of_find_node_with_property( struct device_node *from, const char *prop_name);