Revert "amdgpu: remove manual fan control"
This reverts commit 1336203f52.
			
			
This commit is contained in:
		
							parent
							
								
									43b501b261
								
							
						
					
					
						commit
						1c91c3700b
					
				
					 3 changed files with 74 additions and 1 deletions
				
			
		| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
{ pkgs, ... }:
 | 
					{ pkgs, lib, ... }:
 | 
				
			||||||
let
 | 
					let
 | 
				
			||||||
  undervoltGpu = pkgs.writeShellScript "undervolt-gpu" ''
 | 
					  undervoltGpu = pkgs.writeShellScript "undervolt-gpu" ''
 | 
				
			||||||
    set -xe
 | 
					    set -xe
 | 
				
			||||||
| 
						 | 
					@ -17,6 +17,17 @@ in
 | 
				
			||||||
    "amdgpu.ppfeaturemask=0xfffd7fff" # enable undervolting
 | 
					    "amdgpu.ppfeaturemask=0xfffd7fff" # enable undervolting
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  systemd.services.amd-fan-control = {
 | 
				
			||||||
 | 
					    script = ''
 | 
				
			||||||
 | 
					      ${lib.getExe pkgs.amd-fan-control} /sys/class/drm/card1/device 60 100
 | 
				
			||||||
 | 
					    '';
 | 
				
			||||||
 | 
					    serviceConfig = {
 | 
				
			||||||
 | 
					      Restart = "always";
 | 
				
			||||||
 | 
					      RestartSec = 10;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    wantedBy = [ "multi-user.target" ];
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  hardware.graphics.enable32Bit = true;
 | 
					  hardware.graphics.enable32Bit = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  hardware.graphics.extraPackages = with pkgs; [
 | 
					  hardware.graphics.extraPackages = with pkgs; [
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										61
									
								
								scripts/amd-fan-control
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										61
									
								
								scripts/amd-fan-control
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,61 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEVICE="$1" # eg: /sys/class/drm/card1/device
 | 
				
			||||||
 | 
					HWMON=$(echo "$DEVICE"/hwmon/hwmon*)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exit() {
 | 
				
			||||||
 | 
					    echo "Setting controll to auto" >&2
 | 
				
			||||||
 | 
					    echo 2 > "$HWMON/pwm1_enable"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					trap exit EXIT INT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bail() {
 | 
				
			||||||
 | 
					    echo "Error: $@" >&2
 | 
				
			||||||
 | 
					    echo "Exiting..." >&2
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ! [ -d "$HWMON" ]; then
 | 
				
			||||||
 | 
					    bail "Invalid HWMON"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TEMP_INPUT="$HWMON/temp2_input"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ! [ -f $TEMP_INPUT ]; then
 | 
				
			||||||
 | 
					    bail "Invalid TEMP_INPUT"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TEMP_MIN="$2"
 | 
				
			||||||
 | 
					TEMP_MAX="$3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -z "$TEMP_MIN" ];then
 | 
				
			||||||
 | 
					  bail "No minimum temperature provided"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -z "$TEMP_MAX" ];then
 | 
				
			||||||
 | 
					  bail "No maximum temperature provided"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PWM_MIN=0
 | 
				
			||||||
 | 
					PWM_MAX=255
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Running..." >&2
 | 
				
			||||||
 | 
					while true; do
 | 
				
			||||||
 | 
					    TEMPERATURE_RAW=$(cat "$TEMP_INPUT")
 | 
				
			||||||
 | 
					    TEMPERATURE="$(( $TEMPERATURE_RAW / 1000 ))"
 | 
				
			||||||
 | 
					    # Remap from a number between 60_000..90_000 to 0..255
 | 
				
			||||||
 | 
					    PWM=$(( ($TEMPERATURE - $TEMP_MIN) * $PWM_MAX / ($TEMP_MAX - $TEMP_MIN) ))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [ "$PWM" -gt $PWM_MAX ]; then
 | 
				
			||||||
 | 
					        PWM=$PWM_MAX
 | 
				
			||||||
 | 
					    elif [ "$PWM" -lt $PWM_MIN ]; then
 | 
				
			||||||
 | 
					        PWM=$PWM_MIN
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    echo 1 > "$HWMON/pwm1_enable"
 | 
				
			||||||
 | 
					    echo "$PWM" > "$HWMON/pwm1"
 | 
				
			||||||
 | 
					    sleep .1s
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
| 
						 | 
					@ -23,6 +23,7 @@
 | 
				
			||||||
  in
 | 
					  in
 | 
				
			||||||
  with final;
 | 
					  with final;
 | 
				
			||||||
  createScripts {
 | 
					  createScripts {
 | 
				
			||||||
 | 
					    amd-fan-control = [ bash ];
 | 
				
			||||||
    br = [ ];
 | 
					    br = [ ];
 | 
				
			||||||
    bmenu = [
 | 
					    bmenu = [
 | 
				
			||||||
      bemenu
 | 
					      bemenu
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue