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

This project is an independent, unofficial work based on publicly available information and reverse-engineering research, and is not affiliated with, endorsed by, sponsored by, or associated with Intel Corporation or its affiliates. It is provided "as is", without warranty of any kind. The author assumes no responsibility or liability for any use, misuse, damage, data loss, hardware failure, or other consequences arising from its use. Intel, Pentium, Core and related trademarks are the property of their respective owners and are used solely for identification and informational purposes.
  • 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