linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
To: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org
Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Anton Blanchard <anton@samba.org>,
	Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>,
	Anshuman Khandual <khandual@linux.vnet.ibm.com>,
	Stephane Eranian <eranian@google.com>
Subject: [PATCH v5 3/7] powerpc/powernv: Nest PMU detection and device tree parser
Date: Thu, 16 Jul 2015 16:43:22 +0530	[thread overview]
Message-ID: <1437045206-7491-4-git-send-email-maddy@linux.vnet.ibm.com> (raw)
In-Reply-To: <1437045206-7491-1-git-send-email-maddy@linux.vnet.ibm.com>

Create a file "nest-pmu.c" to contain nest pmu related functions. Code
to detect nest pmu support and parser to collect per-chip reserved memory
region information from device tree (DT).

Detection mechanism is to look for specific property "ibm,ima-chip" in DT.
For Nest pmu, device tree will have two set of information.
1) Per-chip reserved memory region for nest pmu counter collection area.
2) Supported Nest PMUs and events

Device tree layout for the Nest PMU as follows.

  /                     -- DT root folder
  |
  -nest-ima             -- Nest PMU folder
   |

   -ima-chip@<chip-id>  -- Per-chip folder for reserved region information
    |
    -ibm,chip-id        -- Chip id
    -ibm,ima-chip
    -reg                -- HOMER PORE Nest Counter collection Address (RA)
    -size               -- size to map in kernel space

   -Alink_BW            -- Nest PMU folder
    |
    -Alink0             -- Nest PMU Alink Event file
    -scale.Alink0.scale -- Event scale file
    -unit.Alink0.unit   -- Event unit file
    -device_type        -- "nest-ima-unit" marker
  ....

Subsequent patch will parse the next part of the DT to find various
Nest PMUs and their events.

Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Anton Blanchard <anton@samba.org>
Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Cc: Anshuman Khandual <khandual@linux.vnet.ibm.com>
Cc: Stephane Eranian <eranian@google.com>
Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
---
 arch/powerpc/perf/Makefile   |  2 +-
 arch/powerpc/perf/nest-pmu.c | 85 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 86 insertions(+), 1 deletion(-)
 create mode 100644 arch/powerpc/perf/nest-pmu.c

diff --git a/arch/powerpc/perf/Makefile b/arch/powerpc/perf/Makefile
index f9c083a5652a..6da656b50e3c 100644
--- a/arch/powerpc/perf/Makefile
+++ b/arch/powerpc/perf/Makefile
@@ -5,7 +5,7 @@ obj-$(CONFIG_PERF_EVENTS)	+= callchain.o
 obj-$(CONFIG_PPC_PERF_CTRS)	+= core-book3s.o bhrb.o
 obj64-$(CONFIG_PPC_PERF_CTRS)	+= power4-pmu.o ppc970-pmu.o power5-pmu.o \
 				   power5+-pmu.o power6-pmu.o power7-pmu.o \
-				   power8-pmu.o
+				   power8-pmu.o nest-pmu.o
 obj32-$(CONFIG_PPC_PERF_CTRS)	+= mpc7450-pmu.o
 
 obj-$(CONFIG_FSL_EMB_PERF_EVENT) += core-fsl-emb.o
