initial push

This commit is contained in:
erpalma
2018-04-02 14:51:06 +02:00
parent bd3b4fcc36
commit 73e8ae4fbd
3 changed files with 54 additions and 0 deletions

7
Makefile Normal file
View File

@@ -0,0 +1,7 @@
all: install
install:
install -d /usr/local/sbin/
install -m 700 lenovo_fix.py /usr/local/sbin/
install -d /etc/systemd/system/
install -m 644 lenovo_fix.service /etc/systemd/system/

38
lenovo_fix.py Executable file
View File

@@ -0,0 +1,38 @@
#!/usr/bin/env python2
import glob
import os
import struct
from periphery import MMIO
from time import sleep
UPDATE_RATE_SEC = 15
def writemsr(msr, val):
n = glob.glob('/dev/cpu/[0-9]*/msr')
for c in n:
f = os.open(c, os.O_WRONLY)
os.lseek(f, msr, os.SEEK_SET)
os.write(f, struct.pack('Q', val))
os.close(f)
if not n:
raise OSError("msr module not loaded (run modprobe msr)")
def main():
mchbar_mmio = MMIO(0xfed159a0, 8)
while True:
# set temperature trip point to 97 C
writemsr(0x1a2, 0x3000000)
# set MSR to PL1 45W, max duration - PL2 45W, 2ms
writemsr(0x610, 0x42816800fe8168)
# set MCHBAR register to the same PL1/2 values
mchbar_mmio.write32(0, 0x00fe8168)
mchbar_mmio.write32(4, 0x00428168)
sleep(UPDATE_RATE_SEC)
if __name__ == '__main__':
main()

9
lenovo_fix.service Normal file
View File

@@ -0,0 +1,9 @@
[Unit]
Description=Fix Lenovo T480/T480s/X1C6 throttling on Linux
[Service]
Type=simple
ExecStart=/usr/local/sbin/lenovo_fix.py
[Install]
WantedBy=multi-user.target