Skip to content

Commit 65c0d3e

Browse files
rmattuschkamoellerm
authored andcommitted
add temp support for the AMD Athlon X4 845
1 parent 887c956 commit 65c0d3e

1 file changed

Lines changed: 13 additions & 0 deletions

File tree

Hardware/CPU/AMD10CPU.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,13 @@ internal sealed class AMD10CPU : AMDCPU {
3838
private const ushort FAMILY_15H_MODEL_00_MISC_CONTROL_DEVICE_ID = 0x1603;
3939
private const ushort FAMILY_15H_MODEL_10_MISC_CONTROL_DEVICE_ID = 0x1403;
4040
private const ushort FAMILY_15H_MODEL_30_MISC_CONTROL_DEVICE_ID = 0x141D;
41+
private const ushort FAMILY_15H_MODEL_60_MISC_CONTROL_DEVICE_ID = 0x1573;
4142
private const ushort FAMILY_16H_MODEL_00_MISC_CONTROL_DEVICE_ID = 0x1533;
4243
private const ushort FAMILY_16H_MODEL_30_MISC_CONTROL_DEVICE_ID = 0x1583;
4344

4445
private const uint REPORTED_TEMPERATURE_CONTROL_REGISTER = 0xA4;
4546
private const uint CLOCK_POWER_TIMING_CONTROL_0_REGISTER = 0xD4;
47+
private const uint F15H_M60H_REPORTED_TEMP_CTRL_OFFSET = 0xD8200CA4;
4648

4749
private readonly uint miscellaneousControlAddress;
4850
private readonly ushort miscellaneousControlDeviceId;
@@ -79,6 +81,8 @@ public AMD10CPU(int processorIndex, CPUID[][] cpuid, ISettings settings)
7981
FAMILY_15H_MODEL_10_MISC_CONTROL_DEVICE_ID; break;
8082
case 0x30: miscellaneousControlDeviceId =
8183
FAMILY_15H_MODEL_30_MISC_CONTROL_DEVICE_ID; break;
84+
case 0x60: miscellaneousControlDeviceId =
85+
FAMILY_15H_MODEL_60_MISC_CONTROL_DEVICE_ID; break;
8286
default: miscellaneousControlDeviceId = 0; break;
8387
} break;
8488
case 0x16:
@@ -303,6 +307,15 @@ public override void Update() {
303307
if (temperatureStream == null) {
304308
if (miscellaneousControlAddress != Ring0.InvalidPciAddress) {
305309
uint value;
310+
if (miscellaneousControlAddress == FAMILY_15H_MODEL_60_MISC_CONTROL_DEVICE_ID) {
311+
value = F15H_M60H_REPORTED_TEMP_CTRL_OFFSET;
312+
Ring0.WritePciConfig(Ring0.GetPciAddress(0, 0, 0), 0xB8, value);
313+
Ring0.ReadPciConfig(Ring0.GetPciAddress(0, 0, 0), 0xBC, out value);
314+
coreTemperature.Value = ((value >> 21) & 0x7FF) * 0.125f +
315+
coreTemperature.Parameters[0].Value;
316+
ActivateSensor(coreTemperature);
317+
return;
318+
}
306319
if (Ring0.ReadPciConfig(miscellaneousControlAddress,
307320
REPORTED_TEMPERATURE_CONTROL_REGISTER, out value)) {
308321
if (family == 0x15 && (value & 0x30000) == 0x30000) {

0 commit comments

Comments
 (0)