Use broadcast SIPI to startup siblings
The current code for initializing AP cpus has several shortcomings: - it assumes APIC IDs are sequential - it uses only the BSP for determining the AP count, which is bad if there's more than one physical CPU, and CPUs are of different type Note that the new code call cpu->ops->init() in parallel, and therefore some CPU code needs to be changed to address that. One example are old Intel HT enabled CPUs which can't do microcode update in parallel. Change-Id: Ic48a1ebab6a7c52aa76765f497268af09fa38c25 Signed-off-by: Sven Schnelle <svens@stackframe.org> Reviewed-on: http://review.coreboot.org/1139 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
committed by
Ronald G. Minnich
parent
9ed1456eff
commit
042c1461fb
@ -26,6 +26,7 @@
|
||||
#include <arch/acpigen.h>
|
||||
#include <arch/cpu.h>
|
||||
#include <cpu/x86/msr.h>
|
||||
#include <cpu/x86/lapic.h>
|
||||
#include <cpu/intel/acpi.h>
|
||||
#include <cpu/intel/speedstep.h>
|
||||
#include <cpu/intel/turbo.h>
|
||||
@ -88,8 +89,8 @@ static int generate_cstate_entries(acpi_cstate_t *cstates,
|
||||
|
||||
static int generate_C_state_entries(void)
|
||||
{
|
||||
struct cpu_info *info;
|
||||
struct cpu_driver *cpu;
|
||||
struct device *cpu_dev;
|
||||
int len, lenif;
|
||||
device_t lapic;
|
||||
struct cpu_intel_model_206ax_config *conf = NULL;
|
||||
@ -103,10 +104,10 @@ static int generate_C_state_entries(void)
|
||||
return 0;
|
||||
|
||||
/* Find CPU map of supported C-states */
|
||||
info = cpu_info();
|
||||
if (!info)
|
||||
cpu_dev = dev_find_lapic(lapicid());
|
||||
if (!cpu_dev)
|
||||
return 0;
|
||||
cpu = find_cpu_driver(info->cpu);
|
||||
cpu = find_cpu_driver(cpu_dev);
|
||||
if (!cpu || !cpu->cstates)
|
||||
return 0;
|
||||
|
||||
|
Reference in New Issue
Block a user