Skip to content

Commit f6ab759

Browse files
authored
Add support for a number of X870 and Z890 MSI Motherboards using NCT6687D chips
1 parent 210fb7b commit f6ab759

File tree

4 files changed

+110
-13
lines changed

4 files changed

+110
-13
lines changed

LibreHardwareMonitorLib/Hardware/Motherboard/Identification.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,20 @@ public static Model GetModel(string name)
615615
return Model.PRIME_X870_P;
616616
case var _ when name.Equals("ROG CROSSHAIR X870E HERO", StringComparison.OrdinalIgnoreCase):
617617
return Model.ROG_CROSSHAIR_X870E_HERO;
618+
case var _ when name.Equals("MAG X870 TOMAHAWK WIFI (MS-7E51)", StringComparison.OrdinalIgnoreCase):
619+
return Model.X870_TOMAHAWK_WIFI;
620+
case var _ when name.Equals("MPG Z890 CARBON WIFI (MS-7E17)", StringComparison.OrdinalIgnoreCase):
621+
return Model.Z890_CARBON_WIFI;
622+
case var _ when name.Equals("B650M PROJECT ZERO (MS-7E09)", StringComparison.OrdinalIgnoreCase):
623+
return Model.B650M_PROJECT_ZERO;
624+
case var _ when name.Equals("MAG X870E TOMAHAWK WIFI (MS-7E59)", StringComparison.OrdinalIgnoreCase):
625+
return Model.X870E_TOMAHAWK_WIFI;
626+
case var _ when name.Equals("MPG X870E CARBON WIFI (MS-7E49)", StringComparison.OrdinalIgnoreCase):
627+
return Model.X870E_CARBON_WIFI;
628+
case var _ when name.Equals("PRO X870-P WIFI (MS-7E47)", StringComparison.OrdinalIgnoreCase):
629+
return Model.X870_P_WIFI;
630+
case var _ when name.Equals("MPG Z890 EDGE TI WIFI (MS-7E19)", StringComparison.OrdinalIgnoreCase):
631+
return Model.Z890_EDGE_TI_WIFI;
618632
case var _ when name.Equals("Base Board Product Name", StringComparison.OrdinalIgnoreCase):
619633
case var _ when name.Equals("To be filled by O.E.M.", StringComparison.OrdinalIgnoreCase):
620634
return Model.Unknown;

LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/Nct677X.cs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,12 @@ public Nct677X(Chip chip, byte revision, ushort port, LpcPort lpcPort)
6969

