Browse Source

Merge pull request #552 from yatli/master

surface pro 5: more thermal/power automation
Maximilian Luz 3 years ago
parent
commit
688cedb952

+ 37 - 9
contrib/thermald/surface_pro_5/40-surface-power.rules

@@ -1,4 +1,4 @@
-# Use `udevadm monitor` to find out what's going on (e.g. unplugged)
+# Use `udevadm monitor -ap` to find out what's going on (e.g. unplugged)
 # For example:
 # monitor will print the received events for:
 # UDEV - the event which udev sends out after rule processing
@@ -23,14 +23,42 @@
 # E: POWER_SUPPLY_ONLINE=0
 # E: SUBSYSTEM=power_supply
 
+
+
 # Plugged
-SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/usr/bin/logger -t surface power supply online"
-SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/usr/bin/surface profile set performance"
-SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/usr/bin/ln -sf /etc/thermald/thermal-conf.xml.auto.performance /etc/thermald/thermal-conf.xml.auto"
-SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/usr/bin/systemctl try-restart thermald"
+ACTION=="change", SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_NAME}=="ADP1", ENV{POWER_SUPPLY_ONLINE}=="1" \
+, RUN+="/usr/bin/logger -t surface power supply online" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo on > /sys/bus/pci/devices/0000:00:00.0/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo on > /sys/bus/pci/devices/0000:00:02.0/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo on > /sys/bus/pci/devices/0000:00:1c.0/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo on > /sys/bus/pci/devices/0000:00:1c.4/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo on > /sys/bus/pci/devices/0000:00:1d.0/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo on > /sys/bus/pci/devices/0000:00:1f.0/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo on > /sys/bus/pci/devices/0000:01:00.0/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo powersave > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo powersave > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo powersave > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo'" \
+, RUN+="/usr/bin/surface profile set performance" \
+, RUN+="/usr/bin/ln -sf /etc/thermald/thermal-conf.xml.auto.performance /etc/thermald/thermal-conf.xml.auto" \
+, RUN+="/usr/bin/systemctl try-restart thermald"
 
 # Unplugged
-SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/usr/bin/logger -t surface power supply offline"
-SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/usr/bin/surface profile set low-power"
-SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/usr/bin/ln -sf /etc/thermald/thermal-conf.xml.auto.mobile /etc/thermald/thermal-conf.xml.auto"
-SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/usr/bin/systemctl try-restart thermald"
+ACTION=="change", SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_NAME}=="ADP1", ENV{POWER_SUPPLY_ONLINE}=="0" \
+, RUN+="/usr/bin/logger -t surface power supply offline" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo auto > /sys/bus/pci/devices/0000:00:00.0/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo auto > /sys/bus/pci/devices/0000:00:02.0/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo auto > /sys/bus/pci/devices/0000:00:1c.0/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo auto > /sys/bus/pci/devices/0000:00:1c.4/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo auto > /sys/bus/pci/devices/0000:00:1d.0/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo auto > /sys/bus/pci/devices/0000:00:1f.0/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo auto > /sys/bus/pci/devices/0000:01:00.0/power/control'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo powersave > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo powersave > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo powersave > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor'" \
+, RUN+="/usr/bin/sh -c '/usr/bin/echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo'" \
+, RUN+="/usr/bin/surface profile set low-power" \
+, RUN+="/usr/bin/ln -sf /etc/thermald/thermal-conf.xml.auto.mobile /etc/thermald/thermal-conf.xml.auto" \
+, RUN+="/usr/bin/systemctl try-restart thermald"

+ 2 - 0
contrib/thermald/surface_pro_5/50-surface.conf

@@ -0,0 +1,2 @@
+kernel.nmi_watchdog=0
+vm.dirty_writeback_centisecs=1500

+ 10 - 5
contrib/thermald/surface_pro_5/README.md

@@ -22,6 +22,15 @@ thermal targets.
 See 40-surface-power.rules for more details on how to obtain info about sensors
 and cooling devices.
 
+## Bonus
+
+40-surface-power.rules also contains power-related tweaks for:
+- `surface profile`: currently low-power vs. performance
+- Various PCIe powersaving strategies
+- Intel p-state control for turbo-boost
+
+50-surface.conf contains sysctl tweaks advised by `powertop`.
+
 ## Installation
 
 - Make sure to install `surface-control`
@@ -31,12 +40,8 @@ and cooling devices.
 - Install `thermal-cpu-cdev-order.xml` to `/etc/thermald/`
 - Install `thermald.service` to `/lib/systemd/system/` and overwrite the old one.
     - Maybe install to `/usr/lib/systemd/system/` too.
+- Install `50-surface.conf` to `/etc/sysctl.d/`
 - `systemctl daemon-reload`
 - `systemctl restart udev`
 - `systemctl restart thermald`
 
-## TODO
-
-- I tried to update cpufreq governor and turbo in udev event triggers but it
-  didn't work.
-- You can install `cpufreqctl` for that.