Added support for Intel Atom N2xxx, D2xxx, C2xxx, E3xxx and Z3xxx CPUs (Fixed Issue 610, Issue 422 and Issue 647).
authormoel.mich
Sun, 28 Dec 2014 17:54:26 +0000
changeset 42656d59f52fa2b
parent 425 520bca5f2a7d
child 427 39ed1a16c32a
Added support for Intel Atom N2xxx, D2xxx, C2xxx, E3xxx and Z3xxx CPUs (Fixed Issue 610, Issue 422 and Issue 647).
Hardware/CPU/IntelCPU.cs
Properties/AssemblyVersion.cs
     1.1 --- a/Hardware/CPU/IntelCPU.cs	Sun Dec 28 15:34:37 2014 +0000
     1.2 +++ b/Hardware/CPU/IntelCPU.cs	Sun Dec 28 17:54:26 2014 +0000
     1.3 @@ -24,7 +24,8 @@
     1.4        SandyBridge,
     1.5        IvyBridge,
     1.6        Haswell,
     1.7 -      Broadwell
     1.8 +      Broadwell,
     1.9 +      Silvermont
    1.10      }
    1.11  
    1.12      private readonly Sensor[] coreTemperatures;
    1.13 @@ -149,6 +150,18 @@
    1.14                  microarchitecture = Microarchitecture.Broadwell;
    1.15                  tjMax = GetTjMaxFromMSR();
    1.16                  break;
    1.17 +              case 0x36: // Intel Atom S1xxx, D2xxx, N2xxx (32nm)
    1.18 +                microarchitecture = Microarchitecture.Atom;
    1.19 +                tjMax = GetTjMaxFromMSR();
    1.20 +                break;
    1.21 +              case 0x37: // Intel Atom E3xxx, Z3xxx (22nm)
    1.22 +              case 0x4A:
    1.23 +              case 0x4D: // Intel Atom C2xxx (22nm)
    1.24 +              case 0x5A:
    1.25 +              case 0x5D:
    1.26 +                microarchitecture = Microarchitecture.Silvermont;
    1.27 +                tjMax = GetTjMaxFromMSR();
    1.28 +                break;
    1.29                default:
    1.30                  microarchitecture = Microarchitecture.Unknown;
    1.31                  tjMax = Floats(100);
    1.32 @@ -193,7 +206,8 @@
    1.33          case Microarchitecture.SandyBridge:
    1.34          case Microarchitecture.IvyBridge:
    1.35          case Microarchitecture.Haswell: 
    1.36 -        case Microarchitecture.Broadwell: {
    1.37 +        case Microarchitecture.Broadwell:
    1.38 +        case Microarchitecture.Silvermont: {
    1.39              uint eax, edx;
    1.40              if (Ring0.Rdmsr(MSR_PLATFORM_INFO, out eax, out edx)) {
    1.41                timeStampCounterMultiplier = (eax >> 8) & 0xff;
    1.42 @@ -253,7 +267,8 @@
    1.43        if (microarchitecture == Microarchitecture.SandyBridge ||
    1.44            microarchitecture == Microarchitecture.IvyBridge ||
    1.45            microarchitecture == Microarchitecture.Haswell ||
    1.46 -          microarchitecture == Microarchitecture.Broadwell) 
    1.47 +          microarchitecture == Microarchitecture.Broadwell || 
    1.48 +          microarchitecture == Microarchitecture.Silvermont) 
    1.49        {
    1.50          powerSensors = new Sensor[energyStatusMSRs.Length];
    1.51          lastEnergyTime = new DateTime[energyStatusMSRs.Length];
    1.52 @@ -261,8 +276,14 @@
    1.53  
    1.54          uint eax, edx;
    1.55          if (Ring0.Rdmsr(MSR_RAPL_POWER_UNIT, out eax, out edx))
    1.56 -          energyUnitMultiplier = 1.0f / (1 << (int)((eax >> 8) & 0x1F));
    1.57 -
    1.58 +          switch (microarchitecture) {
    1.59 +            case Microarchitecture.Silvermont:
    1.60 +              energyUnitMultiplier = 1.0e-6f * (1 << (int)((eax >> 8) & 0x1F));
    1.61 +              break;
    1.62 +            default:
    1.63 +              energyUnitMultiplier = 1.0f / (1 << (int)((eax >> 8) & 0x1F));
    1.64 +              break;
    1.65 +          }
    1.66          if (energyUnitMultiplier != 0) {
    1.67            for (int i = 0; i < energyStatusMSRs.Length; i++) {
    1.68              if (!Ring0.Rdmsr(energyStatusMSRs[i], out eax, out edx))
    1.69 @@ -361,7 +382,8 @@
    1.70                case Microarchitecture.SandyBridge:
    1.71                case Microarchitecture.IvyBridge:
    1.72                case Microarchitecture.Haswell: 
    1.73 -              case Microarchitecture.Broadwell: {
    1.74 +              case Microarchitecture.Broadwell:
    1.75 +              case Microarchitecture.Silvermont: {
    1.76                    uint multiplier = (eax >> 8) & 0xff;
    1.77                    coreClocks[i].Value = (float)(multiplier * newBusClock);
    1.78                  } break;
     2.1 --- a/Properties/AssemblyVersion.cs	Sun Dec 28 15:34:37 2014 +0000
     2.2 +++ b/Properties/AssemblyVersion.cs	Sun Dec 28 17:54:26 2014 +0000
     2.3 @@ -10,5 +10,5 @@
     2.4  
     2.5  using System.Reflection;
     2.6  
     2.7 -[assembly: AssemblyVersion("0.6.0.13")]
     2.8 -[assembly: AssemblyInformationalVersion("0.6.0.13 Alpha")]
     2.9 \ No newline at end of file
    2.10 +[assembly: AssemblyVersion("0.6.0.14")]
    2.11 +[assembly: AssemblyInformationalVersion("0.6.0.14 Alpha")]
    2.12 \ No newline at end of file