From patchwork Tue Jan 10 11:41:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 90681 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp572836qgi; Tue, 10 Jan 2017 03:41:53 -0800 (PST) X-Received: by 10.84.217.221 with SMTP id d29mr4348961plj.47.1484048513470; Tue, 10 Jan 2017 03:41:53 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f12si1903205pfe.93.2017.01.10.03.41.53; Tue, 10 Jan 2017 03:41:53 -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 S966929AbdAJLlr (ORCPT + 25 others); Tue, 10 Jan 2017 06:41:47 -0500 Received: from foss.arm.com ([217.140.101.70]:49788 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758906AbdAJLln (ORCPT ); Tue, 10 Jan 2017 06:41:43 -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 7F8F7707; Tue, 10 Jan 2017 03:41:32 -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 17E963F3D6; Tue, 10 Jan 2017 03:41:30 -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] of: base: add support to get the number of cache levels Date: Tue, 10 Jan 2017 11:41:18 +0000 Message-Id: <1484048479-19767-1-git-send-email-sudeep.holla@arm.com> X-Mailer: git-send-email 2.7.4 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 | 22 ++++++++++++++++++++++ include/linux/of.h | 1 + 2 files changed, 23 insertions(+) -- 2.7.4 diff --git a/drivers/of/base.c b/drivers/of/base.c index d4bea3c797d6..f7a2b47b3c77 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -2268,6 +2268,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);