cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
nightfever
Fanfold Paper
Posts: 15
Registered: ‎12-02-2017
Location: AT
Views: 1,906
Message 51 of 74

Re: Reducing fans noise on Lenovo Legion laptops

Extreme cooling stopped working for me from one day to another.

I'm gonna sell this and buy another laptop.

 

 

Moderator comment: Post edited to conform with the Community Rules. Keep it clean.

Agatio
Punch Card
Posts: 10
Registered: ‎06-17-2018
Location: SE
Views: 1,879
Message 52 of 74

Re: Reducing fans noise on Lenovo Legion laptops

If you have used NBFC and even if its disabled. It might prevent extreme cooling from working. For me it only works if NBFC is enabled, but I would never anyways use extreme cooling because its loud.

nightfever
Fanfold Paper
Posts: 15
Registered: ‎12-02-2017
Location: AT
Views: 1,868
Message 53 of 74

Re: Reducing fans noise on Lenovo Legion laptops

I was always using Extreme Cooling to verify if NBFC is reading fan speeds correctly. But now it does not work anymore. 

I ordered a new laptop yesterday (no Lenovo!). Before selling the y720 I will do a factory reset and check if it works again.

company357
What's DOS?
Posts: 1
Registered: ‎06-27-2018
Location: TW
Views: 1,807
Message 54 of 74

Re: Reducing fans noise on Lenovo Legion laptops

For people who still struggle with the fan noise issue, I tried Sir_Sean's solution, which is :

  • By setting the maximum processor frequency to 50% in the power profile of Windows",
  • also I change the temperature control function into "passive", and it works very well.

now I can use my Y520 quietly in library without the noise of fan, cheers!

Hyperfish
802.11n
Posts: 248
Registered: ‎08-21-2016
Location: US
Views: 1,764
Message 55 of 74

Re: Reducing fans noise on Lenovo Legion laptops

@Agatio NBFC is an excellent idea. Can you (and anyone else who also got it working, even partially) share their register values (or config name/file)?

 

Comparing the 21 working config files for different Lenovo-branded laptops posted in the NBFC repository, it seems they can be categorized in 3 groups -- with some outliers, I can post the full results if anyone is interested -- but briefly:

  • (A) Read from 0x06, write to 0xB0 or 0x56/0x57/0x5F,
  • (B) Read from 0x95, write to 0x94, also set 0x93 to 0x20 beforehand for manual fan control,
  • (C) Read and write to 0x47 -- this last one is only for ThinkPads, and not even the badge-engineered ones, so irrelevant here.

