-
Notifications
You must be signed in to change notification settings - Fork 26
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
PSC function support for DYTC 4.2+ #110
Comments
Available DYTC modes may vary in different models. However, only documented modes in https://patchwork.kernel.org/project/linux-acpi/patch/[email protected]/ is added. Other modes in DSDT are just made into unused macro. If you are interested in further investigation, you can try following steps and maybe can find something useful.
|
After some more investigation, there seem to be 8 performance modes for the 0xD (13) command. ioio -s ThinkVPC DYTCMode 0x11D001 ioio -s ThinkVPC DYTCMode 0x12D001 & etc Modes 1-4 seem to be quiet, noticeably reducing the cooling fan speed (which is good because it seems like mode 4 is how it runs by default on windows) 5 and 6 seems to be how it runs by default, with fans blowing noticeably louder. There is a catch though, it seems like the sequence of commands is very important. Otherwise, if not doing this with proper sequence the laptop sometimes end up glitching and cpu seems to lock up at a clock of 0,4ghz and stay at that until proper sequence (or at least two 0x1FF resets) are sent. Other functions (0x1 - lapmode, 0x4 - ??) seem to have no noticeable effect. Edit: after futher testing on my i7-8565u and monitoring speeds/temps/etc Modes 1-4:
Modes 5-6:
Modes 7-8
|
I have made a pull request containing the implementation of my findings. |
Thank you for implementing support for this function. The PR looks good and maybe we can carry out preciser control based on DYTC version. PSC function is also spotted on X1 Extreme and X1C6. Both machine has DYTC version 4.2, but the latter one has the following restriction:
So I'm not sure if this function is ready on 4.2 version. @1Revenger1 @tylernguyen @benbender Does current mode control work on your laptop? And how about the linked PR by @Someone52 ? And prior to version 4.2, it seems that PSC mode is not supported. The 4.1 one from E580 even has few modes than mine (4.0). Maybe we can judge the availability of PSC mode by DYTC version? The most complete DYTC method I have seen is obtained from Yoga C940 (15)
Currently I don't have many samples on DYTC 5.0 and newer. But at least yours is covered by the list above. |
The normal mode is called MMC AUTO mode in Yoga C940 (15) example above. It seems that on X1E and X1C6, supported mode is 1/2/f instead of 3/2/f for quiet/performance/balance (aka AUTO). I don't know how to distinguish them, maybe some different command below may help that. For version 5.0, only normal mode is supported for E590 and X1C7 don't have MMC function at all. And it's quite confusing that they still stick to the MMC function in https://patchwork.kernel.org/project/platform-driver-x86/patch/[email protected]/ where requires DYTC version 5 and newer. |
The current mode control doesn't work on my x1c6. It's limited to only Balance or Performance. The same thing goes for the new PR. |
I suppose at least 2/7/8 should work for your model. So it's a bit strange here. When you are available, can you check the initial DYTC result in debug log after switching to different thermal mode in Vantage / BIOS? |
Finally got some time for #116 . Please try that and I will merge both PR. |
Lenovo Thinkpad E590
When trying to set the modes, I get the following:
YSMC - Info: ThinkVPC::KHEY DYTCMode command 0x12b001 result: 0x0000000a (invalid argument) YSMC - Info: ThinkVPC::HKEY DYTCMode toggle failed
After a bit of investigation, i've decompiled the dytc method on my laptop, which is as follows:
As evident by the code here:
The method 0x0B ( which is
#define DYTC_FUNCTION_MMC 11 /* Function = 11, desk mode, priority 3 */
) does seem to be disabled and rejects all arguments apart from ICMode=0xF / ValidF = 0x0Method method 0x0D ( which is not documented) however does seem to do change something (most likely the same performance modes)
The text was updated successfully, but these errors were encountered: