# HG changeset patch # User moel.mich # Date 1419789266 0 # Node ID 56d59f52fa2b0dc3fe914fc7dfe60e3855d854de # Parent 520bca5f2a7df6003b1c4b88f68bbd881423d5f1 Added support for Intel Atom N2xxx, D2xxx, C2xxx, E3xxx and Z3xxx CPUs (Fixed Issue 610, Issue 422 and Issue 647). diff -r 520bca5f2a7d -r 56d59f52fa2b Hardware/CPU/IntelCPU.cs --- a/Hardware/CPU/IntelCPU.cs Sun Dec 28 15:34:37 2014 +0000 +++ b/Hardware/CPU/IntelCPU.cs Sun Dec 28 17:54:26 2014 +0000 @@ -24,7 +24,8 @@ SandyBridge, IvyBridge, Haswell, - Broadwell + Broadwell, + Silvermont } private readonly Sensor[] coreTemperatures; @@ -149,6 +150,18 @@ microarchitecture = Microarchitecture.Broadwell; tjMax = GetTjMaxFromMSR(); break; + case 0x36: // Intel Atom S1xxx, D2xxx, N2xxx (32nm) + microarchitecture = Microarchitecture.Atom; + tjMax = GetTjMaxFromMSR(); + break; + case 0x37: // Intel Atom E3xxx, Z3xxx (22nm) + case 0x4A: + case 0x4D: // Intel Atom C2xxx (22nm) + case 0x5A: + case 0x5D: + microarchitecture = Microarchitecture.Silvermont; + tjMax = GetTjMaxFromMSR(); + break; default: microarchitecture = Microarchitecture.Unknown; tjMax = Floats(100); @@ -193,7 +206,8 @@ case Microarchitecture.SandyBridge: case Microarchitecture.IvyBridge: case Microarchitecture.Haswell: - case Microarchitecture.Broadwell: { + case Microarchitecture.Broadwell: + case Microarchitecture.Silvermont: { uint eax, edx; if (Ring0.Rdmsr(MSR_PLATFORM_INFO, out eax, out edx)) { timeStampCounterMultiplier = (eax >> 8) & 0xff; @@ -253,7 +267,8 @@ if (microarchitecture == Microarchitecture.SandyBridge || microarchitecture == Microarchitecture.IvyBridge || microarchitecture == Microarchitecture.Haswell || - microarchitecture == Microarchitecture.Broadwell) + microarchitecture == Microarchitecture.Broadwell || + microarchitecture == Microarchitecture.Silvermont) { powerSensors = new Sensor[energyStatusMSRs.Length]; lastEnergyTime = new DateTime[energyStatusMSRs.Length]; @@ -261,8 +276,14 @@ uint eax, edx; if (Ring0.Rdmsr(MSR_RAPL_POWER_UNIT, out eax, out edx)) - energyUnitMultiplier = 1.0f / (1 << (int)((eax >> 8) & 0x1F)); - + switch (microarchitecture) { + case Microarchitecture.Silvermont: + energyUnitMultiplier = 1.0e-6f * (1 << (int)((eax >> 8) & 0x1F)); + break; + default: + energyUnitMultiplier = 1.0f / (1 << (int)((eax >> 8) & 0x1F)); + break; + } if (energyUnitMultiplier != 0) { for (int i = 0; i < energyStatusMSRs.Length; i++) { if (!Ring0.Rdmsr(energyStatusMSRs[i], out eax, out edx)) @@ -361,7 +382,8 @@ case Microarchitecture.SandyBridge: case Microarchitecture.IvyBridge: case Microarchitecture.Haswell: - case Microarchitecture.Broadwell: { + case Microarchitecture.Broadwell: + case Microarchitecture.Silvermont: { uint multiplier = (eax >> 8) & 0xff; coreClocks[i].Value = (float)(multiplier * newBusClock); } break; diff -r 520bca5f2a7d -r 56d59f52fa2b Properties/AssemblyVersion.cs --- a/Properties/AssemblyVersion.cs Sun Dec 28 15:34:37 2014 +0000 +++ b/Properties/AssemblyVersion.cs Sun Dec 28 17:54:26 2014 +0000 @@ -10,5 +10,5 @@ using System.Reflection; -[assembly: AssemblyVersion("0.6.0.13")] -[assembly: AssemblyInformationalVersion("0.6.0.13 Alpha")] \ No newline at end of file +[assembly: AssemblyVersion("0.6.0.14")] +[assembly: AssemblyInformationalVersion("0.6.0.14 Alpha")] \ No newline at end of file