dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: bugzilla-daemon@bugzilla.kernel.org
To: dri-devel@lists.freedesktop.org
Subject: [Bug 201539] AMDGPU R9 390 automatic fan speed control in Linux 4.19/4.20/5.0
Date: Fri, 06 Dec 2019 03:22:25 +0000	[thread overview]
Message-ID: <bug-201539-2300-fv02bblGv8@https.bugzilla.kernel.org/> (raw)
In-Reply-To: <bug-201539-2300@https.bugzilla.kernel.org/>

https://bugzilla.kernel.org/show_bug.cgi?id=201539

--- Comment #38 from muncrief (rmuncrief@humanavance.com) ---
(In reply to MasterCATZ from comment #37)
> well its neither of those modules 
> I should have looked at the files after I scanned for files containing 104000
> 
> 
> I can not even force run the cards in performance mode anymore with 100% fan
> speed stuck on 
> 
> if i could just find the setting to tell amdgpu / hwmon / powerplay what
> temp I call hot this would be solved

Here is a slightly modified version of a fan control script, along with the
service to run it, from the Arch Wiki. I don't know what distribution you use
but hopefully this will at least get you started. Unfortunately it doesn't seem
like the kernel devs are interested in fixing this, so after a long time I just
had to use this kludgey solution.

1. Create a file with the following contents named "amdgpu-fancontrol" in
"/usr/local/bin" and make it executable.

--------------- Start amdgpu-fancontrol ---------------

#!/bin/bash

HYSTERESIS=6000   # in mK
SLEEP_INTERVAL=1  # in s
DEBUG=true

# set temps (in degrees C * 1000) and corresponding pwm values in ascending
order and with the same amount of values
TEMPS=( 40000  50000  65000 75000 80000 90000 )
PWMS=(      0  100     140   190   200   255 )

# hwmon paths, hardcoded for one amdgpu card, adjust as needed
HWMON=$(ls /sys/class/drm/card0/device/hwmon)
FILE_PWM=$(echo /sys/class/drm/card0/device/hwmon/$HWMON/pwm1)
FILE_FANMODE=$(echo /sys/class/drm/card0/device/hwmon/$HWMON/pwm1_enable)
FILE_TEMP=$(echo /sys/class/drm/card0/device/hwmon/$HWMON/temp1_input)
# might want to use this later
#FILE_TEMP_CRIT=$(echo /sys/class/hwmon/hwmon?/temp1_crit_hyst)
[[ -f "$FILE_PWM" && -f "$FILE_FANMODE" && -f "$FILE_TEMP" ]] || { echo
"invalid hwmon files" ; exit 1; }

# load configuration file if present
[ -f /etc/amdgpu-fancontrol.cfg ] && . /etc/amdgpu-fancontrol.cfg

# check if amount of temps and pwm values match
if [ "${#TEMPS[@]}" -ne "${#PWMS[@]}" ]
then
  echo "Amount of temperature and pwm values does not match"
  exit 1
fi

# checking for privileges
if [ $UID -ne 0 ]
then
  echo "Writing to sysfs requires privileges, relaunch as root"
  exit 1
fi

function debug {
  if $DEBUG; then
    echo $1
  fi
}

# set fan mode to max(0), manual(1) or auto(2)
function set_fanmode {
  echo "setting fan mode to $1"
  echo "$1" > "$FILE_FANMODE"
}

function set_pwm {
  NEW_PWM=$1
  OLD_PWM=$(cat $FILE_PWM)

  echo "current pwm: $OLD_PWM, requested to set pwm to $NEW_PWM"
  debug "current pwm: $OLD_PWM, requested to set pwm to $NEW_PWM"
  if [ $(cat ${FILE_FANMODE}) -ne 1 ]
  then
    echo "Fanmode not set to manual."
    set_fanmode 1
  fi

  if [ "$NEW_PWM" -gt "$OLD_PWM" ] || [ -z "$TEMP_AT_LAST_PWM_CHANGE" ] || [
$(($(cat $FILE_TEMP) + HYSTERESIS)) -le "$TEMP_AT_LAST_PWM_CHANGE" ]; then
    $DEBUG || echo "current temp: $TEMP"
    echo "temp at last change was $TEMP_AT_LAST_PWM_CHANGE"
    echo "changing pwm to $NEW_PWM"
    echo "$NEW_PWM" > "$FILE_PWM"
    TEMP_AT_LAST_PWM_CHANGE=$(cat $FILE_TEMP)
  else
    debug "not changing pwm, we just did at $TEMP_AT_LAST_PWM_CHANGE, next
change when below $((TEMP_AT_LAST_PWM_CHANGE - HYSTERESIS))"
  fi
}

function interpolate_pwm {
  i=0
  TEMP=$(cat $FILE_TEMP)

  debug "current temp: $TEMP"

  if [[ $TEMP -le ${TEMPS[0]} ]]; then
    # below first point in list, set to min speed
    set_pwm "${PWMS[i]}"
    return
  fi

  for i in "${!TEMPS[@]}"; do
    if [[ $i -eq $((${#TEMPS[@]}-1)) ]]; then
      # hit last point in list, set to max speed
      set_pwm "${PWMS[i]}"
      return
    elif [[ $TEMP -gt ${TEMPS[$i]} ]]; then
      continue
    fi

    # interpolate linearly
    LOWERTEMP=${TEMPS[i-1]}
    HIGHERTEMP=${TEMPS[i]}
    LOWERPWM=${PWMS[i-1]}
    HIGHERPWM=${PWMS[i]}
    PWM=$(echo "( ( $TEMP - $LOWERTEMP ) * ( $HIGHERPWM - $LOWERPWM ) / (
$HIGHERTEMP - $LOWERTEMP ) ) + $LOWERPWM" | bc)
    debug "interpolated pwm value for temperature $TEMP is: $PWM"
    set_pwm "$PWM"
    return
  done
}

function reset_on_fail {
  echo "exiting, resetting fan to auto control..."
  set_fanmode 2
  exit 1
}

# always try to reset fans on exit
trap "reset_on_fail" SIGINT SIGTERM

function run_daemon {
  while :; do
    interpolate_pwm
    debug
    sleep $SLEEP_INTERVAL
  done
}

# set fan control to manual
set_fanmode 1

# finally start the loop
run_daemon

--------------- End amdgpu-fancontrol ---------------


2. Create a file with the following contents named "amdgpu-fancontrol.service"
in /etc/systemd/system.

--------------- Start amdgpu-fancontrol.service ---------------

[Unit]
Description=amdgpu-fancontrol

[Service]
Type=simple
ExecStart=/usr/local/bin/amdgpu-fancontrol

[Install]
WantedBy=multi-user.target

--------------- End amdgpu-fancontrol.service ---------------

3. Here's how to enable, disable, and get the status of the fan control
service:

sudo systemctl enable amdgpu-fancontrol
sudo systemctl start amdgpu-fancontrol
sudo systemctl status amdgpu-fancontrol

-- 
You are receiving this mail because:
You are watching the assignee of the bug.
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2019-12-06  3:22 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-27 12:32 [Bug 201539] New: AMDGPU R9 390 automatic fan speed control in Linux 4.19 bugzilla-daemon
2018-10-27 12:34 ` [Bug 201539] " bugzilla-daemon
2018-10-27 12:35 ` bugzilla-daemon
2018-10-27 12:45 ` bugzilla-daemon
2018-12-08  7:59 ` bugzilla-daemon
2018-12-21  1:30 ` bugzilla-daemon
2018-12-21  2:16 ` bugzilla-daemon
2018-12-21 15:06 ` bugzilla-daemon
2018-12-21 15:56 ` bugzilla-daemon
2018-12-24 11:55 ` [Bug 201539] AMDGPU R9 390 automatic fan speed control in Linux 4.19/4.20 bugzilla-daemon
2018-12-24 11:55 ` bugzilla-daemon
2018-12-31  9:06 ` bugzilla-daemon
2019-01-05 13:41 ` bugzilla-daemon
2019-03-04  2:17 ` [Bug 201539] AMDGPU R9 390 automatic fan speed control in Linux 4.19/4.20/5.0 bugzilla-daemon
2019-03-09  2:44 ` bugzilla-daemon
2019-04-17 10:37 ` bugzilla-daemon
2019-06-06 11:18 ` bugzilla-daemon
2019-06-06 11:44 ` bugzilla-daemon
2019-06-06 12:18 ` bugzilla-daemon
2019-06-07  1:41 ` bugzilla-daemon
2019-06-18 17:42 ` bugzilla-daemon
2019-06-24  2:18 ` bugzilla-daemon
2019-10-05 13:19 ` bugzilla-daemon
2019-11-03  4:08 ` bugzilla-daemon
2019-11-03  4:16 ` bugzilla-daemon
2019-11-03  4:29 ` bugzilla-daemon
2019-11-03  4:37 ` bugzilla-daemon
2019-11-05 23:47 ` bugzilla-daemon
2019-11-06  9:35 ` bugzilla-daemon
2019-11-16  0:42 ` bugzilla-daemon
2019-11-16  0:57 ` bugzilla-daemon
2019-11-16 12:07 ` bugzilla-daemon
2019-11-16 13:36 ` bugzilla-daemon
2019-11-16 14:15 ` bugzilla-daemon
2019-11-16 22:35 ` bugzilla-daemon
2019-11-17  0:43 ` bugzilla-daemon
2019-11-17  7:46 ` bugzilla-daemon
2019-12-05 17:00 ` bugzilla-daemon
2019-12-06  2:58 ` bugzilla-daemon
2019-12-06  3:04 ` bugzilla-daemon
2019-12-06  3:22 ` bugzilla-daemon [this message]
2019-12-06  4:30 ` bugzilla-daemon
2019-12-06  4:32 ` bugzilla-daemon
2019-12-06  4:45 ` bugzilla-daemon
2019-12-06  5:01 ` bugzilla-daemon
2019-12-06  5:52 ` bugzilla-daemon
2019-12-06  5:56 ` bugzilla-daemon
2019-12-07 19:48 ` bugzilla-daemon
2019-12-07 20:05 ` bugzilla-daemon
2019-12-07 20:20 ` bugzilla-daemon
2019-12-07 20:46 ` bugzilla-daemon
2019-12-07 21:04 ` bugzilla-daemon
2019-12-09  0:33 ` bugzilla-daemon
2019-12-09  0:55 ` bugzilla-daemon
2019-12-09 21:26 ` bugzilla-daemon
2019-12-10  1:03 ` bugzilla-daemon
2020-05-21 15:31 ` bugzilla-daemon
2020-06-03  8:26 ` bugzilla-daemon
2020-08-10  0:26 ` bugzilla-daemon
2020-12-01 21:54 ` bugzilla-daemon
2020-12-01 21:57 ` bugzilla-daemon
2020-12-01 22:47 ` bugzilla-daemon
2020-12-01 23:01 ` bugzilla-daemon
2020-12-02  1:33 ` bugzilla-daemon
2020-12-02  3:30 ` bugzilla-daemon
2020-12-02  3:34 ` bugzilla-daemon
2020-12-02  8:38 ` bugzilla-daemon
2020-12-02  9:57 ` bugzilla-daemon
2020-12-02 16:21 ` bugzilla-daemon
2020-12-02 19:31 ` bugzilla-daemon
2020-12-02 20:16 ` bugzilla-daemon
2020-12-02 21:11 ` bugzilla-daemon
2020-12-03  1:04 ` bugzilla-daemon
2020-12-13 23:56 ` bugzilla-daemon
2020-12-14 23:05 ` bugzilla-daemon
2020-12-14 23:26 ` bugzilla-daemon
2020-12-14 23:44 ` bugzilla-daemon
2021-02-06  5:34 ` bugzilla-daemon
2022-02-05 21:59 ` bugzilla-daemon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-201539-2300-fv02bblGv8@https.bugzilla.kernel.org/ \
    --to=bugzilla-daemon@bugzilla.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).