summaryrefslogtreecommitdiffstats
path: root/system/system76-power
diff options
context:
space:
mode:
Diffstat (limited to 'system/system76-power')
-rw-r--r--system/system76-power/README4
-rw-r--r--system/system76-power/fix_groups.patch22
-rw-r--r--system/system76-power/nvme_temp.patch135
-rw-r--r--system/system76-power/system76-power.SlackBuild179
-rw-r--r--system/system76-power/system76-power.info302
-rw-r--r--system/system76-power/xeon_fan_curve.patch52
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
+