diff --git a/Hardware/CPU/AMD10CPU.cs b/Hardware/CPU/AMD10CPU.cs index 9624119..8f305c9 100644 --- a/Hardware/CPU/AMD10CPU.cs +++ b/Hardware/CPU/AMD10CPU.cs @@ -38,11 +38,13 @@ namespace OpenHardwareMonitor.Hardware.CPU { private const ushort FAMILY_15H_MODEL_00_MISC_CONTROL_DEVICE_ID = 0x1603; private const ushort FAMILY_15H_MODEL_10_MISC_CONTROL_DEVICE_ID = 0x1403; private const ushort FAMILY_15H_MODEL_30_MISC_CONTROL_DEVICE_ID = 0x141D; + private const ushort FAMILY_15H_MODEL_60_MISC_CONTROL_DEVICE_ID = 0x1573; private const ushort FAMILY_16H_MODEL_00_MISC_CONTROL_DEVICE_ID = 0x1533; private const ushort FAMILY_16H_MODEL_30_MISC_CONTROL_DEVICE_ID = 0x1583; private const uint REPORTED_TEMPERATURE_CONTROL_REGISTER = 0xA4; private const uint CLOCK_POWER_TIMING_CONTROL_0_REGISTER = 0xD4; + private const uint F15H_M60H_REPORTED_TEMP_CTRL_OFFSET = 0xD8200CA4; private readonly uint miscellaneousControlAddress; private readonly ushort miscellaneousControlDeviceId; @@ -79,6 +81,8 @@ namespace OpenHardwareMonitor.Hardware.CPU { FAMILY_15H_MODEL_10_MISC_CONTROL_DEVICE_ID; break; case 0x30: miscellaneousControlDeviceId = FAMILY_15H_MODEL_30_MISC_CONTROL_DEVICE_ID; break; + case 0x60: miscellaneousControlDeviceId = + FAMILY_15H_MODEL_60_MISC_CONTROL_DEVICE_ID; break; default: miscellaneousControlDeviceId = 0; break; } break; case 0x16: @@ -303,6 +307,15 @@ namespace OpenHardwareMonitor.Hardware.CPU { if (temperatureStream == null) { if (miscellaneousControlAddress != Ring0.InvalidPciAddress) { uint value; + if (miscellaneousControlAddress == FAMILY_15H_MODEL_60_MISC_CONTROL_DEVICE_ID) { + value = F15H_M60H_REPORTED_TEMP_CTRL_OFFSET; + Ring0.WritePciConfig(Ring0.GetPciAddress(0, 0, 0), 0xB8, value); + Ring0.ReadPciConfig(Ring0.GetPciAddress(0, 0, 0), 0xBC, out value); + coreTemperature.Value = ((value >> 21) & 0x7FF) * 0.125f + + coreTemperature.Parameters[0].Value; + ActivateSensor(coreTemperature); + return; + } if (Ring0.ReadPciConfig(miscellaneousControlAddress, REPORTED_TEMPERATURE_CONTROL_REGISTER, out value)) { if (family == 0x15 && (value & 0x30000) == 0x30000) {