Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crosshair VI Hero WiFi AC (X370) Support #15

Open
darcagn opened this issue Feb 9, 2022 · 5 comments
Open

Crosshair VI Hero WiFi AC (X370) Support #15

darcagn opened this issue Feb 9, 2022 · 5 comments

Comments

@darcagn
Copy link

darcagn commented Feb 9, 2022

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  
@zeule
Copy link
Owner

zeule commented Feb 10, 2022

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?

@darcagn
Copy link
Author

darcagn commented Feb 10, 2022

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.

@zeule
Copy link
Owner

zeule commented Feb 10, 2022

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?

@zeule
Copy link
Owner

zeule commented Feb 10, 2022

  • 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).

@zeule
Copy link
Owner

zeule commented Feb 10, 2022

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants