aboutsummaryrefslogtreecommitdiff
path: root/src/northbridge/amd/amdk8
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2012-08-07 17:12:11 +0300
committerAlexandru Gagniuc <mr.nuke.me@gmail.com>2012-08-27 15:36:47 +0200
commitc33f1e9261adbe3921d305274e34ddab9101bc4e (patch)
tree428c00eef8f40f5f4c19d5e0085e516fbcb69b52 /src/northbridge/amd/amdk8
parentcd9fc1aa5f483818385c4a6c98afee4c8f49ad8e (diff)
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/amdk8')
-rw-r--r--src/northbridge/amd/amdk8/northbridge.c36
1 files changed, 10 insertions, 26 deletions
diff --git a/src/northbridge/amd/amdk8/northbridge.c b/src/northbridge/amd/amdk8/northbridge.c
index 65e66ab759..9f2fe66c29 100644
--- a/src/northbridge/amd/amdk8/northbridge.c
+++ b/src/northbridge/amd/amdk8/northbridge.c
@@ -1238,6 +1238,10 @@ static u32 cpu_bus_scan(device_t dev, u32 max)
/* Find which cpus are present */
cpu_bus = dev->link_list;
+
+ /* Always use the devicetree node with lapic_id 0 for BSP. */
+ remap_bsp_lapic(cpu_bus);
+
for(i = 0; i < sysconf.nodes; i++) {
device_t cpu_dev;
@@ -1306,38 +1310,18 @@ static u32 cpu_bus_scan(device_t dev, u32 max)
{
jj = siblings;
}
-#if 0
- jj = 0; // if create cpu core1 path in amd_siblings by core0
-#endif
for (j = 0; j <=jj; j++ ) {
- struct device_path cpu_path;
- device_t cpu;
-
- /* Build the cpu device path */
- cpu_path.type = DEVICE_PATH_APIC;
- cpu_path.apic.apic_id = i * (nb_cfg_54?(siblings+1):1) + j * (nb_cfg_54?1:8);
-
- /* Update CPU in devicetree. */
- if (enable_node)
- cpu = alloc_find_dev(cpu_bus, &cpu_path);
- else
- cpu = find_dev_path(cpu_bus, &cpu_path);
- if (!cpu)
- continue;
-
+ u32 apic_id = i * (nb_cfg_54?(siblings+1):1) + j * (nb_cfg_54?1:8);
if(sysconf.enabled_apic_ext_id) {
- if (cpu->path.apic.apic_id != 0 || sysconf.lift_bsp_apicid) {
- cpu->path.apic.apic_id += sysconf.apicid_offset;
+ if (apic_id != 0 || sysconf.lift_bsp_apicid) {
+ apic_id += sysconf.apicid_offset;
}
}
- cpu->enabled = enable_node;
- cpu->path.apic.node_id = i;
- cpu->path.apic.core_id = j;
- printk(BIOS_DEBUG, "CPU: %s %s\n",
- dev_path(cpu), cpu->enabled?"enabled":"disabled");
-
+ device_t cpu = add_cpu_device(cpu_bus, apic_id, enable_node);
+ if (cpu)
+ amd_cpu_topology(cpu, i, j);
} //j
}
return max;