Contribute
Register

Fan speed control on High Sierra

Status
Not open for further replies.
P.S: @RehabMan what is the use of ShiftRight function in ACPI? Also, can I find explanations of these methods in ACPI spec?

Shift right is a bitwise shift right.
Corresponds to the >> operator in C/C++/C#/Java/etc.
Shifting right by 1 is equivalent to divide by 2, shift right by 2 equiv. to divide by 4, shift right by 3 equiv. to divide by 8, etc.
The ACPI spec describes all AML opcodes.
 
The ACPI spec describes all AML opcodes.
Does our version of ACPI code needs to be compatible with macOS kernel. Is there some sort of compatibility checking stuff in kernel?

As, we are using ACPI 6.1 that was released in 2016 but the latest is 6.2

There are two versions of ACPI Spec, normal one and "Errata A" one. I know I have to read normal one but what is "Errata A" one for?

Regards
 
Does our version of ACPI code needs to be compatible with macOS kernel. Is there some sort of compatibility checking stuff in kernel?

As, we are using ACPI 6.1 that was released in 2016 but the latest is 6.2

There are two versions of ACPI Spec, normal one and "Errata A" one. I know I have to read normal one but what is "Errata A" one for?

Regards

Apple's AppleACPIPlatform.kext uses Intel's acpica ACPI runtime, but we never know exactly which version.
Changes to the underlying AML format are not common. I know of only one major addition that broke an old runtime: The external opcode causes Snow Leopard ACPIPlatform.kext to choke.
Changes to iasl/runtime/etc are more common.
Obviously, Apple makes its own rules regarding what parts of ACPI it wants to support and the level of compatibility offered. It is why we need to patch to correct/enable various features.
 
black.dragon74, congratulations on your fan-work updates! I hope the result will be a smooth and precise fan control for your Asus!

Meanwhile I've been investigating 0x97 and it looks like this (believe it or not) is the EC-value to control fans on Asus laptops.
Previously I've noticed that NotebookFanControl uses 151 val for fan control. As RehabMan pointed out 151 DEC is 0x97 HEX.
With RWEverything I was sure that my CPU Fan is on 0x93. Now I understand that 0x93 is CPU Fan and 0x97 is a numerical control of speed from 0 to 9 (my guess) where
0x00 - lowest
0x08 - fastest
0x09 - auto
And this value is stored in: 0x97 = _SB_.PCI0.LPCB.EC0_.TSTP, from default DSDT.

black.dragon74
, can you check this on your laptop? Does your fan also goes crazy at 8 speed? I've just added 2 lines to your SSDT_FAN.aml:
//At top:
External (_SB_.PCI0.LPCB.EC0_.TSTP, FieldUnitObj)
...
//I temporary hardcoded this inside TCPU Method:
Store (0x08, \_SB.PCI0.LPCB.EC0.TSTP)

---
I've also found a very interesting read which will help all Asus laptop users (possibly others too!):
http://forum.notebookreview.com/threads/fan-control-on-asus-prime-ux31-ux31a-ux32a-ux32vd.705656/
And here is for Lenovo (original forum in German, this is Google Translate)

This are the closest solutions to our problem I could get. They use 'native ways' to control fan behavior.
 
I hope the result will be a smooth and precise fan control for your Asus!
All ASUS machines. At least the ones after Haswell. Remember? I prefer to do everything dynamically.
_SB_.PCI0.LPCB.EC0_.TSTP, from default DSDT.
Yes but that won’t let you have precise control. Have a look at QMOD method. I have pushed the source to git. Have a look at the commit and do the relevant changes in your SSDT-FAN or maybe create a new SSDT?
Here you go: https://github.com/black-dragon74/A...mmit/6eb7534279e5cd17cdd6fa0d8e28a8d6aef654ca

Regards
 
With RWEverything I was sure that my CPU Fan is on 0x93. Now I understand that 0x93 is CPU Fan
Correct. If you look inside tachometer method, TACH you’ll see that it stores value in (now split) 2 8 bits registers(AH00, AH01). If you search for them you’ll find out that they are located at offset 0x93 in ECOR in DSDT. But, writing to EC directly is not something I prefer as that would be specific to that specific machine.

If you wanna know correct method then look for methods QMOD and ST98.

ST98 is preferred as it takes only one arg i.e. Max Allowed Fan RPM.

QMOD reuires setting storing your custom RPM in a QFAN variable located in the scope _SB.

Then, you can use Arg as 1 to set max RPM to the QFAN’s value.

I will post a guide soon. Maybe today.

Regards
 
Correct. If you look inside tachometer method, TACH you’ll see that it stores value in (now split) 2 8 bits registers(AH00, AH01). If you search for them you’ll find out that they are located at offset 0x93 in ECOR in DSDT. But, writing to EC directly is not something I prefer as that would be specific to that specific machine.

If you wanna know correct method then look for methods QMOD and ST98.

ST98 is preferred as it takes only one arg i.e. Max Allowed Fan RPM.

QMOD reuires setting storing your custom RPM in a QFAN variable located in the scope _SB.

Then, you can use Arg as 1 to set max RPM to the QFAN’s value.

I will post a guide soon. Maybe today.

Regards


Hi, can you help me with my Hackintosh?

I set up fans speed through the BIOS and they work fine until I put the Hackintosh in sleep.
When it wakes up they goes 100% (and they're very noisy) and I can't even read how many RPM are they doing..

I have latest FakeSMC + plugins.
 
Status
Not open for further replies.
Back
Top