diff --git a/arch/powerpc/perf/nest-pmu.c b/arch/powerpc/perf/nest-pmu.c
new file mode 100644
index 000000000000..e7d45ed4922d
--- /dev/null
+++ b/arch/powerpc/perf/nest-pmu.c
@@ -0,0 +1,85 @@
+/*
+ * Nest Performance Monitor counter support for POWER8 processors.
+ *
+ * Copyright (C) 2015 Madhavan Srinivasan, IBM Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include "nest-pmu.h"
+
+static struct perchip_nest_info p8_nest_perchip_info[P8_NEST_MAX_CHIPS];
+
+static int nest_ima_dt_parser(void)
+{
+	const __be32 *gcid;
+	const __be64 *chip_ima_reg;
+	const __be64 *chip_ima_size;
+	struct device_node *dev;
+	struct perchip_nest_info *p8ni;
+	int idx;
+
+	/*
+	 * "nest-ima" folder contains two things,
+	 * a) per-chip reserved memory region for Nest PMU Counter data
+	 * b) Support Nest PMU units and their event files
+	 */
+	for_each_node_with_property(dev, "ibm,ima-chip") {
+		gcid = of_get_property(dev, "ibm,chip-id", NULL);
+		chip_ima_reg = of_get_property(dev, "reg", NULL);
+		chip_ima_size = of_get_property(dev, "size", NULL);
+
+		if ((!gcid) || (!chip_ima_reg) || (!chip_ima_size)) {
+			pr_err("Nest_PMU: device %s missing property\n",
+							dev->full_name);
+			return -ENODEV;
+		}
+
+		/* chip id to save reserve memory region */
+		idx = (uint32_t)be32_to_cpup(gcid);
+
+		/*
+		 * Using a local variable to make it compact and
+		 * easier to read
+		 */
+		p8ni = &p8_nest_perchip_info[idx];
+		p8ni->pbase = be64_to_cpup(chip_ima_reg);
+		p8ni->size = be64_to_cpup(chip_ima_size);
+		p8ni->vbase = (uint64_t) phys_to_virt(p8ni->pbase);
+	}
+
+	return 0;
+}
+
+static int __init nest_pmu_init(void)
+{
+	int ret = -ENODEV;
+
+	/*
+	 * Lets do this only if we are hypervisor
+	 */
+	if (!cur_cpu_spec->oprofile_cpu_type ||
+	    !(strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power8") == 0) ||
+	    !cpu_has_feature(CPU_FTR_HVMODE))
+		return ret;
+
+	/*
+	 * Nest PMU information is grouped under "nest-ima" node
+	 * of the top-level device-tree directory. Detect Nest PMU
+	 * by the "ibm,ima-chip" property.
+	 */
+	if (!of_find_node_with_property(NULL, "ibm,ima-chip"))
+		return ret;
+
+	/*
+	 * Parse device-tree for Nest PMU information
+	 */
+	ret = nest_ima_dt_parser();
+	if (ret)
+		return ret;
+
+	return 0;
+}
+device_initcall(nest_pmu_init);
-- 
1.9.1

  parent reply	other threads:[~2015-07-16 11:14 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-16 11:13 [PATCH v5 0/7]powerpc/powernv: Nest Instrumentation support Madhavan Srinivasan
2015-07-16 11:13 ` [PATCH v5 1/7] powerpc/powernv: Data structure and macros definition Madhavan Srinivasan
2015-07-16 11:13 ` [PATCH v5 2/7] powerpc/powernv: Add OPAL support for Nest PMU Madhavan Srinivasan
2015-07-16 11:13 ` Madhavan Srinivasan [this message]
2015-07-22  3:49   ` [PATCH v5 3/7] powerpc/powernv: Nest PMU detection and device tree parser Daniel Axtens
2015-07-23  5:54     ` Madhavan Srinivasan
2015-07-23  9:16       ` Michael Ellerman
2015-07-23  9:26         ` Madhavan Srinivasan
2015-07-16 11:13 ` [PATCH v5 4/7] powerpc/powernv: detect supported nest pmus and its events Madhavan Srinivasan
2015-07-22  4:07   ` Daniel Axtens
2015-07-23  6:03     ` Madhavan Srinivasan
2015-07-23  9:11       ` Michael Ellerman
2015-07-23  9:23         ` Madhavan Srinivasan
2015-07-16 11:13 ` [PATCH v5 5/7] powerpc/powernv: add event attribute and group to nest pmu Madhavan Srinivasan
2015-07-22  4:44   ` Daniel Axtens
2015-07-23  6:32     ` Madhavan Srinivasan
2015-07-16 11:13 ` [PATCH v5 6/7] powerpc/powernv: generic nest pmu event functions Madhavan Srinivasan
2015-07-22  4:56   ` Daniel Axtens
2015-07-23  6:44     ` Madhavan Srinivasan
2015-07-23  9:04       ` Michael Ellerman
2015-07-23  9:22         ` Madhavan Srinivasan
2015-07-16 11:13 ` [PATCH v5 7/7] powerpc/powernv: nest pmu cpumask and cpu hotplug support Madhavan Srinivasan
2015-07-22  5:03   ` Daniel Axtens
2015-07-23  6:48     ` Madhavan Srinivasan
2015-07-23  6:49       ` Daniel Axtens
2015-07-23  7:25         ` Madhavan Srinivasan
2015-07-20 18:43 ` [PATCH v5 0/7]powerpc/powernv: Nest Instrumentation support Sukadev Bhattiprolu
2015-07-23  6:44   ` Madhavan Srinivasan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1437045206-7491-4-git-send-email-maddy@linux.vnet.ibm.com \
    --to=maddy@linux.vnet.ibm.com \
    --cc=anton@samba.org \
    --cc=benh@kernel.crashing.org \
    --cc=eranian@google.com \
    --cc=khandual@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=paulus@samba.org \
    --cc=sukadev@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).