Added experimental support for Intel Haswell CPUs.
authormoel.mich
Sun, 09 Jun 2013 16:10:43 +0000
changeset 396c7e2a6aa4f96
parent 395 d1f25b504845
child 397 243b6d5afa7c
Added experimental support for Intel Haswell CPUs.
Hardware/CPU/IntelCPU.cs
     1.1 --- a/Hardware/CPU/IntelCPU.cs	Sun Jun 09 16:08:59 2013 +0000
     1.2 +++ b/Hardware/CPU/IntelCPU.cs	Sun Jun 09 16:10:43 2013 +0000
     1.3 @@ -4,7 +4,7 @@
     1.4    License, v. 2.0. If a copy of the MPL was not distributed with this
     1.5    file, You can obtain one at http://mozilla.org/MPL/2.0/.
     1.6   
     1.7 -  Copyright (C) 2009-2012 Michael Möller <mmoeller@openhardwaremonitor.org>
     1.8 +  Copyright (C) 2009-2013 Michael Möller <mmoeller@openhardwaremonitor.org>
     1.9  	
    1.10  */
    1.11  
    1.12 @@ -22,7 +22,8 @@
    1.13        Atom,
    1.14        Nehalem,
    1.15        SandyBridge,
    1.16 -      IvyBridge
    1.17 +      IvyBridge,
    1.18 +      Haswell
    1.19      }
    1.20  
    1.21      private readonly Sensor[] coreTemperatures;
    1.22 @@ -134,6 +135,12 @@
    1.23                  microarchitecture = Microarchitecture.IvyBridge;
    1.24                  tjMax = GetTjMaxFromMSR();
    1.25                  break;
    1.26 +              case 0x3C: // Intel Core i5, i7 4xxx LGA1150 (22nm)
    1.27 +              case 0x45:
    1.28 +              case 0x46:
    1.29 +                microarchitecture = Microarchitecture.Haswell;
    1.30 +                tjMax = GetTjMaxFromMSR();
    1.31 +                break;
    1.32                default:
    1.33                  microarchitecture = Microarchitecture.Unknown;
    1.34                  tjMax = Floats(100);
    1.35 @@ -176,7 +183,8 @@
    1.36            } break;
    1.37          case Microarchitecture.Nehalem:
    1.38          case Microarchitecture.SandyBridge:
    1.39 -        case Microarchitecture.IvyBridge: {
    1.40 +        case Microarchitecture.IvyBridge:
    1.41 +        case Microarchitecture.Haswell: {
    1.42              uint eax, edx;
    1.43              if (Ring0.Rdmsr(MSR_PLATFORM_INFO, out eax, out edx)) {
    1.44                timeStampCounterMultiplier = (eax >> 8) & 0xff;
    1.45 @@ -234,7 +242,8 @@
    1.46        }
    1.47  
    1.48        if (microarchitecture == Microarchitecture.SandyBridge ||
    1.49 -          microarchitecture == Microarchitecture.IvyBridge) 
    1.50 +          microarchitecture == Microarchitecture.IvyBridge ||
    1.51 +          microarchitecture == Microarchitecture.Haswell) 
    1.52        {
    1.53          powerSensors = new Sensor[energyStatusMSRs.Length];
    1.54          lastEnergyTime = new DateTime[energyStatusMSRs.Length];
    1.55 @@ -341,7 +350,8 @@
    1.56                    coreClocks[i].Value = (float)(multiplier * newBusClock);
    1.57                  } break;
    1.58                case Microarchitecture.SandyBridge:
    1.59 -              case Microarchitecture.IvyBridge: {
    1.60 +              case Microarchitecture.IvyBridge:
    1.61 +              case Microarchitecture.Haswell: {
    1.62                    uint multiplier = (eax >> 8) & 0xff;
    1.63                    coreClocks[i].Value = (float)(multiplier * newBusClock);
    1.64                  } break;