[coreboot] Which MSR disables hyperthreading (all non-BSP/AP cores)?

Idwer Vollering vidwer at gmail.com
Wed Feb 15 17:33:45 CET 2012


Or: how to start a multicore (hyperthreading) processor as if it were
a singlecore (non-hyperthreading) processor.

Would it be necessary to configure APIC/IPI in serialice' mainboard
specific code?
See these message [1] [2] [3].

This is the output from two processors with hyperthreading disabled and enabled:

$ diff cpu_intel_p4_model_f29_msr_with_ht_disabled.txt
cpu_intel_p4_model_f29_msr_with_ht_enabled.txt2
41c41
<  MSR 0x00000300 = 0x000000FD:0x8E129919 (MSR_BPU_COUNTER0)
---
>  MSR 0x00000300 = 0x000000FC:0xEB7BD6C3 (MSR_BPU_COUNTER0)
43c43
<  MSR 0x00000302 = 0x00000000:0x00000000 (MSR_BPU_COUNTER2)
---
>  MSR 0x00000302 = 0x000000FB:0x75D2A276 (MSR_BPU_COUNTER2)
61c61
<  MSR 0x00000362 = 0x00000000:0x00000000 (MSR_BPU_CCCR2)
---
>  MSR 0x00000362 = 0x00000000:0x0803D000 (MSR_BPU_CCCR2)
80c80
<  MSR 0x000003A3 = 0x00000000:0x00000000 (MSR_FSB_ESCR1)
---
>  MSR 0x000003A3 = 0x00000000:0x26000203 (MSR_FSB_ESCR1)
147c147
<  MSR 0x00000010 = 0x0000003A:0x8FB50494 (IA32_TIME_STAMP_COUNTER)
---
>  MSR 0x00000010 = 0x00000045:0x41DA8FAC (IA32_TIME_STAMP_COUNTER)
179a180,222
>  MSR 0x000001D8 = 0x00000000:0x00000000 (MSR_LER_TO_LIP)
>  MSR 0x000001D9 = 0x00000000:0x00000000 (MSR_DEBUGCTLA)
>  MSR 0x000001DA = 0x00000000:0x00000000 (MSR_LASTBRANCH_TOS)
>  MSR 0x000001DB = 0x00000000:0x00000000 (MSR_LASTBRANCH_0)
>  MSR 0x000001DD = 0x00000000:0x00000000 (MSR_LASTBRANCH_2)
>  MSR 0x000001DE = 0x00000000:0x00000000 (MSR_LASTBRANCH_3)
>  MSR 0x00000277 = 0x00070106:0x00070106 (IA32_PAT)
>  MSR 0x00000600 = 0x00000000:0x00000000 (IA32_DS_AREA)
>
> ====================== UNIQUE MSRs  (core 1) ======================
>  MSR 0x00000010 = 0x00000045:0x41DE63F4 (IA32_TIME_STAMP_COUNTER)
>  MSR 0x0000001B = 0x00000000:0xFEE00800 (IA32_APIC_BASE)
>  MSR 0x0000008B = 0x0000002E:0x00000000 (IA32_BIOS_SIGN_ID)
>  MSR 0x000000FE = 0x00000000:0x00000508 (IA32_MTRRCAP)
>  MSR 0x00000174 = 0x00000000:0x00000060 (IA32_SYSENTER_CS)
>  MSR 0x00000175 = 0x00000000:0xF6606FC0 (IA32_SYSENTER_ESP)
>  MSR 0x00000176 = 0x00000000:0xC047C31C (IA32_SYSENTER_EIP)
>  MSR 0x00000179 = 0x00000000:0x000C0204 (IA32_MCG_CAP)
>  MSR 0x0000017A = 0x00000000:0x00000000 (IA32_MCG_STATUS)
>  (*) MSR 0x0000017B = 0xFFFFFFFF:0xFFFFFFFF (IA32_MCG_CTL)
>  MSR 0x00000180 = 0x00000000:0x00000000 (MSR_MCG_RAX)
>  MSR 0x00000181 = 0x00000000:0x00000000 (MSR_MCG_RBX)
>  MSR 0x00000182 = 0x00000000:0x00000000 (MSR_MCG_RCX)
>  MSR 0x00000183 = 0x00000000:0x00000000 (MSR_MCG_RDX)
>  MSR 0x00000184 = 0x00000000:0x00000000 (MSR_MCG_RSI)
>  MSR 0x00000185 = 0x00000000:0x00000000 (MSR_MCG_RDI)
>  MSR 0x00000186 = 0x00000000:0x00000000 (MSR_MCG_RBP)
>  MSR 0x00000187 = 0x00000000:0x00000000 (MSR_MCG_RSP)
>  MSR 0x00000188 = 0x00000000:0x00000000 (MSR_MCG_RFLAGS)
>  MSR 0x00000189 = 0x00000000:0x00000000 (MSR_MCG_RIP)
>  MSR 0x0000018A = 0x00000000:0x00000000 (MSR_MCG_MISC)
>  (*) MSR 0x00000190 = 0xFFFFFFFF:0xFFFFFFFF (MSR_MCG_R8)
>  (*) MSR 0x00000191 = 0xFFFFFFFF:0xFFFFFFFF (MSR_MCG_R9)
>  (*) MSR 0x00000192 = 0xFFFFFFFF:0xFFFFFFFF (MSR_MCG_R10)
>  (*) MSR 0x00000193 = 0xFFFFFFFF:0xFFFFFFFF (MSR_MCG_R11)
>  (*) MSR 0x00000194 = 0xFFFFFFFF:0xFFFFFFFF (MSR_MCG_R12)
>  (*) MSR 0x00000195 = 0xFFFFFFFF:0xFFFFFFFF (MSR_MCG_R13)
>  (*) MSR 0x00000196 = 0xFFFFFFFF:0xFFFFFFFF (MSR_MCG_R14)
>  (*) MSR 0x00000197 = 0xFFFFFFFF:0xFFFFFFFF (MSR_MCG_R15)
>  MSR 0x0000019A = 0x00000000:0x00000002 (IA32_CLOCK_MODULATION)
>  MSR 0x0000019B = 0x00000000:0x00000003 (IA32_THERM_INTERRUPT)
>  MSR 0x000001A0 = 0x00000000:0x00000089 (IA32_MISC_ENABLE)
>  MSR 0x000001D7 = 0x00000000:0xFFFFE066 (MSR_LER_FROM_LIP)


