diff options
Diffstat (limited to 'system/system76-power')
-rw-r--r-- | system/system76-power/README | 4 | ||||
-rw-r--r-- | system/system76-power/fix_groups.patch | 22 | ||||
-rw-r--r-- | system/system76-power/nvme_temp.patch | 135 | ||||
-rw-r--r-- | system/system76-power/system76-power.SlackBuild | 179 | ||||
-rw-r--r-- | system/system76-power/system76-power.info | 302 | ||||
-rw-r--r-- | system/system76-power/xeon_fan_curve.patch | 52 |
6 files changed, 466 insertions, 228 deletions
diff --git a/system/system76-power/README b/system/system76-power/README index 6e1f40fa8f..75056a5fdf 100644 --- a/system/system76-power/README +++ b/system/system76-power/README @@ -14,12 +14,12 @@ The system76-power daemon log messages are logged to /var/log/system76-power.log by default. Logging can be disabled by setting LOG_FILE=/dev/null in /etc/rc.d/rc.system76-power. -This project is pinned to a specific Rust version, currently 1.41.0. As +This project is pinned to a specific Rust version, currently 1.70.0. As such, rustup is a compile time only dependency. If this specific version of the Rust toolchain is not already installed, it will be downloaded and installed automatically during build script execution. It can be installed manually beforehand by running - rustup toolchain install 1.41.0 + rustup toolchain install 1.70.0 NOTE: The directions in rustup's README must be followed so that the rust installed by rustup is preferred over the system rust. diff --git a/system/system76-power/fix_groups.patch b/system/system76-power/fix_groups.patch new file mode 100644 index 0000000000..5773d1cb53 --- /dev/null +++ b/system/system76-power/fix_groups.patch @@ -0,0 +1,22 @@ +diff --git a/data/com.system76.PowerDaemon.conf b/data/com.system76.PowerDaemon.conf +index 335981c..1705b0c 100644 +--- a/data/com.system76.PowerDaemon.conf ++++ b/data/com.system76.PowerDaemon.conf +@@ -6,17 +6,9 @@ + <allow send_destination="com.system76.PowerDaemon"/> + <allow receive_sender="com.system76.PowerDaemon"/> + </policy> +- <policy group="sudo"> +- <allow send_destination="com.system76.PowerDaemon"/> +- <allow receive_sender="com.system76.PowerDaemon"/> +- </policy> + <policy user="root"> + <allow own="com.system76.PowerDaemon"/> + <allow send_destination="com.system76.PowerDaemon"/> + <allow receive_sender="com.system76.PowerDaemon"/> + </policy> +- <policy user="gnome-initial-setup"> +- <allow send_destination="com.system76.PowerDaemon"/> +- <allow receive_sender="com.system76.PowerDaemon"/> +- </policy> + </busconfig> diff --git a/system/system76-power/nvme_temp.patch b/system/system76-power/nvme_temp.patch new file mode 100644 index 0000000000..c0531cd38a --- /dev/null +++ b/system/system76-power/nvme_temp.patch @@ -0,0 +1,135 @@ +diff --git a/src/fan.rs b/src/fan.rs +index 03fdadd..4b3db3b 100644 +--- a/src/fan.rs ++++ b/src/fan.rs +@@ -23,9 +23,11 @@ pub enum FanDaemonError { + + pub struct FanDaemon { + curve: FanCurve, ++ curve_nvme: FanCurve, + amdgpus: Vec<HwMon>, + platforms: Vec<HwMon>, + cpus: Vec<HwMon>, ++ nvmes: Vec<HwMon>, + nvidia_exists: bool, + displayed_warning: Cell<bool>, + } +@@ -41,9 +43,11 @@ impl FanDaemon { + "thelio-massive-b1" => FanCurve::xeon(), + _ => FanCurve::standard(), + }, ++ curve_nvme: FanCurve::nvme(), + amdgpus: Vec::new(), + platforms: Vec::new(), + cpus: Vec::new(), ++ nvmes: Vec::new(), + nvidia_exists, + displayed_warning: Cell::new(false), + }; +@@ -60,6 +64,7 @@ impl FanDaemon { + self.amdgpus.clear(); + self.platforms.clear(); + self.cpus.clear(); ++ self.nvmes.clear(); + + for hwmon in HwMon::all().map_err(FanDaemonError::HwmonDevices)? { + if let Ok(name) = hwmon.name() { +@@ -70,6 +75,7 @@ impl FanDaemon { + "system76" => (), // TODO: Support laptops + "system76_io" | "system76_thelio_io" => self.platforms.push(hwmon), + "coretemp" | "k10temp" => self.cpus.push(hwmon), ++ "nvme" => self.nvmes.push(hwmon), + _ => (), + } + } +@@ -83,6 +89,10 @@ impl FanDaemon { + return Err(FanDaemonError::CpuHwmonNotFound); + } + ++ if self.nvmes.is_empty() { ++ // No error. ++ } ++ + Ok(()) + } + +@@ -128,6 +138,25 @@ impl FanDaemon { + temp_opt + } + ++ /// Get the maximum measured temperature from any NVME on the system, in thousandths of a ++ /// Celsius. Thousandths celsius is the standard Linux hwmon temperature unit. ++ pub fn get_nvme_temp(&self) -> Option<u32> { ++ self ++ .nvmes ++ .iter() ++ .filter_map(|sensor| sensor.temp(1).ok()) ++ .filter_map(|temp| temp.input().ok()) ++ .fold(None, |mut temp_opt, input| { ++ // Assume temperatures are always above freezing ++ if temp_opt.map_or(true, |x| input as u32 > x) { ++ log::debug!("highest hwmon nvme temp: {}", input); ++ temp_opt = Some(input as u32); ++ } ++ ++ temp_opt ++ }) ++ } ++ + /// Get the correct duty cycle for a temperature in thousandths Celsius, from 0 to 255 + /// Thousandths celsius is the standard Linux hwmon temperature unit + /// 0 to 255 is the standard Linux hwmon pwm unit +@@ -137,6 +166,15 @@ impl FanDaemon { + .map(|duty| (((u32::from(duty)) * 255) / 10_000) as u8) + } + ++ /// Get the correct duty cycle for an NVME temperature in thousandths Celsius, from 0 to 255 ++ /// Thousandths celsius is the standard Linux hwmon temperature unit ++ /// 0 to 255 is the standard Linux hwmon pwm unit ++ pub fn get_nvme_duty(&self, temp: u32) -> Option<u8> { ++ self.curve_nvme ++ .get_duty((temp / 10) as i16) ++ .map(|duty| (((u32::from(duty)) * 255) / 10_000) as u8) ++ } ++ + /// Set the current duty cycle, from 0 to 255 + /// 0 to 255 is the standard Linux hwmon pwm unit + pub fn set_duty(&self, duty_opt: Option<u8>) { +@@ -159,7 +197,20 @@ impl FanDaemon { + /// Calculate the correct duty cycle and apply it to all fans + pub fn step(&mut self) { + if let Ok(()) = self.discover() { +- self.set_duty(self.get_temp().and_then(|temp| self.get_duty(temp))); ++ self.set_duty({ ++ let cpu_duty = self.get_temp().and_then(|temp| self.get_duty(temp)); ++ log::debug!("cpu duty: {:?}", cpu_duty); ++ if self.nvmes.is_empty() { ++ cpu_duty ++ } else { ++ let nvme_duty = self.get_nvme_temp().and_then(|temp| self.get_nvme_duty(temp)); ++ log::debug!("nvme duty: {:?}", nvme_duty); ++ match(cpu_duty, nvme_duty) { ++ (Some(cpu_duty), Some(nvme_duty)) => Some(cmp::max(cpu_duty, nvme_duty)), ++ _ => None, ++ } ++ } ++ }); + } + } + } +@@ -282,6 +333,15 @@ impl FanCurve { + .append(78_00, 100_00) + } + ++ /// Fan curve for NVME drives ++ pub fn nvme() -> Self { ++ Self::default() ++ .append(00_00, 00_00) ++ .append(60_00, 00_00) ++ .append(65_00, 70_00) ++ .append(68_00, 100_00) ++ } ++ + pub fn get_duty(&self, temp: i16) -> Option<u16> { + // If the temp is less than the first point, return the first point duty + if let Some(first) = self.points.first() { diff --git a/system/system76-power/system76-power.SlackBuild b/system/system76-power/system76-power.SlackBuild index 4eafea3ea1..ba3303aa2f 100644 --- a/system/system76-power/system76-power.SlackBuild +++ b/system/system76-power/system76-power.SlackBuild @@ -1,8 +1,8 @@ -#!/bin/sh +#!/bin/bash # Slackware build script for system76-power -# Copyright 2019-2020 Erich Ritz, Scottsdale, Arizona, USA +# Copyright 2019-2024 Erich Ritz, Jenks, Oklahoma, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,10 +22,22 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# 20220210 bkw: Warning from SlackBuilds.org: the download URLs are +# incorrect. They work OK when using a client that doesn't respect the +# Content-disposition header (e.g. wget in its default config), but +# they'll break with clients that do respect it. +# +# 20220301 etr: Fix script to work with Content-disposition-safe download URL. +# Bit hackish, but it works. + +cd $(dirname $0) ; CWD=$(pwd) + PRGNAM=system76-power -VERSION=${VERSION:-1.1.11} -BUILD=${BUILD:-1} +VERSION=${VERSION:-1.1.25_fc8eb49} +SRCVER=${SRCVER:-fc8eb49fae5222da56dcfa414ef2b190e9f870c7} +BUILD=${BUILD:-2} TAG=${TAG:-_SBo} +PKGTYPE=${PKGTYPE:-tgz} if [ -z "$ARCH" ]; then case "$( uname -m )" in @@ -33,15 +45,19 @@ if [ -z "$ARCH" ]; then arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac +fi - if [ "$ARCH" = "i586" ]; then - if rustc -Vv | grep host | grep i686 > /dev/null ; then - ARCH=i686 - fi - fi +case "$ARCH" in + x86_64) ;; + arm*) ;; + *) echo "Unsupported ARCH '$ARCH'"; exit 1 ;; +esac + +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 fi -CWD=$(pwd) TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} @@ -65,111 +81,63 @@ set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP -rm -rf $PRGNAM-$VERSION -if [ -e $CWD/$VERSION.tar.gz ]; then - tar xvf $CWD/$VERSION.tar.gz -else - tar xvf $CWD/$PRGNAM-$VERSION.tar.gz -fi -cd $PRGNAM-$VERSION +rm -rf $PRGNAM-$SRCVER +tar xvf $CWD/$PRGNAM-$SRCVER.tar.gz +cd $PRGNAM-$SRCVER # build offline # configuration tells cargo to use the configured directory # for dependencies intead of downloading from crates.io mkdir .cargo -cat << EOF >> .cargo/config +cat << EOF >> .cargo/config.toml +[source] [source.crates-io] replace-with = "vendored-sources" [source."https://github.com/pop-os/sysfs-class"] git = "https://github.com/pop-os/sysfs-class" -branch = "master" replace-with = "vendored-sources" [source.vendored-sources] -directory = "$(pwd)/vendor" +directory = "vendor" EOF -mkdir vendor # deps and versions come from Cargo.lock +mkdir vendor ( cd vendor - for dependency in \ - ansi_term=0.11.0 \ - atty=0.2.14 \ - autocfg=1.0.1 \ - bitflags=1.2.1 \ - bytes=0.5.6 \ - cc=1.0.59 \ - cfg-if=0.1.10 \ - chrono=0.4.15 \ - clap=2.33.3 \ - dbus=0.8.4 \ - err-derive=0.2.4 \ - fern=0.6.0 \ - fuchsia-zircon=0.3.3 \ - fuchsia-zircon-sys=0.3.3 \ - futures-core=0.3.5 \ - hermit-abi=0.1.15 \ - hidapi=1.2.3 \ - inotify=0.8.3 \ - inotify-sys=0.1.3 \ - intel-pstate=0.2.1 \ - iovec=0.1.4 \ - kernel32-sys=0.2.2 \ - lazy_static=1.4.0 \ - libc=0.2.76 \ - libdbus-sys=0.2.1 \ - log=0.4.11 \ - mio=0.6.22 \ - miow=0.2.1 \ - net2=0.2.34 \ - num-integer=0.1.43 \ - num-traits=0.2.12 \ - numtoa=0.2.3 \ - pin-project-lite=0.1.7 \ - pkg-config=0.3.18 \ - proc-macro-error=1.0.4 \ - proc-macro-error-attr=1.0.4 \ - proc-macro2=1.0.19 \ - quote=1.0.7 \ - rustversion=1.0.3 \ - slab=0.4.2 \ - smart-default=0.6.0 \ - strsim=0.8.0 \ - syn=1.0.39 \ - synstructure=0.12.4 \ - sysfs-class=0.1.3 \ - textwrap=0.11.0 \ - time=0.1.44 \ - tokio=0.2.22 \ - unicode-width=0.1.8 \ - unicode-xid=0.2.1 \ - vec_map=0.8.2 \ - vergen=3.1.0 \ - version_check=0.9.2 \ - wasi=0.10.0+wasi-snapshot-preview1 \ - winapi=0.2.8 \ - winapi=0.3.9 \ - winapi-build=0.1.1 \ - winapi-i686-pc-windows-gnu=0.4.0 \ - winapi-x86_64-pc-windows-gnu=0.4.0 \ - ws2_32-sys=0.2.1; do - - dep="$(echo "$dependency" | cut -d= -f1)" - ver="$(echo "$dependency" | cut -d= -f2)" - - if [ -e $CWD/$dep-$ver.crate ]; then - CRATE_FILE=$CWD/$dep-$ver.crate + grep -h -A 4 "\[\[package\]\]" \ + $(find "../" -maxdepth 1 -mindepth 1 -name Cargo.lock | tr '\n' ' ') | \ + sed 's/[[:space:]]*=[[:space:]]*/=/g;s/^--//;s/^\[\[/--\n[[/' | \ + awk 'BEGIN { RS = "--\n" ; FS="\n" } { print $2, $3, $4, $5 }' | \ + sed 's/"//g;s/name=//;s/ version=/=/' | \ + grep " source=" | \ + sed 's/ dependencies=.*$//' | \ + sed 's/ source=[^ ]*//' | \ + sed 's/ checksum=/=/' | \ + sort -u | \ + while read -r dep ; do + + cksum="$(printf "%s\n" "$dep" | cut -d= -f3)" + ver="$(printf "%s\n" "$dep" | cut -d= -f2)" + dep="$(printf "%s\n" "$dep" | cut -d= -f1)" + + CRATE_FILE=$CWD/$dep-$ver.crate + + if [ -z "$cksum" ] ; then + if [ "$dep" = "sysfs-class" ] ; then + CRATE_FILE=$CWD/pop-os-sysfs-class-0.1.3-1-gab63e7f.tar.gz + fi + mkdir $dep-$ver + if [ "$dep" = "sysfs-class" ] ; then + CRATE_FILE=$CWD/pop-os-$dep-$ver-1-gab63e7f.tar.gz + fi + tar xvf $CRATE_FILE -C $dep-$ver --strip-components=1 + cksum="null" else - if [ -e $CWD/$ver.tar.gz ]; then - CRATE_FILE=$CWD/$ver.tar.gz - else - CRATE_FILE=$CWD/$dep-$ver.tar.gz - fi + tar xvf $CRATE_FILE fi - tar xvf $CRATE_FILE touch $dep-$ver/.cargo-ok @@ -184,16 +152,10 @@ mkdir vendor ) | sed '$ s/,$//' printf " },\n" - printf ' "package": "' - - sha256sum "$CRATE_FILE" | cut -f1 -d' ' | sed 's/$/"/' + printf ' "package": "%s"' "$cksum" printf "}\n" - } | python -c "import sys, json; data = sys.stdin.read(); print json.dumps(json.loads(data), sort_keys=True, indent=4, separators=(',', ' : '))" > $dep-$ver/.cargo-checksum.json - # Change selected package checksums to null - if [ "$dep" == "sysfs-class" ] ; then - sed -i 's/"package" : ".\{64\}"/"package" : null/' $dep-$ver/.cargo-checksum.json - fi + } | python3 -c "import sys, json; data = sys.stdin.read(); print (json.dumps(json.loads(data), sort_keys=True, indent=4, separators=(',', ' : ')))" > $dep-$ver/.cargo-checksum.json done ) @@ -204,15 +166,24 @@ find -L . \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; +# Prevent syslog messasge 'Unknown group "sudo" in message bus configuration file'. +patch -p1 < $CWD/fix_groups.patch +# Prevent CPU from overheating +patch -p1 < $CWD/xeon_fan_curve.patch +# Prevent NVMe U.2 SSD from overheating +patch -p1 < $CWD/nvme_temp.patch + +export CARGO_HOME=.cargo + CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ -libdir=/usr/lib${LIBDIRSUFFIX} \ make make install DESTDIR=$PKG find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true +rm -rf $PKG/usr/lib mkdir -p $PKG/etc/logrotate.d $PKG/etc/rc.d install -m 0644 $CWD/config/system76-power.logrotate $PKG/etc/logrotate.d/system76-power.new install -m 0644 $CWD/config/rc.system76-power $PKG/etc/rc.d/rc.system76-power.new @@ -226,4 +197,4 @@ cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/doinst.sh > $PKG/install/doinst.sh cd $PKG -/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/system/system76-power/system76-power.info b/system/system76-power/system76-power.info index 4d8860281d..2aac307a27 100644 --- a/system/system76-power/system76-power.info +++ b/system/system76-power/system76-power.info @@ -1,130 +1,188 @@ PRGNAM="system76-power" -VERSION="1.1.11" +VERSION="1.1.25_fc8eb49" HOMEPAGE="https://github.com/pop-os/system76-power" -DOWNLOAD="https://github.com/pop-os/system76-power/archive/1.1.11/system76-power-1.1.11.tar.gz \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/ansi_term/ansi_term-0.11.0.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/atty/atty-0.2.14.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/autocfg/autocfg-1.0.1.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/bitflags/bitflags-1.2.1.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/bytes/bytes-0.5.6.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/cc/cc-1.0.59.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/cfg-if/cfg-if-0.1.10.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/chrono/chrono-0.4.15.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/clap/clap-2.33.3.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/dbus/dbus-0.8.4.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/err-derive/err-derive-0.2.4.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/fern/fern-0.6.0.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/fuchsia-zircon/fuchsia-zircon-0.3.3.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/fuchsia-zircon-sys/fuchsia-zircon-sys-0.3.3.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/futures-core/futures-core-0.3.5.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/hermit-abi/hermit-abi-0.1.15.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/hidapi/hidapi-1.2.3.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/inotify/inotify-0.8.3.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/inotify-sys/inotify-sys-0.1.3.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/intel-pstate/intel-pstate-0.2.1.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/iovec/iovec-0.1.4.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/kernel32-sys/kernel32-sys-0.2.2.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/lazy_static/lazy_static-1.4.0.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/libc/libc-0.2.76.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/libdbus-sys/libdbus-sys-0.2.1.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/log/log-0.4.11.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/mio/mio-0.6.22.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/miow/miow-0.2.1.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/net2/net2-0.2.34.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/num-integer/num-integer-0.1.43.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/num-traits/num-traits-0.2.12.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/numtoa/numtoa-0.2.3.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/pin-project-lite/pin-project-lite-0.1.7.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/pkg-config/pkg-config-0.3.18.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/proc-macro-error/proc-macro-error-1.0.4.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/proc-macro-error-attr/proc-macro-error-attr-1.0.4.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/proc-macro2/proc-macro2-1.0.19.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/quote/quote-1.0.7.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/rustversion/rustversion-1.0.3.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/slab/slab-0.4.2.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/smart-default/smart-default-0.6.0.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/strsim/strsim-0.8.0.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/syn/syn-1.0.39.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/synstructure/synstructure-0.12.4.crate \ - https://github.com/pop-os/sysfs-class/archive/0.1.3/sysfs-class-0.1.3.tar.gz \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/textwrap/textwrap-0.11.0.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/time/time-0.1.44.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/tokio/tokio-0.2.22.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/unicode-width/unicode-width-0.1.8.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/unicode-xid/unicode-xid-0.2.1.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/vec_map/vec_map-0.8.2.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/vergen/vergen-3.1.0.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/version_check/version_check-0.9.2.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/wasi/wasi-0.10.0+wasi-snapshot-preview1.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/winapi/winapi-0.2.8.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/winapi/winapi-0.3.9.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/winapi-build/winapi-build-0.1.1.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/winapi-i686-pc-windows-gnu/winapi-i686-pc-windows-gnu-0.4.0.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/winapi-x86_64-pc-windows-gnu/winapi-x86_64-pc-windows-gnu-0.4.0.crate \ - https://crates-io.s3-us-west-1.amazonaws.com/crates/ws2_32-sys/ws2_32-sys-0.2.1.crate" -MD5SUM="6124c0467008e4e3c9cd1466fca70479 \ - 294a49d3c53865fa7ac5d0ce2f5d5735 \ - 142cb4b9a653e56e56311f0c883b8582 \ - c6443ec8d007c729ba5482008d0c864d \ - 6799c26a7eacaf8e58d3e45c6c5add89 \ - d123f33f646e37ca5b825ea6eb2dd150 \ - 1e6c2fa88c44a0822243fee42526719b \ - 882dbbc613a93f64c3709b0a2bd0d6dc \ - a47dd336c3099e7986f926b48c64ec6a \ - bc79e0eb364df515a33755ac9a581cfd \ - ff4619d1e15ab5c4ca25d549589f1046 \ - 9d53a61cdf8af705fd38cc26481b610d \ - 9bb99bc31c32da009e64621f4c635748 \ - dd7c80c2d04d2e9ceba82826cf69764d \ - 54cfab480b7a5f7302eadf44129d3f4b \ - 4554d3a0b77373fba853c413f30d6f59 \ - 9e4eacf58977b54f76be2b80d7d3b776 \ - c5287d42ccd4b81389cc8c08939b0218 \ - e7696ea7bac5b2d62b5306498960430b \ - 50929c2de8a472031f43c9fc371f2111 \ - 1c4f7ad251632c854fa67dc1f1f314e3 \ - f1c40b9836035b69e464df711a1d2950 \ - 9d033cc2daa6924420a4a89e6705773f \ - fba3b040a55c01be7376d3dd5c4d4920 \ - 1e624bdaaecfb8c58f030d6adf405c04 \ - 78e11acb853ee9a9c1b905e209b33d4a \ - f50d2e280b4a3491fffda43b90982544 \ - e820082de1cf13e1111d2acbae898fcc \ - a82e0b9efe7f6385071c9fd9b3bccfa3 \ - 683a998da434a7ff8558bdf6eaa7b8c7 \ - 759816fe5b617674ae5dee83e3c3e6e2 \ - 2daa59d0efd38e9b5fbb2658b080eaa1 \ - 28a4e2e962d9723f131cdd5acb140b6d \ - 62e9fc18f293722fdded066f34714585 \ - 0c860c0d0fa0dde03bd6be862fb1b6b4 \ - 6a32bab57772c3a1146d599b65ffb0cb \ - 7d76a523677de261dda1b65d29a93c4e \ - 2e821a99ce8067bee8c1007c07a5d1e8 \ - 63b29211eef9ccee0b0401d423db0efd \ - 322ae19fb8b0ec961b1168bab243c08a \ - c7bfa89e6da163f1474bb3787987bb12 \ +DOWNLOAD="UNSUPPORTED" +MD5SUM="" +DOWNLOAD_x86_64="https://github.com/pop-os/system76-power/archive/fc8eb49/system76-power-fc8eb49fae5222da56dcfa414ef2b190e9f870c7.tar.gz \ + https://github.com/pop-os/sysfs-class/tarball/ab63e7f638aadfaf896a02e53cf330343d331337/pop-os-sysfs-class-0.1.3-1-gab63e7f.tar.gz \ + https://static.crates.io/crates/anstream/anstream-0.3.2.crate \ + https://static.crates.io/crates/anstyle-parse/anstyle-parse-0.2.0.crate \ + https://static.crates.io/crates/anstyle-query/anstyle-query-1.0.0.crate \ + https://static.crates.io/crates/anstyle-wincon/anstyle-wincon-1.0.1.crate \ + https://static.crates.io/crates/anstyle/anstyle-1.0.0.crate \ + https://static.crates.io/crates/autocfg/autocfg-1.1.0.crate \ + https://static.crates.io/crates/bitflags/bitflags-1.3.2.crate \ + https://static.crates.io/crates/cc/cc-1.0.79.crate \ + https://static.crates.io/crates/clap/clap-4.3.4.crate \ + https://static.crates.io/crates/clap_builder/clap_builder-4.3.4.crate \ + https://static.crates.io/crates/clap_derive/clap_derive-4.3.2.crate \ + https://static.crates.io/crates/clap_lex/clap_lex-0.5.0.crate \ + https://static.crates.io/crates/colorchoice/colorchoice-1.0.0.crate \ + https://static.crates.io/crates/concat-in-place/concat-in-place-1.1.0.crate \ + https://static.crates.io/crates/darling/darling-0.20.1.crate \ + https://static.crates.io/crates/darling_core/darling_core-0.20.1.crate \ + https://static.crates.io/crates/darling_macro/darling_macro-0.20.1.crate \ + https://static.crates.io/crates/dbus-crossroads/dbus-crossroads-0.5.2.crate \ + https://static.crates.io/crates/dbus-tokio/dbus-tokio-0.7.6.crate \ + https://static.crates.io/crates/dbus/dbus-0.9.7.crate \ + https://static.crates.io/crates/derive_setters/derive_setters-0.1.6.crate \ + https://static.crates.io/crates/errno-dragonfly/errno-dragonfly-0.1.2.crate \ + https://static.crates.io/crates/errno/errno-0.3.1.crate \ + https://static.crates.io/crates/fern/fern-0.6.2.crate \ + https://static.crates.io/crates/fnv/fnv-1.0.7.crate \ + https://static.crates.io/crates/futures-channel/futures-channel-0.3.28.crate \ + https://static.crates.io/crates/futures-core/futures-core-0.3.28.crate \ + https://static.crates.io/crates/futures-executor/futures-executor-0.3.28.crate \ + https://static.crates.io/crates/futures-io/futures-io-0.3.28.crate \ + https://static.crates.io/crates/futures-macro/futures-macro-0.3.28.crate \ + https://static.crates.io/crates/futures-sink/futures-sink-0.3.28.crate \ + https://static.crates.io/crates/futures-task/futures-task-0.3.28.crate \ + https://static.crates.io/crates/futures-util/futures-util-0.3.28.crate \ + https://static.crates.io/crates/futures/futures-0.3.28.crate \ + https://static.crates.io/crates/heck/heck-0.4.1.crate \ + https://static.crates.io/crates/hermit-abi/hermit-abi-0.3.1.crate \ + https://static.crates.io/crates/hidapi/hidapi-1.5.0.crate \ + https://static.crates.io/crates/ident_case/ident_case-1.0.1.crate \ + https://static.crates.io/crates/inotify-sys/inotify-sys-0.1.5.crate \ + https://static.crates.io/crates/inotify/inotify-0.10.1.crate \ + https://static.crates.io/crates/intel-pstate/intel-pstate-1.0.1.crate \ + https://static.crates.io/crates/io-lifetimes/io-lifetimes-1.0.11.crate \ + https://static.crates.io/crates/is-terminal/is-terminal-0.4.7.crate \ + https://static.crates.io/crates/itoa/itoa-1.0.6.crate \ + https://static.crates.io/crates/libc/libc-0.2.146.crate \ + https://static.crates.io/crates/libdbus-sys/libdbus-sys-0.2.5.crate \ + https://static.crates.io/crates/linux-raw-sys/linux-raw-sys-0.3.8.crate \ + https://static.crates.io/crates/log/log-0.4.19.crate \ + https://static.crates.io/crates/memchr/memchr-2.5.0.crate \ + https://static.crates.io/crates/mio/mio-0.8.8.crate \ + https://static.crates.io/crates/numtoa/numtoa-0.2.4.crate \ + https://static.crates.io/crates/once_cell/once_cell-1.18.0.crate \ + https://static.crates.io/crates/pin-project-lite/pin-project-lite-0.2.9.crate \ + https://static.crates.io/crates/pin-utils/pin-utils-0.1.0.crate \ + https://static.crates.io/crates/pkg-config/pkg-config-0.3.27.crate \ + https://static.crates.io/crates/proc-macro2/proc-macro2-1.0.60.crate \ + https://static.crates.io/crates/quote/quote-1.0.28.crate \ + https://static.crates.io/crates/rustix/rustix-0.37.20.crate \ + https://static.crates.io/crates/ryu/ryu-1.0.13.crate \ + https://static.crates.io/crates/serde/serde-1.0.164.crate \ + https://static.crates.io/crates/serde_derive/serde_derive-1.0.164.crate \ + https://static.crates.io/crates/serde_json/serde_json-1.0.96.crate \ + https://static.crates.io/crates/signal-hook-registry/signal-hook-registry-1.4.1.crate \ + https://static.crates.io/crates/slab/slab-0.4.8.crate \ + https://static.crates.io/crates/smart-default/smart-default-0.6.0.crate \ + https://static.crates.io/crates/socket2/socket2-0.4.9.crate \ + https://static.crates.io/crates/strsim/strsim-0.10.0.crate \ + https://static.crates.io/crates/syn/syn-1.0.109.crate \ + https://static.crates.io/crates/syn/syn-2.0.18.crate \ + https://static.crates.io/crates/thiserror-impl/thiserror-impl-1.0.40.crate \ + https://static.crates.io/crates/thiserror/thiserror-1.0.40.crate \ + https://static.crates.io/crates/tokio-macros/tokio-macros-2.1.0.crate \ + https://static.crates.io/crates/tokio/tokio-1.28.2.crate \ + https://static.crates.io/crates/unicode-ident/unicode-ident-1.0.9.crate \ + https://static.crates.io/crates/utf8parse/utf8parse-0.2.1.crate \ + https://static.crates.io/crates/wasi/wasi-0.11.0+wasi-snapshot-preview1.crate \ + https://static.crates.io/crates/winapi-i686-pc-windows-gnu/winapi-i686-pc-windows-gnu-0.4.0.crate \ + https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/winapi-x86_64-pc-windows-gnu-0.4.0.crate \ + https://static.crates.io/crates/winapi/winapi-0.3.9.crate \ + https://static.crates.io/crates/windows-sys/windows-sys-0.48.0.crate \ + https://static.crates.io/crates/windows-targets/windows-targets-0.48.0.crate \ + https://static.crates.io/crates/windows_aarch64_gnullvm/windows_aarch64_gnullvm-0.48.0.crate \ + https://static.crates.io/crates/windows_aarch64_msvc/windows_aarch64_msvc-0.48.0.crate \ + https://static.crates.io/crates/windows_i686_gnu/windows_i686_gnu-0.48.0.crate \ + https://static.crates.io/crates/windows_i686_msvc/windows_i686_msvc-0.48.0.crate \ + https://static.crates.io/crates/windows_x86_64_gnu/windows_x86_64_gnu-0.48.0.crate \ + https://static.crates.io/crates/windows_x86_64_gnullvm/windows_x86_64_gnullvm-0.48.0.crate \ + https://static.crates.io/crates/windows_x86_64_msvc/windows_x86_64_msvc-0.48.0.crate" +MD5SUM_x86_64="dc76a1933efe5cc7b29bf038376bcb60 \ + 864d84ec428600e74b322b01d0d9040c \ + fefa6f663a171d17cd210af8a8cf979d \ + aea9df8755bcb59733b1be84252ffd00 \ + d2453c99c7af98286c2dc9017a8dba6d \ + d303b3d9c077ff67b2ae93e7354830cf \ + 285e1a0d21d8078099686654ad13235a \ + 05d77ef52e90ad161fdd41b252420467 \ + a295edb6953237ebbdfa8e731229f9a3 \ + 7d83f411bb22318c65fec8bbee937ece \ + 1b4f420f92f4ef2bab6f00dee3626de6 \ + f76d8a8006d0bf162c9f36a434476c45 \ + b2ddb7066ebce14862707f98be002c6d \ + 174448468cf3c9ccffd07dddd68df964 \ + 010f6d0e98cc2a2b99907a23c6cd6bbc \ + a9bbef8e965372f310b1187ed99a9ebf \ + 96c0b4f4f9c2cf5b997e62fc36deebd4 \ + 0978758ab068cf97fb551ff08d5c64eb \ + fe60ae14723027a32978b7afd45dd87e \ + 2547929b1e53593dbad1729791feb6c6 \ + 7ef916a17b87cf35a7e7fac44bb20390 \ + b170c380ee4d59e4ed866afaa26a86c7 \ + 878ece459543004969e42906a59bb848 \ + fc65414dcac661c46f2cfad7722304f9 \ + b21aa70c76c22f8936338797372236bf \ + 90dd7e5de8d668d26234ac4e308ef6a2 \ + 8dab3b3ec00dc56cffde0b0c410d47b5 \ + 378bd2c8eb6adcc1a837558e1927e1eb \ + b2458958308a0923a65777b9297bf11a \ + 2399b8b3b39b993d8e44d2fc1628663c \ + 6052db16e7627061500931e7f53b0128 \ + 3f798ffba5e1f1ec5ad2df0afd1f76f8 \ + 3e2c0b885f7430e02dd6df1f8c626bc7 \ + 83e4c4337a8dac395b19ebcb8e3136a7 \ + 7ee7fac47a513e4f7e44c66195ad8051 \ + 10764f40bd10141d9f12920d7cfa123c \ + b92fa50f56a1e06a7f1bf665442d4a73 \ + c9fa9187985880eb320b350bd9024510 \ + 109da42b31a8942bc91555ad6c4ed6a5 \ + fe77a3f609b6fd8d5b08f3b2ef14d2ad \ + 639af0cca65c012e6a028acfb657e417 \ + cb2673febef851f50e1a5e2eccb32eae \ + 2462165e077d8a663e36d1fc030d3afe \ + c6612f34c3ee98ced239da95fbede236 \ + d2920a948e00e7c077883cebba898847 \ + ffbab2186e43af074b619d6d8bfe3566 \ + 84a3fa6d10e58bddb269d653a1d1735f \ + fd05e11da4cc641616b87a31223645bd \ + 18fa61f2d92d4df309c67cb3f3197987 \ + bcaebb6074616f470c9f80e42406836f \ + 94b8bf179385ff071bdc33b58bf047c0 \ + c2fcb0d833f465037c91bfeb3f1cefc8 \ + 6361a447cdbc285fce46c8a090428167 \ + 2dc8aacabbc090f8025a4789d4d6d8f0 \ + ce6dde2ea2691fdd97632fb8c9b3e042 \ + 07c75fec267864bcbb800ca7709ceae2 \ + 73d4dff694f3acab34c217b4f4943a37 \ + 1428169df4dd87209e7c0645616da82c \ + a44fba1024d0f9892cc5a41e9ca5cfdb \ + 83dd589ed909edec46fa36663d468485 \ + 853888e375addadf7e85c8499e0745d3 \ + cea43537c5f6a3adf886a49814e3ff75 \ + fa6cd406107683737b6525dcf3d90f39 \ + f4e16ed6fedc75de9647dee3ff4d3967 \ + 22e95901b912671da26457ac33e36a23 \ + cf636206d0c3287ce209551fc5b02d88 \ 26b4ac1432c227434bc943817f42872e \ - 781d4ccf5d04c98fa02af207a9639249 \ - acc287a32cea7e35d5d35207a1c9e14a \ - 09f09b3f56045183393726a31d8a0192 \ - 80ca0de72168dc03e90bc3c519153305 \ - a8de006fe0c7e373c560dd51599287a8 \ - c6c50e4feea5f4cc4e1fb3c7e88606a5 \ - 4d130fad86abe7c08cddf9275e031bd6 \ - 4272c279b06b88f8b0ffce7109348e27 \ - a51c43692084979295641a7ffba4b297 \ - 333b4ba3f64c35b6f89b521e8d64548b \ - 63630c8b8aeb092854a6e47f5d6468e1 \ - 8b01b016a9b6deebc1b43f296057efb5 \ - a312b55a428f827a91097d1d8497b02b \ - b44489eb4799c4fabac3fceb48de54f7 \ - 0498c4a11448bfc35dc7bb2caa64c753 \ - c900e7dbce808ff8ced375077b17a163 \ + 4acc1eadff484a737c93592e15b31f8a \ + 82d98dc87dc8503400aa095f5aa70f13 \ + 64d9f46e9ba78f68c30c486be3d8b7df \ + bd8c0b43f8eda422cfa6b58cca1a5f5b \ + dd290e713c28d2e565d78eedd471ed78 \ + ab44b0c93adeb9ee88e1c66555b8e6a7 \ + 8d8246e06d38a79f77e0d82e088474b6 \ + 28423beab35a69836d3d5d6bfa24e1e5 \ + 2e6f3d2a4c7414137fa48dfd73678840 \ + ceee1159c41351d05f4cf705490867b3 \ + e972ea58ec203bfa6c79c1207852298b \ db96b50050277bf05a3c68534bbb9586 \ 09de9d01e7331ff3da11f58be8bef0df \ - 38346bab0933c9eb1e36d22fe4220ba7" -DOWNLOAD_x86_64="" -MD5SUM_x86_64="" + 0498c4a11448bfc35dc7bb2caa64c753 \ + f2797ade0e36f1e5d6be9d11b5076582 \ + 7244738a73643f06df82069d00393ad7 \ + e8732bb9eec91463ea10020fc16991c1 \ + 3d2bf2e578fe93c538d4f8c5cfddbe9b \ + 631f9e1bcfe18e3976ef4c893ee13531 \ + f3dad0f67aa70c6618c1593bd2086c36 \ + 085ec81e4ced998bb7f1aea30b7a630e \ + e24dfcf625e130a1e6db0ae375a17dd7 \ + 2fa0c13b386de68baa17168774b1c5fa" REQUIRES="system76-io-dkms rustup %README%" MAINTAINER="Erich Ritz" EMAIL="erich.public@protonmail.com" diff --git a/system/system76-power/xeon_fan_curve.patch b/system/system76-power/xeon_fan_curve.patch new file mode 100644 index 0000000000..4cd1ffe449 --- /dev/null +++ b/system/system76-power/xeon_fan_curve.patch @@ -0,0 +1,52 @@ +From 9de22620c8876ddfa15a452d5435405f43e8a1fd Mon Sep 17 00:00:00 2001 +From: Erich Ritz <erich.public@protonmail.com> +Date: Wed, 23 Mar 2022 08:28:57 -0500 +Subject: [PATCH] Make xeon fan curve more aggressive + +I've been suffering from occasional power offs with no warning, and I +suspect the CPU is getting too hot. On the most recent power off, the +computer once again powered down during the bootup phase (before the EFI +boot screen). To me this solidified my suspicions. + +I have a a thelio-massive-b1 with 2 +Intel(R) Xeon(R) Gold 6238 CPU @ 2.10GHz + +I patched the source making the xeon fan curve more aggressive and the +maximum CPU temperatures are now a little lower. Under low system load +there is no noticable difference in fan speed. + +Plots of CPU temperature, fan speed, and fan command are attached as +comments to the commit on GitHub. + +Signed-off-by: Erich Ritz <erich.public@protonmail.com> +--- + src/fan.rs | 13 ++++++------- + 1 file changed, 6 insertions(+), 7 deletions(-) + +diff --git a/src/fan.rs b/src/fan.rs +index c0fca10..73e284c 100644 +--- a/src/fan.rs ++++ b/src/fan.rs +@@ -271,13 +271,12 @@ impl FanCurve { + .append(50_00, 40_00) + .append(55_00, 45_00) + .append(60_00, 50_00) +- .append(65_00, 55_00) +- .append(70_00, 60_00) +- .append(72_00, 65_00) +- .append(74_00, 80_00) +- .append(76_00, 85_00) +- .append(77_00, 90_00) +- .append(78_00, 100_00) ++ .append(62_00, 60_00) ++ .append(64_00, 65_00) ++ .append(66_00, 80_00) ++ .append(68_00, 85_00) ++ .append(69_00, 90_00) ++ .append(70_00, 100_00) + } + + pub fn get_duty(&self, temp: i16) -> Option<u16> { +-- +2.35.6 + |