summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Reinauer <reinauer@chromium.org>2012-10-15 13:45:11 -0700
committerStefan Reinauer <stefan.reinauer@coreboot.org>2012-11-12 03:27:25 +0100
commitbb9dff55560e2f1834ec9bb41d4929ed3c749818 (patch)
tree71a6e04b3141cc6af01304f8dce827e90ea83fcc
parentcb6fd30155f404eaaeed4252400d248059825f0d (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.c21
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 */