linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv3 11/14] arm64: add function to get a cpu's MADT GICC table
Date: Tue, 11 Apr 2017 09:39:54 +0100	[thread overview]
Message-ID: <1491899997-32210-12-git-send-email-mark.rutland@arm.com> (raw)
In-Reply-To: <1491899997-32210-1-git-send-email-mark.rutland@arm.com>

Currently the ACPI parking protocol code needs to parse each CPU's MADT
GICC table to extract the mailbox address and so on. Each time we parse
a GICC table, we call back to the parking protocol code to parse it.

This has been fine so far, but we're about to have more code that needs
to extract data from the GICC tables, and adding a callback for each
user is going to get unwieldy.

Instead, this patch ensures that we stash a copy of each CPU's GICC
table at boot time, such that anything needing to parse it can later
request it. This will allow for other parsers of GICC, and for
simplification to the ACPI parking protocol code. Note that we must
store a copy, rather than a pointer, since the core ACPI code
temporarily maps/unmaps tables while iterating over them.

Since we parse the MADT before we know how many CPUs we have (and hence
before we setup the percpu areas), we must use an NR_CPUS sized array.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Tested-by: Jeremy Linton <jeremy.linton@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
---
 arch/arm64/include/asm/acpi.h |  2 ++
 arch/arm64/kernel/smp.c       | 10 ++++++++++
 2 files changed, 12 insertions(+)

diff --git a/arch/arm64/include/asm/acpi.h b/arch/arm64/include/asm/acpi.h
index c1976c0..0e99978 100644
--- a/arch/arm64/include/asm/acpi.h
+++ b/arch/arm64/include/asm/acpi.h
@@ -85,6 +85,8 @@ static inline bool acpi_has_cpu_in_madt(void)
 	return true;
 }
 
+struct acpi_madt_generic_interrupt *acpi_cpu_get_madt_gicc(int cpu);
+
 static inline void arch_fix_phys_package_id(int num, u32 slot) { }
 void __init acpi_init_cpus(void);
 
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index ef1caae..390c277 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -518,6 +518,13 @@ static int __init smp_cpu_setup(int cpu)
 static unsigned int cpu_count = 1;
 
 #ifdef CONFIG_ACPI
+static struct acpi_madt_generic_interrupt cpu_madt_gicc[NR_CPUS];
+
+struct acpi_madt_generic_interrupt *acpi_cpu_get_madt_gicc(int cpu)
+{
+	return &cpu_madt_gicc[cpu];
+}
+
 /*
  * acpi_map_gic_cpu_interface - parse processor MADT entry
  *
@@ -552,6 +559,7 @@ static int __init smp_cpu_setup(int cpu)
 			return;
 		}
 		bootcpu_valid = true;
+		cpu_madt_gicc[0] = *processor;
 		early_map_cpu_to_node(0, acpi_numa_get_nid(0, hwid));
 		return;
 	}
@@ -562,6 +570,8 @@ static int __init smp_cpu_setup(int cpu)
 	/* map the logical cpu id to cpu MPIDR */
 	cpu_logical_map(cpu_count) = hwid;
 
+	cpu_madt_gicc[cpu_count] = *processor;
+
 	/*
 	 * Set-up the ACPI parking protocol cpu entries
 	 * while initializing the cpu_logical_map to
-- 
1.9.1

  parent reply	other threads:[~2017-04-11  8:39 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-11  8:39 [PATCHv3 00/14] arm_pmu: ACPI support Mark Rutland
2017-04-11  8:39 ` [PATCHv3 01/14] drivers/perf: arm_pmu: remove pointless PMU disabling Mark Rutland
2017-04-11  8:39 ` [PATCHv3 02/14] drivers/perf: arm_pmu: define armpmu_init_fn Mark Rutland
2017-04-11  8:39 ` [PATCHv3 03/14] drivers/perf: arm_pmu: fold init into alloc Mark Rutland
2017-04-11  8:39 ` [PATCHv3 04/14] drivers/perf: arm_pmu: factor out pmu registration Mark Rutland
2017-04-11  8:39 ` [PATCHv3 05/14] drivers/perf: arm_pmu: simplify cpu_pmu_request_irqs() Mark Rutland
2017-04-11  8:39 ` [PATCHv3 06/14] drivers/perf: arm_pmu: handle no platform_device Mark Rutland
2017-04-11  8:39 ` [PATCHv3 07/14] drivers/perf: arm_pmu: rename irq request/free functions Mark Rutland
2017-04-11  8:39 ` [PATCHv3 08/14] drivers/perf: arm_pmu: split cpu-local irq request/free Mark Rutland
2017-04-18 17:25   ` Geert Uytterhoeven
2017-04-18 18:24     ` Geert Uytterhoeven
2017-04-18 18:33     ` Mark Rutland
2017-04-18 18:57       ` Geert Uytterhoeven
2017-04-20 19:10         ` Mark Rutland
2017-04-11  8:39 ` [PATCHv3 09/14] drivers/perf: arm_pmu: move irq request/free into probe Mark Rutland
2017-04-11  8:39 ` [PATCHv3 10/14] drivers/perf: arm_pmu: split out platform device probe logic Mark Rutland
2017-04-11  8:39 ` Mark Rutland [this message]
2017-04-11  8:39 ` [PATCHv3 12/14] drivers/perf: arm_pmu: add ACPI framework Mark Rutland
2017-04-11  8:39 ` [PATCHv3 13/14] arm64: pmuv3: handle !PMUv3 when probing Mark Rutland
2017-04-13 14:06   ` Jayachandran C.
2017-04-13 15:36     ` Mark Rutland
2017-04-11  8:39 ` [PATCHv3 14/14] arm64: pmuv3: use arm_pmu ACPI framework Mark Rutland
2017-04-11 15:11 ` [PATCHv3 00/14] arm_pmu: ACPI support Anurup M
2017-04-11 15:45 ` Will Deacon
2017-04-12  6:48 ` 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=1491899997-32210-12-git-send-email-mark.rutland@arm.com \
    --to=mark.rutland@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).