After some fiddling (I decompiled DSDT to look at AML bytecode and ran monitoring with ec-probe), it seems the Y700 belongs in group (A). Specifically:

  • 0x06 is FANS - Fan [#1] Speed (ReadRegister)
  • 0xFE is FA2S - Fan #2 Speed (ReadRegister)

These values are indeed changing rapidly, alongside some other ones that can be identified via DSDT:

  • Temperature readings: 0x0D, RTMP; 0x0E, VTMP; 0xB0, CPUT.
  • Battery state: 0xC6, B1FV; 0xE2, B1VA.

The missing bit of information is the WriteRegister. Most of the profiles in group (A) write to 0xB0 but on the Y700 this is the CPU temperature sensor. Perhaps faking the CPU temperature had the indirect effect of modifying fan speed?

 

The registers 0x53, 0x56 and 0xB4 also change often but are not referenced in the DSDT. Separately, 0xAB holds some fan-related flags: FAN1, FAN2, FAOK. Also, I saw in a discussion that someone discovered 0x39 changes to 0x01 when Max Fan Speed is switched on with a Lenovo utility on an Y520, and goes back to 0x00 when switched off.

 

For people who have the Lenovo utilities installed, can you run ec-probe monitor -c (comes with NBFC) and see which registers change when you toggle the Dust Clean mode and/or Max Speed mode on/off?

 

If someone also wants to look at their DSDT, here's a link to the utility (Java-based unfortunately, another way is to use Linux): https://github.com/hirschmann/nbfc/wiki/bin/DSDTEditor.zip

 

While on the Y700 the DSDT structure references system memory, not the embedded controller's: 

            OperationRegion (EMMP, SystemMemory, 0xFF00D400, 0xFF)
            Field (ERAM, ByteAcc, Lock, Preserve)
            {
                Offset (0x01),
                VDAT,   8,
                VSTA,   8,
                Offset (0x06),
                FANS,   8,
[...]

 

It seems the structure matches what's in the EC. For example I can observe the GATY (Graphics Adapter Type) flag changing after starting a process that uses dGPU. I also confirmed the EC can be written to, and used to modify some settings: I can switch keyboard backlight on/off by writing KBLO | KLCH (Keyboard Backlight On and Keyboard Light Change), i.e. setting bits 0 and 2 at 0x8A. It's just that the fan control routines seem absent from DSDT so they have to be discovered another way.

 

For the record, the EC chip on the Y700 is an ITE IT8371E-128 but as far as I know there is no publicly available datasheet for it.

 

Agatio
Punch Card
Posts: 10
Registered: ‎06-17-2018
Location: SE
Views: 1,725
Message 56 of 74

Re: Reducing fans noise on Lenovo Legion laptops

I’ll need to take a look at this again. I was just wondering that because the changes remain even after uninstalling the app and shutting down the laptop, does it mean that the only way to get the default values back is to reset the CMOS by removing ita battery for a while?

 

I’m not sure my values affect anything in the fan speeds compared to what it was. It is likely the same.

 

When I was experimenting, I used the ec-probe monitor, stressed the cpu, copied the values to excel and changed those to decimal numbers, but when I identified something as the fan target speed register and tried to change them with ec-probe, there was no effect. Even changing the read write register numbers in NBFC didn’t have an effect. Is it because the manual control is disabled so I can’t really change anything?

 

Then why does it happen that when I uninstalled the beta version of the app, reinstalled and enabled the Lenovo 1 13 or 2 13 config, it shuts down the fans? Last time that happened I just disabled it and closed the app. Then the fans never turned back on even after shutting down ans restarting without the app starting.

 

In other times when the fans turned off when enabling that config, I just waited for a while, and the fans turned back on, but changing the temperature and fan speed settings had no effect. I think the fans stayed at constant speed not depending on the cpu temperature in that case, so maybe the temperature register is wrong. Sometimes it showe a huge negative temperature.

 

Does that config somehow enable the manual control and shutdown the fans because its speed below ~50c is 0%, but the EC somehow returns back to control after a few seconds and changing the settings doesn’t work anymore? Or does it really use the profile, but can’t use it properly because of the temperature issue?

 

I just stopped trying because I got so confused and nothing worked. I’ve had the laptop for weeks, but the only things I’ve done with is this. I just use my desktop 😭 Useless purchase

UbW5
Token Ring
Posts: 67
Registered: ‎08-01-2016
Location: LT
Views: 1,717
Message 57 of 74

Re: Reducing fans noise on Lenovo Legion laptops

It seems (according to the extracted DSDT) that Y720/Y520 does not have EC registers related to the fan speed control:

OperationRegion (ERAM, EmbeddedControl, Zero, 0xFF)
Field (ERAM, ByteAcc, Lock, Preserve)
{
    VCMD,   8,
    Offset (0x60),
    SMPR,   8
}


When extreme cooling option is enabled (in Lenovo Nerve Sense application), value of register 0x39 changes from 0x00 to 0x01.
But manually writing 0x00 or 0x01 to the register 0x39 has no effect.

I also found no EC registers to control display brightness, keyboard backlight or battery health mode on my Y720.

Then I tried to control the fans with ACPI calls. Without success.

In the extracted DSDT, I did not see any methods for controlling the fan speed.
Only found a way to enable/disable battery conservation mode:

Limit battery charge to 60%:

# echo '\_SB.PCI0.LPCB.EC0.VPC0.SBMC 3' > /proc/acpi/call

Charge battery to 100%:

# echo '\_SB.PCI0.LPCB.EC0.VPC0.SBMC 5' > /proc/acpi/call


The developer of NBFC did mention here (https://github.com/hirschmann/nbfc/issues/316) the so-called "SystemMemory-space".
Probably, it is possible to control the fans by modifying some data in this system memory. How can we do it?

Hyperfish
802.11n
Posts: 248
Registered: ‎08-21-2016
Location: US
Views: 1,701
Message 58 of 74

Re: Reducing fans noise on Lenovo Legion laptops

@Agatio The first step is to figure out how to control the fan. Assuming it can be controlled through the EC registers, then the values can be discovered and tested with e.g. ec-probe or RwEverything: http://rweverything.com/download/

 

Once we have these, we can create a profile, and start using it with NBFC.

 

It is also possible the fan can't be controlled by writing to the EC, in which case we wouldn't be able to use NBFC but there might still be another way to control the fan (more on that later).

 

If you want to try one of the existing profiles for other Lenovo laptops, I'd start with one writing to 0xB0, or one of the other temperature registers. Although technically that's not controlling the fan but faking the temperature (CPU in the case of 0xB0), it seems it worked for some people in the past, so it might work on the newer models too.

 

The EC is always on as long as there is battery and/or AC power, so the memory won't be gone but all the important registers should be reinitialized after a reboot. Still, it would be prudent to keep track of all the values you change to be able to restore them. RwEverything makes it really easy to save a complete EC dump and even restore it later.

 

@UbW5 I saw that particular issue before and was surprised the guy gave up so easily as he was on the right track. There is no EC region mapping in DSDT but if you look at what follows the mapping of a certain system memory region there:

OperationRegion (ERAX, SystemMemory, 0xFF00D400, 0xFF)
Field (ERAX, ByteAcc, Lock, Preserve)
{
[...]

This reflects the EC offsets exactly. So we do have a (partial) map of the EC. What Hirschmann (the NBFC author) wrote is technically correct but it's not the full picture -- he'd have needed to have one of these particular laptops to see it. 

 

What we don't have is any routines in DSDT that control the fan, which would make life easier. However, that doesn't necessarily mean the fan can't be controlled via EC. There are also some registers not referenced in DSDT that are clearly in use. I've put up all the information together and will share it in my next post in a moment.

 

Hyperfish
802.11n
Posts: 248
Registered: ‎08-21-2016
Location: US
Views: 1,689
Message 59 of 74

Re: Reducing fans noise on Lenovo Legion laptops

I want to share a couple of things that might help in getting us further with regard to controlling the fans:

 

(1) A description of each of the registers reconstructed from DSDT alongside some bits of information from other sources. The file EC_Y700.irw is a plain-text list that can be read directly but the primary purpose is to load it into RwEverything to have a reference of what is known about each of the registers:

 

RwEverything EC Information.jpgRwEverything EC Information

(2) An overview of EC registers to help narrow down which ones might matter for fan settings:

 

Y700 EC Overview.pngY700 EC Overview

The table is color-coded as such:

  • White - unknown and referenced in DSDT
  • Light Gray - unknown and not referenced in DSDT
  • Dark Gray - unlikely to be of interest as far as fan control is concerned
  • Blue - observed to be rapidly changing
  • Green - current fan speeds (for reading)
  • Yellow - register where some fan flags are stored

The source (for editing) is an Excel file named EC_700.xslx, and there are generated versions in PDF and PNG. All of these are in a single ZIP file.

 

Note: This is work in progress, an intermediate result, so the information may be incorrect or missing.

 

[Split into 2 posts as there can only be 1 attachment per post]

 

Hyperfish
802.11n
Posts: 248
Registered: ‎08-21-2016
Location: US
Views: 1,677
Message 60 of 74

Re: Reducing fans noise on Lenovo Legion laptops

[Continued from the previous post]

 

(3) The other archive is the Lenovo Energy Management Software 7.0.0.34 from an earlier Lenovo laptop (Y510p), which has an option for Dust Extraction mode, and is able to control the fans for this purpose (on my Y700):

 

Energy Management - Dust Extraction.jpgEnergy Management: Dust Extraction

This utility can also be obtained from the following link: https://support.lenovo.com/us/en/downloads/ds030145

 

It is however cumbersome to unpack, and the installer also contains some other unrelated software and drivers, so for everybody's convenience here is the minimal package that should work on a Lenovo laptop without installation.

 

I think the best course of action now is to try running fan dust extraction in this utility (and other versions of it) to observe what it does exactly. I've already briefly tried running ec-probe and RwEverything alongside it, and can see some changes to the EC registers happening. I also tried spying on it with Procmon and DbgView but it'll take more than that to see what's going on.

 

Check out current deals!


Shop current deals

Top Kudoed Authors