7070
_vBatMonitorControlRegister = 0x0318;
7171
}
72-
else if (chip is Chip.NCT6683D or Chip.NCT6686D or Chip.NCT6687D)
72+
else if (chip is Chip.NCT6683D or Chip.NCT6686D or Chip.NCT6687D) //These work on older NCT6687D boards, but only the first 3 fans on newer (X870 and Z890) motherboards. Unsure of controls for "next 8".
7373
{
74-
FAN_PWM_OUT_REG = new ushort[] { 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167 };
75-
FAN_PWM_COMMAND_REG = new ushort[] { 0xA28, 0xA29, 0xA2A, 0xA2B, 0xA2C, 0xA2D, 0xA2E, 0xA2F };
76-
FAN_CONTROL_MODE_REG = new ushort[] { 0xA00, 0xA00, 0xA00, 0xA00, 0xA00, 0xA00, 0xA00, 0xA00 };
77-
FAN_PWM_REQUEST_REG = new ushort[] { 0xA01, 0xA01, 0xA01, 0xA01, 0xA01, 0xA01, 0xA01, 0xA01 };
74+
FAN_PWM_OUT_REG = new ushort[] { 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167 }; // Next 8 fans will be 0xE00, 0xE01, 0xE02, 0xE03, 0xE04, 0xE05, 0xE06, 0xE07
75+
FAN_PWM_COMMAND_REG = new ushort[] { 0xA28, 0xA29, 0xA2A, 0xA2B, 0xA2C, 0xA2D, 0xA2E, 0xA2F }; // Possibly 0X260, 0X261, 0X262, 0X263, 0X264, 0X265, 0X266, 0X267 but can't confirm
76+
FAN_CONTROL_MODE_REG = new ushort[] { 0xA00, 0xA00, 0xA00, 0xA00, 0xA00, 0xA00, 0xA00, 0xA00 }; // Not sure of next 8, MSI won't provide info
77+
FAN_PWM_REQUEST_REG = new ushort[] { 0xA01, 0xA01, 0xA01, 0xA01, 0xA01, 0xA01, 0xA01, 0xA01 }; // Not sure of next 8, MSI won't provide info
7878
}
7979
else
8080
{
@@ -269,7 +269,7 @@ public Nct677X(Chip chip, byte revision, ushort port, LpcPort lpcPort)
269269
case Chip.NCT6683D:
270270
case Chip.NCT6686D:
271271
case Chip.NCT6687D:
272-
Fans = new float?[8];
272+
Fans = new float?[16];
273273
Controls = new float?[8];
274274
Voltages = new float?[14];
275275
Temperatures = new float?[7];
@@ -309,13 +309,19 @@ public Nct677X(Chip chip, byte revision, ushort port, LpcPort lpcPort)
309309

310310
// CPU Fan
311311
// PUMP Fan
312-
// SYS Fan 1
313-
// SYS Fan 2
314-
// SYS Fan 3
315-
// SYS Fan 4
316-
// SYS Fan 5
317-
// SYS Fan 6
318-
_fanRpmRegister = new ushort[] { 0x140, 0x142, 0x144, 0x146, 0x148, 0x14A, 0x14C, 0x14E };
312+
// SYS Fan 1 on some older NCT6687Ds, Nil on others
313+
// SYS Fan 2 on some older NCT6687Ds, EZConn on others
314+
// SYS Fan 3 on some older NCT6687Ds
315+
// SYS Fan 4 on some older NCT6687Ds
316+
// SYS Fan 5 on some older NCT6687Ds
317+
// SYS Fan 6 on some older NCT6687Ds
318+
// SYS Fan 6 on newer NCT6687Ds
319+
// SYS Fan 5 on newer NCT6687Ds
320+
// SYS Fan 4 on newer NCT6687Ds
321+
// SYS Fan 3 on newer NCT6687Ds
322+
// SYS Fan 2 on newer NCT6687Ds
323+
// SYS Fan 1 on newer NCT6687Ds
324+
_fanRpmRegister = new ushort[] { 0x140, 0x142, 0x144, 0x146, 0x148, 0x14A, 0x14C, 0x14E, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15A, 0x15C, 0x15E };
319325

320326
_restoreDefaultFanControlRequired = new bool[_fanRpmRegister.Length];
321327
_initialFanControlMode = new byte[_fanRpmRegister.Length];

LibreHardwareMonitorLib/Hardware/Motherboard/Model.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,13 @@ public enum Model
135135
Z77_MS7751,
136136
Z68_MS7672,
137137
X570_Gaming_Plus,
138+
X870_TOMAHAWK_WIFI,
139+
Z890_CARBON_WIFI,
140+
B650M_PROJECT_ZERO,
141+
X870E_TOMAHAWK_WIFI,
142+
X870E_CARBON_WIFI,
143+
X870_P_WIFI,
144+
Z890_EDGE_TI_WIFI,
138145

139146
// EVGA
140147
X58_SLI_Classified,

LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,76 @@ private static void GetBoardSpecificConfiguration
455455

456456
break;
457457

458+
case Manufacturer.MSI when model == Model.X870_TOMAHAWK_WIFI: //NCT6687D with 9 fans
459+
case Manufacturer.MSI when model == Model.X870_TOMAHAWK_WIFI:
460+
case Manufacturer.MSI when model == Model.Z890_CARBON_WIFI:
461+
case Manufacturer.MSI when model == Model.X870E_TOMAHAWK_WIFI:
462+
case Manufacturer.MSI when model == Model.X870E_CARBON_WIFI:
463+
case Manufacturer.MSI when model == Model.X870_P_WIFI:
464+
case Manufacturer.MSI when model == Model.Z890_EDGE_TI_WIFI:
465+
v.Add(new Voltage("+12V", 0));
466+
v.Add(new Voltage("+5V", 1));
467+
v.Add(new Voltage("CPU Northbridge/SoC", 2));
468+
v.Add(new Voltage("VDDIO", 3, 1, 1, 0));
469+
v.Add(new Voltage("Vcore", 4, -1, 2, 0));
470+
v.Add(new Voltage("+3.3V", 8));
471+
v.Add(new Voltage("+3V Standby", 11));
472+
v.Add(new Voltage("AVSB", 12));
473+
v.Add(new Voltage("CPU Termination", 9));
474+
v.Add(new Voltage("CMOS Battery", 13));
475+
476+
t.Add(new Temperature("CPU", 0));
477+
t.Add(new Temperature("System", 1));
478+
t.Add(new Temperature("VRM MOS", 2));
479+
t.Add(new Temperature("Chipset A", 3));
480+
481+
f.Add(new Fan("CPU Fan", 0));
482+
f.Add(new Fan("Pump Fan", 1));
483+
f.Add(new Fan("EZConn Fan", 3));
484+
f.Add(new Fan("System Fan #Sys Fan 6", 10));
485+
f.Add(new Fan("System Fan #Sys Fan 5", 11));
486+
f.Add(new Fan("System Fan #Sys Fan 4", 12));
487+
f.Add(new Fan("System Fan #Sys Fan 3", 13));
488+
f.Add(new Fan("System Fan #Sys Fan 2", 14));
489+
f.Add(new Fan("System Fan #Sys Fan 1", 15));
490+
491+
c.Add(new Control("CPU Fan", 0));
492+
c.Add(new Control("Pump Fan", 1));
493+
c.Add(new Control("EZConn Fan", 3));
494+
break;
495+
496+
case Manufacturer.MSI when model == Model.Z890_CARBON_WIFI: //NCT6687D with 8 fans
497+
case Manufacturer.MSI when model == Model.X870E_CARBON_WIFI:
498+
v.Add(new Voltage("+12V", 0));
499+
v.Add(new Voltage("+5V", 1));
500+
v.Add(new Voltage("CPU Northbridge/SoC", 2));
501+
v.Add(new Voltage("VDDIO", 3, 1, 1, 0));
502+
v.Add(new Voltage("Vcore", 4, -1, 2, 0));
503+
v.Add(new Voltage("+3.3V", 8));
504+
v.Add(new Voltage("+3V Standby", 11));
505+
v.Add(new Voltage("AVSB", 12));
506+
v.Add(new Voltage("CPU Termination", 9));
507+
v.Add(new Voltage("CMOS Battery", 13));
508+
509+
t.Add(new Temperature("CPU", 0));
510+
t.Add(new Temperature("System", 1));
511+
t.Add(new Temperature("VRM MOS", 2));
512+
t.Add(new Temperature("Chipset A", 3));
513+
514+
f.Add(new Fan("CPU Fan", 0));
515+
f.Add(new Fan("Pump Fan", 1));
516+
f.Add(new Fan("EZConn Fan", 3));
517+
f.Add(new Fan("System Fan #Sys Fan 5", 11));
518+
f.Add(new Fan("System Fan #Sys Fan 4", 12));
519+
f.Add(new Fan("System Fan #Sys Fan 3", 13));
520+
f.Add(new Fan("System Fan #Sys Fan 2", 14));
521+
f.Add(new Fan("System Fan #Sys Fan 1", 15));
522+
523+
c.Add(new Control("CPU Fan", 0));
524+
c.Add(new Control("Pump Fan", 1));
525+
c.Add(new Control("EZConn Fan", 3));
526+
break;
527+
458528
default:
459529
v.Add(new Voltage("+12V", 0));
460530
v.Add(new Voltage("+5V", 1));

0 commit comments

Comments
 (0)