MSR - Machine specific registers
Notes from a friend who was interested in unlocking FSB multiplier:
if (((scpu_id>=0x600) && (scpu_id<=0x68F)) || ((scpu_id>=0x6A0) &&(scpu_id<=0x6BF)))
{ // for 600h-68Fh, 6A0h-6BFh - Pentium Pro/II/III
msr=(rdmsr(0x2A)>>22)&0x2FULL; // MSR 2Ah[27,25:22], rotate by 22 bits to 5,-,3,2,1,0
msr=((msr>>1)&0x10UL)|(msr&0xFULL); // remove bit 4 and shift bit 5 into its position
if ((scpu_id<=0x682) || (scpu_id==0x6A0)) // for 600h-682h, 6A0h - Pentium Pro/II/III no Coppermine, Xeon
msr&=0xFULL; // clear bit 4
if (((scpu_id>=0x690) && (scpu_id<=0x69F)) || ((scpu_id>=0x6D0) && (scpu_id<=0x6DF)))
{ // for 690h-69Fh, 6D0h-6DFh - Pentium M
msr=(rdmsr(0x2A)>>22)&0x1FULL; // MSR 2Ah[26:22], rotate to 4,3,2,1,0 - direct value 0-31
return(msr);
if ((scpu_id>=0x6E0) && (scpu_id<=0x6FF)) // for 6E0h-6FFh - Core and Core2 (65nm)
{
msr=rdmsr(0x198); // MSR 198h contains min, max and current multiplier value
if (mode==0) // if we want minimum integer multiplier value
return((msr>>24)&0x1FULL); // MSR 198h[28:24], rotate to 4:0 - direct minimum integer multiplier value
if (mode==255) // if we want current multiplier value
{
mul=((msr>>8)&0x1FULL); // MSR 198h[12:8] - direct current multiplier value
return(mul); // partially matches http://sourceforge.net/p/freedos/mailman/message/31894268
}
mul=((msr>>40)&0x1FULL); // MSR 198h[44:40] - direct max multiplier value
return(mul); // otherwise return max multiplier value
}
I think early Pentium II had an unlocked multiplier â it could be changed, but it was probably still capped. In later Pentium II / III chips the multiplier was hard-locked and BIOS settings had no effect.
With Pentium M, or some Core-era CPUs, SpeedStep appeared, where power management dynamically changed the multiplier during runtime depending on performance needs, but still capped at a maximum value.
On newer Core architectures (Sandy, Ivy, etc.), Intel officially sells unlocked CPUs marked with a âKâ suffix, which likely have a multiplier ceiling around 65 (I found that when a BIOS has a bad/old ME module, even K CPUs cannot be overclocked). Regular non-K CPUs are capped by their official maximum turbo frequency.
ref: chromium.googlesource.com/.../MdePkg/Include/Register/Intel/Msr/P6Msr.h↗