amdgpu: add custom fan control
This commit is contained in:
		
							parent
							
								
									7ccbca83bc
								
							
						
					
					
						commit
						ee22f17dbe
					
				
					 3 changed files with 59 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
{ pkgs, ... }:
 | 
			
		||||
{ pkgs, lib, ... }:
 | 
			
		||||
let
 | 
			
		||||
  undervoltGpu = pkgs.writeShellScript "undervolt-gpu" ''
 | 
			
		||||
    set -xe
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +18,13 @@ in
 | 
			
		|||
    "amdgpu.ppfeaturemask=0xfffd7fff" # enable undervolting
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  systemd.services.amd-fan-control = {
 | 
			
		||||
    script = ''
 | 
			
		||||
      ${lib.getExe pkgs.amd-fan-control} /sys/class/drm/card1/device 60 85
 | 
			
		||||
    '';
 | 
			
		||||
    wantedBy = [ "multi-user.target" ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  hardware.opengl.driSupport = true;
 | 
			
		||||
  # # For 32 bit applications
 | 
			
		||||
  hardware.opengl.driSupport32Bit = true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										50
									
								
								scripts/amd-fan-control
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										50
									
								
								scripts/amd-fan-control
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
#!/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
 | 
			
		||||
 | 
			
		||||
MIN="$2"
 | 
			
		||||
MAX="$3"
 | 
			
		||||
 | 
			
		||||
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 - $MIN) * 255 / ($MAX - $MIN) ))
 | 
			
		||||
 | 
			
		||||
    if [ "$PWM" -gt 255 ]; then
 | 
			
		||||
        PWM=255
 | 
			
		||||
    elif [ "$PWM" -lt 0 ]; then
 | 
			
		||||
        PWM=0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    echo 1 > "$HWMON/pwm1_enable"
 | 
			
		||||
    echo "$PWM" > "$HWMON/pwm1"
 | 
			
		||||
    sleep .1s
 | 
			
		||||
done
 | 
			
		||||
| 
						 | 
				
			
			@ -23,6 +23,7 @@
 | 
			
		|||
  in
 | 
			
		||||
  with final;
 | 
			
		||||
  createScripts {
 | 
			
		||||
    amd-fan-control = [ bash ];
 | 
			
		||||
    br = [ ];
 | 
			
		||||
    bmenu = [
 | 
			
		||||
      bemenu
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue