-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathamdgpu_fans.py
80 lines (69 loc) · 2.37 KB
/
amdgpu_fans.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import sys
from os import chdir,system,listdir
import getopt
import re
# vendor id of AMD
amdgpu_vendor_id = '0x1002'
def set_fan_speed(adapter, percent):
chdir('/sys/class/drm/card{}/device'.format(adapter))
vendor_id = '0000'
with open('vendor') as f:
vendor_id = f.readline()
f.close()
vendor_id = vendor_id.strip('\n')
# check if the device is AMD GPU by vendor ID
if vendor_id == amdgpu_vendor_id:
hwmon = listdir('/sys/class/drm/card{}/device/hwmon'.format(adapter))[0]
chdir('/sys/class/drm/card{}/device/hwmon/{}'.format(adapter, hwmon))
pwm_max = 0
pwm_min = 0
pwm = 0
with open('pwm1_max') as f:
pwm_max = int(f.readline().strip('\n'))
f.close()
with open('pwm1_min') as f:
pwm_min = int(f.readline().strip('\n'))
f.close()
pwm_gap = pwm_max - pwm_min
pwm = int( float(pwm_min) + float(pwm_gap) * float (percent/100.0))
system("echo 1 > pwm1_enable")
system("echo {} > pwm1".format(pwm))
# double check pwm
pwm_set = 0
with open('pwm1') as f:
pwm_set = int(f.readline().strip('\n'))
f.close()
if pwm_set > pwm - 6 and pwm_set < pwm + 6:
return True
else:
return False
else:
return False
if __name__ == '__main__':
try:
opts,args = getopt.getopt(sys.argv[1:],"a:s:")
except getopt.GetoptError:
print "Usage: amdgpu_fans.py (-a [Adapter No.]) -s [0-100])"
sys.exit(2)
adapters = '-1'
# read command line arguments
for opt,arg in opts:
if opt == '-a':
adapters = str(arg)
adapters = adapters.split(',')
if opt == '-s':
speed = int(arg)
# if -1 set all GPU speed
if adapters == '-1':
adapters = []
dir_list = listdir('/sys/class/drm')
for directory in dir_list:
reg = r'(?<=card)\d*$'
searchobj = re.search(pattern=reg, string=directory, flags=re.M|re.I)
if searchobj:
adapters.append(searchobj.group())
for adapter in adapters:
if set_fan_speed(int(adapter), speed):
print "Set adapter {} to speed {}%".format(adapter, speed)
else:
print "Set adapter {} failed, maybe not AMD GPU".format(adapter)