linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v13 3/7] arm64: pmu: Cache PMU interrupt numbers from MADT parse
Date: Fri, 20 Jan 2017 17:37:34 +0000	[thread overview]
Message-ID: <20170120173733.GB14295@red-moon> (raw)
In-Reply-To: <1484686210-7211-4-git-send-email-jeremy.linton@arm.com>

On Tue, Jan 17, 2017 at 02:50:06PM -0600, Jeremy Linton wrote:
> From: Mark Salter <msalter@redhat.com>
> 
> In the case of ACPI, the PMU IRQ information is contained in the
> MADT table. Also, since the PMU does not exist as a device in the
> ACPI DSDT table, it is necessary to create a platform device so
> that the appropriate driver probing is triggered. Since the platform
> device creation needs to happen after the CPU's have been started, and
> the MADT parsing needs to happen before, we save off the interrupt
> numbers discovered during the parsing.
> 
> Signed-off-by: Mark Salter <msalter@redhat.com>
> Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
> ---
>  arch/arm64/kernel/smp.c      |  5 +++++
>  drivers/perf/Kconfig         |  4 ++++
>  drivers/perf/Makefile        |  1 +
>  drivers/perf/arm_pmu_acpi.c  | 40 ++++++++++++++++++++++++++++++++++++++++
>  include/linux/perf/arm_pmu.h |  7 +++++++
>  5 files changed, 57 insertions(+)
>  create mode 100644 drivers/perf/arm_pmu_acpi.c
> 
> diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
> index 8ea244c..cbaab44 100644
> --- a/arch/arm64/kernel/smp.c
> +++ b/arch/arm64/kernel/smp.c
> @@ -37,6 +37,7 @@
>  #include <linux/completion.h>
>  #include <linux/of.h>
>  #include <linux/irq_work.h>
> +#include <linux/perf/arm_pmu.h>
>  
>  #include <asm/alternative.h>
>  #include <asm/atomic.h>
> @@ -552,6 +553,7 @@ acpi_verify_and_map_madt(struct acpi_madt_generic_interrupt *processor)
>  		}
>  		bootcpu_valid = true;
>  		early_map_cpu_to_node(0, acpi_numa_get_nid(0, hwid));
> +		arm_pmu_parse_acpi(0, processor);
>  		return;
>  	}
>  
> @@ -572,6 +574,9 @@ acpi_verify_and_map_madt(struct acpi_madt_generic_interrupt *processor)
>  	 */
>  	acpi_set_mailbox_entry(cpu_count, processor);
>  
> +	/* get PMU irq info */
> +	arm_pmu_parse_acpi(cpu_count, processor);
> +
>  	early_map_cpu_to_node(cpu_count, acpi_numa_get_nid(cpu_count, hwid));
>  
>  	cpu_count++;
> diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig
> index 4d5c5f9..697df05 100644
> --- a/drivers/perf/Kconfig
> +++ b/drivers/perf/Kconfig
> @@ -19,4 +19,8 @@ config XGENE_PMU
>          help
>            Say y if you want to use APM X-Gene SoC performance monitors.
>  
> +config ARM_PMU_ACPI
> +	def_bool y
> +	depends on ARM_PMU && ACPI
> +
>  endmenu
> diff --git a/drivers/perf/Makefile b/drivers/perf/Makefile
> index b116e98..d1d7762 100644
> --- a/drivers/perf/Makefile
> +++ b/drivers/perf/Makefile
> @@ -1,2 +1,3 @@
>  obj-$(CONFIG_ARM_PMU) += arm_pmu.o
>  obj-$(CONFIG_XGENE_PMU) += xgene_pmu.o
> +obj-$(CONFIG_ARM_PMU_ACPI) += arm_pmu_acpi.o
> diff --git a/drivers/perf/arm_pmu_acpi.c b/drivers/perf/arm_pmu_acpi.c
> new file mode 100644
> index 0000000..2008001
> --- /dev/null
> +++ b/drivers/perf/arm_pmu_acpi.c
> @@ -0,0 +1,40 @@
> +/*
> + * ARM ACPI PMU support
> + *
> + * Copyright (C) 2015 Red Hat Inc.
> + * Author: Mark Salter <msalter@redhat.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2.  See
> + * the COPYING file in the top-level directory.
> + *
> + */
> +
> +#include <asm/cpu.h>
> +#include <linux/acpi.h>
> +#include <linux/irq.h>
> +#include <linux/irqdesc.h>
> +#include <linux/list.h>
> +#include <linux/perf/arm_pmu.h>
> +#include <linux/platform_device.h>

