zeule / asus-ec-sensors

Linux HWMON sensors driver for ASUS motherboards to get sensor readings from the embedded controller

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Crosshair VI Hero WiFi AC (X370) Support

darcagn opened this issue · comments

board_name: ROG CROSSHAIR VI HERO (WI-FI AC)
mutex name: \AMW0.ASMX (same as others)

This board is being used in an Ubuntu LTS server with an older 5.4 kernel -- it was unable to compile at first because linux/dev_printk.h and linux/units.h weren't found. I removed the includes for those two header files and it seems to compile and work just fine, but I am unsure if functionality has been affected.

These sensors work just fine and match the same output from asus-wmi-sensors:
SENSOR_SET_TEMP_CHIPSET_CPU_MB | SENSOR_TEMP_T_SENSOR | SENSOR_CURR_CPU

SENSOR_FAN_CPU_OPT_X470 is the same situation as the X470 board, CPU_OPT is at 0x00bc (in place of Water_Flow for 500-series).

I plugged in fans/probes to the other sensor connectors and could not get a reading from any other sensor, including CPU voltage. I didn't get to poke around the registers with this board though, so there may be other undiscovered sensors exposed in the EC.

I have attached the DSDT file for this board if it helps.
ROG CROSSHAIR VI HERO (WI-FI AC).zip

Example output with fan plugged into CPU_OPT and temp probe attached to T_SENSOR:

asusec-isa-0000
Adapter: ISA adapter
CPU Core:      0.00 V  
CPU_Opt:        0 RPM
VRM HS:         0 RPM
Chipset:        0 RPM
Water_Flow:  1336 RPM
Chipset:      +53.0°C  
CPU:          +45.0°C  
Motherboard:  +34.0°C  
T_Sensor:     +27.0°C  
VRM:          +35.0°C  
Water_In:      +0.0°C  
Water_Out:     +0.0°C  
CPU:           2.00 A  

asuswmisensors-isa-0000
Adapter: ISA adapter
CPU Core Voltage:          1.53 V  
CPU SOC Voltage:           1.13 V  
DRAM Voltage:              1.37 V  
VDDP Voltage:            916.00 mV 
1.8V PLL Voltage:          1.83 V  
+12V Voltage:             12.10 V  
+5V Voltage:               4.99 V  
3VSB Voltage:              3.31 V  
VBAT Voltage:              3.14 V  
AVCC3 Voltage:             3.33 V  
SB 1.05V Voltage:          1.05 V  
CPU Fan:                 1824 RPM
Chassis Fan 1:            876 RPM
Chassis Fan 2:            854 RPM
Chassis Fan 3:            854 RPM
AIO Pump:                   0 RPM
Water Pump:                 0 RPM
CPU OPT:                 1336 RPM
Water Flow:                 0 RPM
CPU Temperature:          +45.0°C  
CPU Socket Temperature:   +36.0°C  
Motherboard Temperature:  +34.0°C  
Chipset Temperature:      +53.0°C  
Tsensor 1 Temperature:    +27.0°C  
CPU VRM Temperature:      +35.0°C  
Water In:                +216.0°C  
Water Out:               +216.0°C  
CPU VRM Output Current:    2.00 A  

Summary for this board.

The UPEC method fills in 9 sensors, numbered 19 to 27 (0x13 to 0x1b):

Method (UPEC, 0, Serialized)
{
	If ((Acquire (_GL, 0x03E8) == Zero))
	{
		WECB (Zero)
		Local0 = REC1 (0x90)
		Local1 = REC1 (0x91)
		Local0 = ((Local0 << 0x08) | Local1)
		Local0 *= 0x0C35
		NU19 = Local0
		Local0 = REC1 (0x3A)
		NU20 = Local0
		Local0 = REC1 (0x3D)
		NU21 = Local0
		Local0 = REC1 (0x3E)
		NU22 = Local0
		Local0 = REC1 (0xF4)
		NU23 = Local0
		Local0 = REC1 (0xBC)
		Local1 = REC1 (0xBD)
		Local0 = ((Local0 << 0x08) | Local1)
		NU24 = Local0
		Local0 = REC2 (One, 0x0D)
		NU25 = Local0
		Local0 = REC2 (One, 0x0B)
		NU26 = Local0
		Local0 = REC2 (Zero, 0xB4)
		Local1 = REC2 (Zero, 0xB5)
		Local0 = ((Local0 << 0x08) | Local1)
		NU27 = Local0
		Release (_GL)
		Return (Zero)
	}

	Return (Ones)
}

