Merge pull request #816 from cmoetzing/airmont

Add support for Intel Airmont microarchitecture
This commit is contained in:
Michael Möller 2016-11-06 10:46:48 +01:00 committed by GitHub
commit dbb77c9ee8

View File

@ -26,7 +26,8 @@ namespace OpenHardwareMonitor.Hardware.CPU {
Haswell, Haswell,
Broadwell, Broadwell,
Silvermont, Silvermont,
Skylake Skylake,
Airmont
} }
private readonly Sensor[] coreTemperatures; private readonly Sensor[] coreTemperatures;
@ -171,6 +172,10 @@ namespace OpenHardwareMonitor.Hardware.CPU {
microarchitecture = Microarchitecture.Skylake; microarchitecture = Microarchitecture.Skylake;
tjMax = GetTjMaxFromMSR(); tjMax = GetTjMaxFromMSR();
break; break;
case 0x4C:
microarchitecture = Microarchitecture.Airmont;
tjMax = GetTjMaxFromMSR();
break;
default: default:
microarchitecture = Microarchitecture.Unknown; microarchitecture = Microarchitecture.Unknown;
tjMax = Floats(100); tjMax = Floats(100);
@ -217,7 +222,8 @@ namespace OpenHardwareMonitor.Hardware.CPU {
case Microarchitecture.Haswell: case Microarchitecture.Haswell:
case Microarchitecture.Broadwell: case Microarchitecture.Broadwell:
case Microarchitecture.Silvermont: case Microarchitecture.Silvermont:
case Microarchitecture.Skylake: { case Microarchitecture.Skylake:
case Microarchitecture.Airmont: {
uint eax, edx; uint eax, edx;
if (Ring0.Rdmsr(MSR_PLATFORM_INFO, out eax, out edx)) { if (Ring0.Rdmsr(MSR_PLATFORM_INFO, out eax, out edx)) {
timeStampCounterMultiplier = (eax >> 8) & 0xff; timeStampCounterMultiplier = (eax >> 8) & 0xff;
@ -279,7 +285,8 @@ namespace OpenHardwareMonitor.Hardware.CPU {
microarchitecture == Microarchitecture.Haswell || microarchitecture == Microarchitecture.Haswell ||
microarchitecture == Microarchitecture.Broadwell || microarchitecture == Microarchitecture.Broadwell ||
microarchitecture == Microarchitecture.Skylake || microarchitecture == Microarchitecture.Skylake ||
microarchitecture == Microarchitecture.Silvermont) microarchitecture == Microarchitecture.Silvermont ||
microarchitecture == Microarchitecture.Airmont)
{ {
powerSensors = new Sensor[energyStatusMSRs.Length]; powerSensors = new Sensor[energyStatusMSRs.Length];
lastEnergyTime = new DateTime[energyStatusMSRs.Length]; lastEnergyTime = new DateTime[energyStatusMSRs.Length];
@ -289,6 +296,7 @@ namespace OpenHardwareMonitor.Hardware.CPU {
if (Ring0.Rdmsr(MSR_RAPL_POWER_UNIT, out eax, out edx)) if (Ring0.Rdmsr(MSR_RAPL_POWER_UNIT, out eax, out edx))
switch (microarchitecture) { switch (microarchitecture) {
case Microarchitecture.Silvermont: case Microarchitecture.Silvermont:
case Microarchitecture.Airmont:
energyUnitMultiplier = 1.0e-6f * (1 << (int)((eax >> 8) & 0x1F)); energyUnitMultiplier = 1.0e-6f * (1 << (int)((eax >> 8) & 0x1F));
break; break;
default: default: