All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.