Foundational support for all MSI B840/B850, X870(E), and Z890 Motherboards (#2216)

* Add support for MSI MAG B850 Tomahawk Wifi (non-max) using NCT6687DR Controller

* Handle MSI NCT6687DR SIO Controller declaration more elegantly

This is a more powerful yet elegant way of handling MSI motherboards with the MSI flavored Nuvoton NCT6687D (aka NCT6687D-R). While it still requires that support be manually added for each motherboard so it be properly identified, this reduces the amount of work to add support and also reduces the amount of clutter in LpcIO.cs.

* Add support for MSI MEG X870E ACE MAX

* Foundational support for ALL MSI B840/B850, X870(E), and Z890 Motherboards!

Assigns all MSI B840, B850, X870, X870E and Z890 motherboards the NCT6687D-R SIO Controller

* Remove MSI B850 GAMING PLUS WIFI6E NCT6687D handling

* Used more stringent comparison criteria for MSI 800 series NCT6687DR identification
This commit is contained in:
Alcolawl
2026-02-13 18:13:20 +01:00
committed by GitHub
parent 7caca88771
commit d8a41b3313
4 changed files with 34 additions and 88 deletions
@@ -739,6 +739,8 @@ internal class Identification
return Model.X870E_CARBON_WIFI;
case var _ when name.Equals("MPG X870E EDGE TI WIFI (MS-7E59)", StringComparison.OrdinalIgnoreCase):
return Model.X870E_EDGE_TI_WIFI;
case var _ when name.Equals("MEG X870E ACE MAX (MS-7E85)", StringComparison.OrdinalIgnoreCase):
return Model.X870E_ACE_MAX;
case var _ when name.Equals("MEG Z790 GODLIKE MAX (MS-7D85)", StringComparison.OrdinalIgnoreCase):
return Model.Z790_GODLIKE_MAX;
case var _ when name.Equals("MEG Z890 ACE (MS-7E22)", StringComparison.OrdinalIgnoreCase):
@@ -410,51 +410,17 @@ internal class LpcIO
switch (revision)
{
case 0x92:
switch (motherboard.Model)
// MSI AM5/LGA1851 800 Series Motherboard Compatibility (Nuvoton NCT6687DR)
if (motherboard.Manufacturer == Manufacturer.MSI && (motherboard.SMBios.Board.ProductName.ToString().Contains("B840", StringComparison.OrdinalIgnoreCase) ||
motherboard.SMBios.Board.ProductName.ToString().Contains("B850", StringComparison.OrdinalIgnoreCase) ||
motherboard.SMBios.Board.ProductName.ToString().Contains("X870", StringComparison.OrdinalIgnoreCase) ||
motherboard.SMBios.Board.ProductName.ToString().Contains("Z890", StringComparison.OrdinalIgnoreCase)))
{
case Model.B840P_PRO_WIFI:
case Model.B840M_GAMING_PLUS_WIFI6E:
case Model.B850_GAMING_PLUS_WIFI:
case Model.B850_GAMING_PLUS_WIFI_PZ:
case Model.B850M_GAMING_PLUS_WIFI:
case Model.B850M_GAMING_PLUS_WIFI6E:
case Model.B850P_PRO_WIFI:
case Model.B850MA_PRO_WIFI:
case Model.B850MA_PRO_WIFI_PZ:
case Model.B850MP_PRO_WIFI:
case Model.B850M_MORTAR:
case Model.B850M_MORTAR_WIFI:
case Model.B850_TOMAHAWK_WIFI:
case Model.B850_TOMAHAWK_MAX_WIFI:
case Model.B850_EDGE_TI_WIFI:
case Model.B850I_EDGE_TI_WIFI:
case Model.B850MPOWER:
case Model.B850S_PRO_WIFI6E:
case Model.X870_GAMING_PLUS_WIFI:
case Model.X870E_GAMING_PLUS_WIFI:
case Model.X870_TOMAHAWK_WIFI:
case Model.X870P_PRO_WIFI:
case Model.X870EP_PRO_WIFI:
case Model.X870E_TOMAHAWK_WIFI:
case Model.X870E_TOMAHAWK_MAX_WIFI_PZ:
case Model.X870E_CARBON_WIFI:
case Model.X870E_EDGE_TI_WIFI:
case Model.X870E_GODLIKE:
case Model.Z890_ACE:
case Model.Z890_CARBON_WIFI:
case Model.Z890_GAMING_PLUS_WIFI:
case Model.Z890_TOMAHAWK_WIFI:
case Model.Z890_UNIFY_X:
case Model.Z890_EDGE_TI_WIFI:
case Model.Z890I_EDGE_TI_WIFI:
case Model.Z890P_PRO_WIFI:
case Model.Z890A_PRO_WIFI:
case Model.Z890S_PRO_WIFI:
chip = Chip.NCT6687DR; // MSI AM5/LGA1851 Compatibility
break;
default:
chip = Chip.NCT6687D;
break;
chip = Chip.NCT6687DR;
}
else
{
chip = Chip.NCT6687D;
}
logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN;
@@ -187,6 +187,7 @@ public enum Model
X870EP_PRO_WIFI,
X870E_CARBON_WIFI,
X870E_EDGE_TI_WIFI,
X870E_ACE_MAX,
Z790_GODLIKE_MAX,
Z890_ACE,
Z890_TOMAHAWK_WIFI,
@@ -580,50 +580,6 @@ internal sealed class SuperIOHardware : Hardware
break;
case Manufacturer.MSI when model == Model.B850_GAMING_PLUS_WIFI6E: // NCT6687D
v.Add(new Voltage("+12V", 0));
v.Add(new Voltage("+5V", 1));
v.Add(new Voltage("Vcore", 2));
v.Add(new Voltage("Voltage #1", 3));
v.Add(new Voltage("DIMM", 4));
v.Add(new Voltage("CPU I/O", 5));
v.Add(new Voltage("CPU System Agent", 6));
v.Add(new Voltage("Voltage #2", 7));
v.Add(new Voltage("AVCC3", 8));
v.Add(new Voltage("CPU Termination", 9));
v.Add(new Voltage("VRef", 10));
v.Add(new Voltage("VSB", 11));
v.Add(new Voltage("AVSB", 12));
v.Add(new Voltage("CMOS Battery", 13));
t.Add(new Temperature("CPU", 0));
t.Add(new Temperature("System", 1));
t.Add(new Temperature("VRM MOS", 2));
t.Add(new Temperature("PCH", 3));
t.Add(new Temperature("CPU Socket", 4));
t.Add(new Temperature("PCIe x1", 5));
t.Add(new Temperature("M2 #1", 6));
f.Add(new Fan("CPU Fan", 0));
f.Add(new Fan("Pump Fan", 1));
f.Add(new Fan("System Fan #1", 15));
f.Add(new Fan("System Fan #2", 14));
f.Add(new Fan("System Fan #3", 13));
f.Add(new Fan("System Fan #4", 12));
f.Add(new Fan("System Fan #5", 11));
f.Add(new Fan("System Fan #6", 10));
c.Add(new Control("CPU Fan", 0));
c.Add(new Control("Pump Fan", 1));
c.Add(new Control("System Fan #1", 2));
c.Add(new Control("System Fan #2", 3));
c.Add(new Control("System Fan #3", 4));
c.Add(new Control("System Fan #4", 5));
c.Add(new Control("System Fan #5", 6));
c.Add(new Control("System Fan #6", 7));
break;
default:
v.Add(new Voltage("+12V", 0));
v.Add(new Voltage("+5V", 1));
@@ -725,6 +681,27 @@ internal sealed class SuperIOHardware : Hardware
break;
case Model.X870E_ACE_MAX:
v.Add(new Voltage("+12V", 0));
v.Add(new Voltage("+5V", 1));
v.Add(new Voltage("CPU Northbridge/SoC", 2));
v.Add(new Voltage("DIMM", 3, 1, 1));
v.Add(new Voltage("Vcore", 4, -1, 2));
v.Add(new Voltage("Chipset", 5));
v.Add(new Voltage("CPU System Agent", 6));
//v.Add(new Voltage("Unknown_4", 7)); //"Voltage #2"
v.Add(new Voltage("+3.3V", 8));
v.Add(new Voltage("VREF", 9));
v.Add(new Voltage("+1.8V", 10));
v.Add(new Voltage("+3V Standby", 11));
v.Add(new Voltage("AVSB", 12));
v.Add(new Voltage("CMOS Battery", 13));
t.Add(new Temperature("Chipset #2", 5));
t.Add(new Temperature("Thermistor Sensor", 6));
break;
case Model.X870E_CARBON_WIFI:
case Model.X870E_GODLIKE:
f.Add(new Fan("System Fan #7", 9));