MSR - Machine specific registers

FSB multiplier

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


The author is not affiliated with, endorsed by, or sponsored by Intel Corporation or its affiliates. All trademarks, including but not limited to Intel, Pentium, and any other registered or unregistered marks mentioned herein, are the property of their respective owners. Their use in this context is solely for descriptive and informational purposes and constitutes nominative fair use under applicable trademark laws.
  • index page
  • uop description
  • ADC
  • ADD
  • AND
  • BSF
  • BSR
  • BSWAP
  • BTEST
  • DIV
  • FANDNOT
  • FCALCTW
  • FCMOV
  • FCOM
  • FMERGE
  • FMOV
  • FPEXTRACT
  • FPORDATATYPE
  • FPSIGNEXT
  • FREADROM
  • FXORS
  • IDIV
  • IMUL
  • INTEXTRACT
  • LEA
  • LOAD
  • MOVE
  • MOVEFROMCREG
  • MOVETOCREG
  • MUL
  • OR
  • PORTIN
  • PORTOUT
  • RCL
  • RCR
  • RDSEGFLD
  • ROL
  • ROR
  • SAL
  • SAR
  • SBC
  • SHL
  • SHR
  • SIGEVENT
  • STA
  • STRD
  • SUB
  • SUBR
  • TRANSPORTUIP
  • UOP
  • U_JCC
  • U_JMP
  • U_JMP_INDIR
  • WRSEGFLD
  • WUCONCAT
  • WUEXTRBK
  • WUINSERT
  • WUMERGE
  • XOR