Added support for Intel Atom N2xxx, D2xxx, C2xxx, E3xxx and Z3xxx CPUs (Fixed Issue 610, Issue 422 and Issue 647).
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