Corresponding records from the INFO package:

Package (0x06)
{
	"SB 1.05V Voltage", 
	Zero, 
	0x03, 
	0x02, 
	0x03, 
	0x13
}, 

Package (0x06)
{
	"Chipset Temperature", 
	One, 
	0x04, 
	0x02, 
	Zero, 
	0x14
}, 

Package (0x06)
{
	"Tsensor 1 Temperature", 
	One, 
	0x05, 
	0x02, 
	Zero, 
	0x15
}, 

Package (0x06)
{
	"CPU VRM Temperature", 
	One, 
	0x06, 
	0x02, 
	Zero, 
	0x16
}, 

Package (0x06)
{
	"CPU VRM Output Current", 
	0x03, 
	0x06, 
	0x02, 
	One, 
	0x17
}, 

Package (0x06)
{
	"CPU OPT", 
	0x02, 
	0x03, 
	0x02, 
	One, 
	0x18
}, 

Package (0x06)
{
	"Water In", 
	One, 
	0x07, 
	0x02, 
	Zero, 
	0x19
}, 

Package (0x06)
{
	"Water Out", 
	One, 
	0x07, 
	0x02, 
	Zero, 
	0x1A
}, 

Package (0x06)
{
	"Water Flow", 
	0x04, 
	0x07, 
	0x02, 
	One, 
	0x1B
}
Label source size address notes
SB 1.05V Voltage REC1 2 0x90 *= 0x0C35
Chipset Temperature REC1 1 0x3a
Tsensor 1 Temperature REC1 1 0x3d
CPU VRM Temperature REC1 1 0x3e
CPU VRM Output Current REC1 1 0xf4
CPU OPT REC1 2 0xbc
Water In REC2 1 0x01, 0x0d
Water Out REC2 1 0x01, 0x0b
Water Flow REC2 2 0xb4

Now, what does REC2() do?

Recompiling and testing with these new values:

  • SB 1.05V Voltage shows up, but it's only showing about 338mV when asus-wmi-sensors shows 1.06V. I don't know what the *=0x0C35 means, though.
  • Chipset Temp, Tsensor 1 Temp, CPU VRM Temp, CPU VRM Current, and CPU OPT values are working properly and agree with asus-wmi-sensors.
  • The three sensors showing REC2 don't work, I guess something else has to be changed.

Now, what does REC2() do?

Here is its code:

Method (REC2, 2, Serialized)
{
    IBFY ()
    EC6C = 0x91
    IBFY ()
    EC68 = 0xFF
    IBFY ()
    EC68 = Arg0
    IBFY ()
    EC6C = 0x90
    IBFY ()
    EC68 = Arg1
    OBFY ()
    Local0 = EC68 /* \AMW0.EC68 */
    Return (Local0)
}

Looks like it reads from a EC controller via ports 0x68 and 0x6c, but what are constants 0x91 and 0x90 for?

  • SB 1.05V Voltage shows up, but it's only showing about 338mV when asus-wmi-sensors shows 1.06V. I don't know what the *=0x0C35 means, though.

I guess it is a conversion factor to volts. 0x0C35 (=3125) * 0.338 = 1.056, which is pretty close to 1.06.

  • Chipset Temp, Tsensor 1 Temp, CPU VRM Temp, CPU VRM Current, and CPU OPT values are working properly and agree with asus-wmi-sensors.

Great!

  • The three sensors showing REC2 don't work, I guess something else has to be changed.

They need to be read via other EC ports (see REC2() above).

I guess it is a conversion factor to volts. 0x0C35 (=3125) * 0.338 = 1.056, which is pretty close to 1.06.

Sorry, to µV, of course: 3125 * 338 * 1e-6 = 1.05625