Nit: You should trim this include list, it is hardly needed in this patch
stand-alone.

> +struct pmu_irq {
> +	int  gsi;
> +	int  trigger;
> +	bool used;
> +};
> +
> +static struct pmu_irq pmu_irqs[NR_CPUS];
> +
> +/*
> + * Called from acpi_verify_and_map_madt()'s MADT parsing during boot.

You will have to update the function name according to what we end up doing
in patch 1.

> + * This routine saves off the GSI's and their trigger state for use when we are
> + * ready to build the PMU platform device.
> + */
> +void __init arm_pmu_parse_acpi(int cpu, struct acpi_madt_generic_interrupt *gic)
> +{
> +	pmu_irqs[cpu].gsi = gic->performance_interrupt;
> +	if (gic->flags & ACPI_MADT_PERFORMANCE_IRQ_MODE)
> +		pmu_irqs[cpu].trigger = ACPI_EDGE_SENSITIVE;
> +	else
> +		pmu_irqs[cpu].trigger = ACPI_LEVEL_SENSITIVE;
> +}
> diff --git a/include/linux/perf/arm_pmu.h b/include/linux/perf/arm_pmu.h
> index 8462da2..df1ba55 100644
> --- a/include/linux/perf/arm_pmu.h
> +++ b/include/linux/perf/arm_pmu.h
> @@ -164,4 +164,11 @@ int arm_pmu_device_probe(struct platform_device *pdev,
>  
>  #endif /* CONFIG_ARM_PMU */
>  
> +#ifdef CONFIG_ARM_PMU_ACPI
> +struct acpi_madt_generic_interrupt;
> +void arm_pmu_parse_acpi(int cpu, struct acpi_madt_generic_interrupt *gic);

Adding __init tag here too would not hurt.

Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>

> +#else
> +#define arm_pmu_parse_acpi(a, b) do { } while (0)
> +#endif /* CONFIG_ARM_PMU_ACPI */
> +
>  #endif /* __ARM_PMU_H__ */
> -- 
> 2.5.5
> 

  reply	other threads:[~2017-01-20 17:37 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-17 20:50 [PATCH v13 0/7] Enable PMUs in ACPI systems Jeremy Linton
2017-01-17 20:50 ` [PATCH v13 1/7] arm64: Rename the common MADT parse routine Jeremy Linton
2017-01-19  3:51   ` Hanjun Guo
2017-01-19 17:17     ` Jeremy Linton
2017-01-20 16:22   ` Lorenzo Pieralisi
2017-01-20 17:12     ` Jeremy Linton
2017-01-17 20:50 ` [PATCH v13 2/7] arm: arm64: Add routine to determine cpuid of other cpus Jeremy Linton
2017-01-17 20:50 ` [PATCH v13 3/7] arm64: pmu: Cache PMU interrupt numbers from MADT parse Jeremy Linton
2017-01-20 17:37   ` Lorenzo Pieralisi [this message]
2017-01-17 20:50 ` [PATCH v13 4/7] arm: arm64: pmu: Assign platform PMU CPU affinity Jeremy Linton
2017-01-17 20:50 ` [PATCH v13 5/7] arm64: pmu: Detect multiple generic PMUs and append counter Jeremy Linton
2017-01-17 20:50 ` [PATCH v13 6/7] arm64: pmu: Detect and enable multiple PMUs in an ACPI system Jeremy Linton
2017-01-17 20:50 ` [PATCH v13 7/7] arm: pmu: Add PMU definitions for cores not initially online Jeremy Linton
2017-01-19  3:57 ` [PATCH v13 0/7] Enable PMUs in ACPI systems Hanjun Guo

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=20170120173733.GB14295@red-moon \
    --to=lorenzo.pieralisi@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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).