diff options
author | Stefan Reinauer <reinauer@chromium.org> | 2012-10-15 13:45:11 -0700 |
---|---|---|
committer | Stefan Reinauer <stefan.reinauer@coreboot.org> | 2012-11-12 03:27:25 +0100 |
commit | bb9dff55560e2f1834ec9bb41d4929ed3c749818 (patch) | |
tree | 71a6e04b3141cc6af01304f8dce827e90ea83fcc | |
parent | cb6fd30155f404eaaeed4252400d248059825f0d (diff) |
sandybridge: Correct reporting of cores and threads
The reporting of cores and threads in the system was a bit
ambiguous. This patch makes it clearer.
Change-Id: Ia05838a53f696fbaf78a1762fc6f4bf348d4ff0e
Signed-off-by: Stefan Reinauer <reinauer@google.com>
Reviewed-on: http://review.coreboot.org/1786
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
-rw-r--r-- | src/cpu/intel/model_206ax/model_206ax_init.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/cpu/intel/model_206ax/model_206ax_init.c b/src/cpu/intel/model_206ax/model_206ax_init.c index 9676ad175b..9654af14c5 100644 --- a/src/cpu/intel/model_206ax/model_206ax_init.c +++ b/src/cpu/intel/model_206ax/model_206ax_init.c @@ -436,22 +436,25 @@ static unsigned ehci_debug_addr; static void intel_cores_init(device_t cpu) { struct cpuid_result result; - unsigned cores, threads, i; + unsigned threads_per_package, threads_per_core, i; - result = cpuid_ext(0xb, 0); /* Threads per core */ - threads = result.ebx & 0xff; + /* Logical processors (threads) per core */ + result = cpuid_ext(0xb, 0); + threads_per_core = result.ebx & 0xffff; - result = cpuid_ext(0xb, 1); /* Cores per package */ - cores = result.ebx & 0xff; + /* Logical processors (threads) per package */ + result = cpuid_ext(0xb, 1); + threads_per_package = result.ebx & 0xffff; /* Only initialize extra cores from BSP */ if (cpu->path.apic.apic_id) return; - printk(BIOS_DEBUG, "CPU: %u has %u cores %u threads\n", - cpu->path.apic.apic_id, cores, threads); + printk(BIOS_DEBUG, "CPU: %u has %u cores, %u threads per core\n", + cpu->path.apic.apic_id, threads_per_package/threads_per_core, + threads_per_core); - for (i = 1; i < cores; ++i) { + for (i = 1; i < threads_per_package; ++i) { struct device_path cpu_path; device_t new; @@ -461,7 +464,7 @@ static void intel_cores_init(device_t cpu) cpu->path.apic.apic_id + i; /* Update APIC ID if no hyperthreading */ - if (threads == 1) + if (threads_per_core == 1) cpu_path.apic.apic_id <<= 1; /* Allocate the new cpu device structure */ |