aboutsummaryrefslogtreecommitdiff
path: root/src/arch/x86/cpu.c
diff options
context:
space:
mode:
authorSubrata Banik <subrata.banik@intel.com>2019-05-10 11:58:37 +0530
committerSubrata Banik <subrata.banik@intel.com>2019-05-12 03:08:10 +0000
commit7bc9036d160c6235d96e1bed49331696d7fa9a09 (patch)
tree4f740f39be9343411083d40be948cdec3c5daccd /src/arch/x86/cpu.c
parent1159a163cd36318d27f8f3b71617ad4a5b781efb (diff)
arch/cpu: Rename mp_get_apic_id() and add_cpu_map_entry() function
This patch renames mp_get_apic_id() to cpu_get_apic_id() and add_cpu_map_entry() to cpu_add_map_entry() in order access it outside CONFIG_PARALLEL_MP kconfig scope. Also make below changes - Make cpu_add_map_entry() function available externally to call it from mp_init.c and lapic_cpu_init.c. BRANCH=none BUG=b:79562868 Change-Id: I6a6c85df055bc0b5fc8c850cfa04d50859067088 Signed-off-by: Subrata Banik <subrata.banik@intel.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/32701 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de>
Diffstat (limited to 'src/arch/x86/cpu.c')
-rw-r--r--src/arch/x86/cpu.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/arch/x86/cpu.c b/src/arch/x86/cpu.c
index 80d4d0da4a..f19b389441 100644
--- a/src/arch/x86/cpu.c
+++ b/src/arch/x86/cpu.c
@@ -219,6 +219,35 @@ static void set_cpu_ops(struct device *cpu)
cpu->ops = driver ? driver->ops : NULL;
}
+/* Keep track of default apic ids for SMM. */
+static int cpus_default_apic_id[CONFIG_MAX_CPUS];
+
+/*
+ * When CPUID executes with EAX set to 1, additional processor identification
+ * information is returned to EBX register:
+ * Default APIC ID: EBX[31-24] - this number is the 8 bit ID that is assigned
+ * to the local APIC on the processor during power on.
+ */
+static int initial_lapicid(void)
+{
+ return cpuid_ebx(1) >> 24;
+}
+
+/* Function to keep track of cpu default apic_id */
+void cpu_add_map_entry(unsigned int index)
+{
+ cpus_default_apic_id[index] = initial_lapicid();
+}
+
+/* Returns default APIC id based on logical_cpu number or < 0 on failure. */
+int cpu_get_apic_id(int logical_cpu)
+{
+ if (logical_cpu >= CONFIG_MAX_CPUS || logical_cpu < 0)
+ return -1;
+
+ return cpus_default_apic_id[logical_cpu];
+}
+
void cpu_initialize(unsigned int index)
{
/* Because we busy wait at the printk spinlock.