summaryrefslogtreecommitdiff
path: root/arch/x86/cpu
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2020-07-17 17:48:11 +0300
committerBin Meng <bmeng.cn@gmail.com>2020-07-20 04:46:43 +0300
commita6c9fd4da06f2893026e900401128ef9db6a4a2a (patch)
treed28d72ed0ff75567976459e508968f6d59417bcd /arch/x86/cpu
parent3a5752ccff5a8ee2952d0d81387f32825b73756e (diff)
downloadu-boot-a6c9fd4da06f2893026e900401128ef9db6a4a2a.tar.xz
x86: mp_init: Drop the num_cpus static variable
This does not need to be global across all functions in this file. Pass a parameter instead. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Diffstat (limited to 'arch/x86/cpu')
-rw-r--r--arch/x86/cpu/mp_init.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/arch/x86/cpu/mp_init.c b/arch/x86/cpu/mp_init.c
index 8b00d57c88..df43f71572 100644
--- a/arch/x86/cpu/mp_init.c
+++ b/arch/x86/cpu/mp_init.c
@@ -31,9 +31,6 @@
DECLARE_GLOBAL_DATA_PTR;
-/* Total CPUs include BSP */
-static int num_cpus;
-
/* This also needs to match the sipi.S assembly code for saved MSR encoding */
struct saved_msr {
uint32_t index;
@@ -384,13 +381,23 @@ static int start_aps(int num_aps, atomic_t *ap_count)
return 0;
}
-static int bsp_do_flight_plan(struct udevice *cpu, struct mp_flight_plan *plan)
+/**
+ * bsp_do_flight_plan() - Do the flight plan on the BSP
+ *
+ * This runs the flight plan on the main CPU used to boot U-Boot
+ *
+ * @cpu: Device for the main CPU
+ * @plan: Flight plan to run
+ * @num_aps: Number of APs (CPUs other than the BSP)
+ * @returns 0 on success, -ETIMEDOUT if an AP failed to come up
+ */
+static int bsp_do_flight_plan(struct udevice *cpu, struct mp_flight_plan *plan,
+ int num_aps)
{
int i;
int ret = 0;
const int timeout_us = 100000;
const int step_us = 100;
- int num_aps = num_cpus - 1;
for (i = 0; i < plan->num_records; i++) {
struct mp_flight_record *rec = &plan->records[i];
@@ -410,6 +417,7 @@ static int bsp_do_flight_plan(struct udevice *cpu, struct mp_flight_plan *plan)
release_barrier(&rec->barrier);
}
+
return ret;
}
@@ -454,7 +462,7 @@ static struct mp_flight_record mp_steps[] = {
int mp_init(void)
{
- int num_aps;
+ int num_aps, num_cpus;
atomic_t *ap_count;
struct udevice *cpu;
int ret;
@@ -516,7 +524,7 @@ int mp_init(void)
}
/* Walk the flight plan for the BSP */
- ret = bsp_do_flight_plan(cpu, &mp_info);
+ ret = bsp_do_flight_plan(cpu, &mp_info, num_aps);
if (ret) {
debug("CPU init failed: err=%d\n", ret);
return ret;