And:

$ diff cpu_intel_p4_model_f49_msr_with_ht_enabled.txt
cpu_intel_p4_model_f49_msr_with_ht_dis
     abled.txt
45c45
<  MSR 0x00000300 = 0x000000FC:0x2C774AC9 (MSR_BPU_COUNTER0)
---
>  MSR 0x00000300 = 0x000000FC:0xF2106B69 (MSR_BPU_COUNTER0)
47c47
<  MSR 0x00000302 = 0x000000FA:0xF37E6A39 (MSR_BPU_COUNTER2)
---
>  MSR 0x00000302 = 0x00000000:0x00000000 (MSR_BPU_COUNTER2)
71c71
<  MSR 0x00000010 = 0x0000004C:0x69A3BC78 (IA32_TIME_STAMP_COUNTER)
---
>  MSR 0x00000010 = 0x0000002E:0xD3FA1647 (IA32_TIME_STAMP_COUNTER)
79,121d78
<  MSR 0x00000176 = 0x00000000:0xC047C31C (IA32_SYSENTER_EIP)
<  MSR 0x00000179 = 0x00000000:0x00180204 (IA32_MCG_CAP)
<  MSR 0x0000017A = 0x00000000:0x00000000 (IA32_MCG_STATUS)
<  MSR 0x00000180 = 0x00000000:0x00000000 (MSR_MCG_RAX)
<  MSR 0x00000181 = 0x00000000:0x00000000 (MSR_MCG_RBX)
<  MSR 0x00000182 = 0x00000000:0x00000000 (MSR_MCG_RCX)
<  MSR 0x00000183 = 0x00000000:0x00000000 (MSR_MCG_RDX)
<  MSR 0x00000184 = 0x00000000:0x00000000 (MSR_MCG_RSI)
<  MSR 0x00000185 = 0x00000000:0x00000000 (MSR_MCG_RDI)
<  MSR 0x00000186 = 0x00000000:0x00000000 (MSR_MCG_RBP)
<  MSR 0x00000187 = 0x00000000:0x00000000 (MSR_MCG_RSP)
<  MSR 0x00000188 = 0x00000000:0x00000000 (MSR_MCG_RFLAGS)
<  MSR 0x00000189 = 0x00000000:0x00000000 (MSR_MCG_RIP)
<  MSR 0x0000018A = 0x00000000:0x00000000 (MSR_MCG_MISC)
<  MSR 0x00000190 = 0x00000000:0x00000000 (MSR_MCG_R8)
<  MSR 0x00000191 = 0x00000000:0x00000000 (MSR_MCG_R9)
<  MSR 0x00000192 = 0x00000000:0x00000000 (MSR_MCG_R10)
<  MSR 0x00000193 = 0x00000000:0x00000000 (MSR_MCG_R11)
<  MSR 0x00000194 = 0x00000000:0x00000000 (MSR_MCG_R12)
<  MSR 0x00000195 = 0x00000000:0x00000000 (MSR_MCG_R13)
<  MSR 0x00000196 = 0x00000000:0x00000000 (MSR_MCG_R14)
<  MSR 0x00000197 = 0x00000000:0x00000000 (MSR_MCG_R15)
<  MSR 0x00000198 = 0x00000F2D:0x00000F2D (IA32_PERF_STATUS)
<  MSR 0x00000199 = 0x00000000:0x00000F2D (IA32_PERF_CTL)
<  MSR 0x0000019A = 0x00000000:0x00000000 (IA32_CLOCK_MODULATION)
<  MSR 0x0000019B = 0x00000000:0x00000003 (IA32_THERM_INTERRUPT)
<  MSR 0x000001A0 = 0x00000004:0x20840489 (IA32_MISC_ENABLE)
<  MSR 0x000001D7 = 0x00000000:0x00000000 (MSR_LER_FROM_LIP)
<  MSR 0x000001D8 = 0x00000000:0x00000000 (MSR_LER_TO_LIP)
<  MSR 0x000001D9 = 0x00000000:0x00000000 (MSR_DEBUGCTLA)
<  MSR 0x000001DA = 0x00000000:0x00000000 (MSR_LASTBRANCH_TOS)
<  MSR 0x00000277 = 0x00070106:0x00070106 (IA32_PAT)
<  MSR 0x00000600 = 0x00000000:0x00000000 (IA32_DS_AREA)
<
< ====================== UNIQUE MSRs  (core 1) ======================
<  MSR 0x00000010 = 0x0000004C:0x69AE1BD2 (IA32_TIME_STAMP_COUNTER)
<  MSR 0x0000001B = 0x00000000:0xFEE00800 (IA32_APIC_BASE)
<  (*) MSR 0x0000003A = 0xFFFFFFFF:0xFFFFFFFF (IA32_FEATURE_CONTROL)
<  MSR 0x0000008B = 0x00000003:0x00000000 (IA32_BIOS_SIGN_ID)
<  (*) MSR 0x0000009B = 0xFFFFFFFF:0xFFFFFFFF (IA32_SMM_MONITOR_CTL)
<  MSR 0x000000FE = 0x00000000:0x00000508 (IA32_MTRRCAP)
<  MSR 0x00000174 = 0x00000000:0x00000060 (IA32_SYSENTER_CS)
<  MSR 0x00000175 = 0x00000000:0xF6106FC0 (IA32_SYSENTER_ESP)

[1] http://serialice.com/pipermail/serialice/2011-December/000305.html
[2] http://serialice.com/pipermail/serialice/2009-December/000068.html
[3] http://www.serialice.com/trac/serialice/changeset/82




More information about the coreboot mailing list