summaryrefslogtreecommitdiff
path: root/src/arch/arm64/include
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2014-09-18 11:52:16 -0500
committerPatrick Georgi <pgeorgi@google.com>2015-03-28 07:05:34 +0100
commitb30c9b1c9a676c3b85ac1de9cbc1c5f4424d6297 (patch)
tree98edd47d5a4e73e7a2e1361e33a6e5f785f9d881 /src/arch/arm64/include
parent4f89d97c06b7e45fb6f3c26e770b0c674a82bb4d (diff)
downloadcoreboot-b30c9b1c9a676c3b85ac1de9cbc1c5f4424d6297.tar.xz
arm64: split cpu.c
The cpu.c contains some helpful construts as well as ramstage devicetree handling. Split the 2 pieces so that cpu.c can be reused in secmon. BUG=chrome-os-partner:30785 BRANCH=None TEST=Built and booted. Change-Id: Iec0f8462411897a255f7aa289191ce6761e08bb0 Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Original-Commit-Id: 4f30f1186950424b65df6858965a09ca51637e4f Original-Change-Id: Ie87bd35bf1ccd777331250dcdaae07dab82d3d18 Original-Signed-off-by: Aaron Durbin <adurbin@chromium.org> Original-Reviewed-on: https://chromium-review.googlesource.com/218842 Original-Reviewed-by: Furquan Shaikh <furquan@chromium.org> Reviewed-on: http://review.coreboot.org/9089 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src/arch/arm64/include')
-rw-r--r--src/arch/arm64/include/armv8/arch/cpu.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/arch/arm64/include/armv8/arch/cpu.h b/src/arch/arm64/include/armv8/arch/cpu.h
index 8d071adc61..fc31903f52 100644
--- a/src/arch/arm64/include/armv8/arch/cpu.h
+++ b/src/arch/arm64/include/armv8/arch/cpu.h
@@ -23,6 +23,7 @@
#define asmlinkage
#if !defined(__PRE_RAM__)
+#include <arch/barrier.h>
#include <device/device.h>
enum {
@@ -67,6 +68,12 @@ struct cpu_info {
struct cpu_info *cpu_info(void);
extern struct cpu_info *bsp_cpu_info;
+extern struct cpu_info cpu_infos[CONFIG_MAX_CPUS];
+
+static inline struct cpu_info *cpu_info_for_cpu(unsigned int id)
+{
+ return &cpu_infos[id];
+}
/* Ran only by BSP at initial boot strapping. */
static inline void cpu_set_bsp(void)
@@ -79,6 +86,16 @@ static inline int cpu_is_bsp(void)
return cpu_info() == bsp_cpu_info;
}
+static inline int cpu_online(struct cpu_info *ci)
+{
+ return load_acquire(&ci->online) != 0;
+}
+
+static inline void cpu_mark_online(struct cpu_info *ci)
+{
+ store_release(&ci->online, 1);
+}
+
/* Control routines for starting CPUs. */
struct cpu_control_ops {
/* Return the maximum number of CPUs supported. */
@@ -112,6 +129,9 @@ int arch_run_on_cpu_async(unsigned int cpu, struct cpu_action *action);
int arch_run_on_all_cpus_async(struct cpu_action *action);
int arch_run_on_all_cpus_but_self_async(struct cpu_action *action);
+/* Wait for actions to be perfomed. */
+void arch_cpu_wait_for_action(void);
+
#endif /* !__PRE_RAM__ */
/*