diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2012-08-07 17:12:11 +0300 |
---|---|---|
committer | Alexandru Gagniuc <mr.nuke.me@gmail.com> | 2012-08-27 15:36:47 +0200 |
commit | c33f1e9261adbe3921d305274e34ddab9101bc4e (patch) | |
tree | 428c00eef8f40f5f4c19d5e0085e516fbcb69b52 /src/northbridge/amd/agesa/family14 | |
parent | cd9fc1aa5f483818385c4a6c98afee4c8f49ad8e (diff) | |
download | coreboot-c33f1e9261adbe3921d305274e34ddab9101bc4e.tar.gz coreboot-c33f1e9261adbe3921d305274e34ddab9101bc4e.tar.bz2 coreboot-c33f1e9261adbe3921d305274e34ddab9101bc4e.zip |
AMD northbridges: factor out CPU allocation
Factor CPU allocation out of AMD northbridge codes. As CPU topology
information is required for generation of certain ACPI tables, make
this code globally available.
For AMDK8 and AMDFAM10 northbridge, there is a possible case of
BSP CPU with lapicid!=0. We do not want to leave the lapic 0 from
devicetree unused, so always use that node for BSP CPU.
Change-Id: I8b1e73ed5b20b314f71dfd69a7b781ac05aea120
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/1418
Tested-by: build bot (Jenkins)
Reviewed-by: Anton Kochkov <anton.kochkov@gmail.com>
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Diffstat (limited to 'src/northbridge/amd/agesa/family14')
-rw-r--r-- | src/northbridge/amd/agesa/family14/northbridge.c | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/src/northbridge/amd/agesa/family14/northbridge.c b/src/northbridge/amd/agesa/family14/northbridge.c index 2d0a85f7b41c..8742f11904c7 100644 --- a/src/northbridge/amd/agesa/family14/northbridge.c +++ b/src/northbridge/amd/agesa/family14/northbridge.c @@ -831,6 +831,7 @@ static void cpu_bus_set_resources(device_t dev) { static u32 cpu_bus_scan(device_t dev, u32 max) { + struct bus *cpu_bus = dev->link_list; device_t cpu; int apic_id, cores_found; @@ -842,20 +843,10 @@ static u32 cpu_bus_scan(device_t dev, u32 max) cores_found = (pci_read_config32(dev_find_slot(0,PCI_DEVFN(0x18,0x3)), 0xe8) >> 12) & 3; printk(BIOS_DEBUG, " AP siblings=%d\n", cores_found); - for (apic_id = 0; apic_id <= cores_found; apic_id++) { - struct device_path cpu_path; - - cpu_path.type = DEVICE_PATH_APIC; - cpu_path.apic.apic_id = apic_id; - cpu = alloc_find_dev(dev->link_list, &cpu_path); - if (!cpu) - continue; - cpu->enabled = 1; - cpu->path.apic.node_id = 0; - cpu->path.apic.core_id = apic_id; - printk(BIOS_DEBUG, "CPU: %s %s\n", - dev_path(cpu), cpu->enabled?"enabled":"disabled"); + cpu = add_cpu_device(cpu_bus, apic_id, 1); + if (cpu) + amd_cpu_topology(cpu, 0, apic_id); } return max; } |