11#! /bin/bash
2+ trap ' cleanup' 0 1 2 3 6 9 10 11 13 15
23
34LEVEL=99
45INTERVAL=5
@@ -14,11 +15,27 @@ LEVEL3=16000
1415LEVEL4=19000
1516LEVEL5=19000
1617
18+ LRR_FILE=" /host/reboot-cause/reboot-cause.txt"
1719I2C_ADAPTER=" /sys/class/i2c-adapter/i2c-2/i2c-11"
20+
1821SENSOR1=" $I2C_ADAPTER /11-004c/hwmon/hwmon*/temp1_input"
1922SENSOR2=" $I2C_ADAPTER /11-004d/hwmon/hwmon*/temp1_input"
2023SENSOR3=" $I2C_ADAPTER /11-004e/hwmon/hwmon*/temp1_input"
2124
25+ SENSOR1_MAX=" $I2C_ADAPTER /11-004c/hwmon/hwmon*/temp1_max"
26+ SENSOR2_MAX=" $I2C_ADAPTER /11-004d/hwmon/hwmon*/temp1_max"
27+ SENSOR3_MAX=" $I2C_ADAPTER /11-004e/hwmon/hwmon*/temp1_max"
28+
29+ SENSOR1_MAX_VAL=$( cat $SENSOR1_MAX )
30+ SENSOR2_MAX_VAL=$( cat $SENSOR2_MAX )
31+ SENSOR3_MAX_VAL=$( cat $SENSOR3_MAX )
32+
33+ # Reducing by 63 to differentiate this temperature settings
34+ # from pmon sensors configuration settings
35+ SENSOR1_NEW_MAX=$( expr ` echo $SENSOR1_MAX_VAL ` + 5000 - 63)
36+ SENSOR2_NEW_MAX=$( expr ` echo $SENSOR2_MAX_VAL ` + 5000 - 63)
37+ SENSOR3_NEW_MAX=$( expr ` echo $SENSOR3_MAX_VAL ` + 5000 - 63)
38+
2239# Three fan trays with each contains two separate fans
2340# fan1-fan4 fan2-fan5 fan3-fan6
2441FANTRAY1_FAN1=$I2C_ADAPTER /11-0029/fan1_target
@@ -46,6 +63,14 @@ function check_module
4663 fi
4764}
4865
66+ function cleanup
67+ {
68+ echo $SENSOR1_MAX_VAL > $SENSOR1_MAX
69+ echo $SENSOR2_MAX_VAL > $SENSOR2_MAX
70+ echo $SENSOR3_MAX_VAL > $SENSOR3_MAX
71+ exit 1
72+ }
73+
4974function check_faulty_fan
5075{
5176
@@ -123,56 +148,95 @@ function update_fan_speed
123148
124149function monitor_temp_sensors
125150{
151+ SENSOR1_CUR_MAX_VAL=$( cat $SENSOR1_MAX )
152+ SENSOR2_CUR_MAX_VAL=$( cat $SENSOR2_MAX )
153+ SENSOR3_CUR_MAX_VAL=$( cat $SENSOR3_MAX )
154+ if [ " $SENSOR1_CUR_MAX_VAL " -ne " $SENSOR1_NEW_MAX " ]
155+ then
156+ SENSOR1_NEW_MAX=$( expr ` echo $SENSOR1_CUR_MAX_VAL ` + 5000 - 63)
157+ SENSOR1_MAX_VAL=$SENSOR1_CUR_MAX_VAL
158+ echo $SENSOR1_NEW_MAX > $SENSOR1_MAX
159+ fi
160+ if [ " $SENSOR2_CUR_MAX_VAL " -ne " $SENSOR2_NEW_MAX " ]
161+ then
162+ SENSOR2_NEW_MAX=$( expr ` echo $SENSOR2_CUR_MAX_VAL ` + 5000 - 63)
163+ SENSOR2_MAX_VAL=$SENSOR2_CUR_MAX_VAL
164+ echo $SENSOR2_NEW_MAX > $SENSOR2_MAX
165+ fi
166+ if [ " $SENSOR3_CUR_MAX_VAL " -ne " $SENSOR3_NEW_MAX " ]
167+ then
168+ SENSOR3_NEW_MAX=$( expr ` echo $SENSOR3_CUR_MAX_VAL ` + 5000 - 63)
169+ SENSOR3_MAX_VAL=$SENSOR3_CUR_MAX_VAL
170+ echo $SENSOR3_NEW_MAX > $SENSOR3_MAX
171+ fi
126172
127- while true # go through all temp sensor outputs
128- do
129- sensor1=$( expr ` echo $( cat $SENSOR1 ) ` / 1000)
130- sensor2=$( expr ` echo $( cat $SENSOR2 ) ` / 1000)
131- sensor3=$( expr ` echo $( cat $SENSOR3 ) ` / 1000)
132- sum=$(( $sensor1 + $sensor2 + $sensor3 ))
133- sensor_temp=$(( $sum / 3 ))
134-
135- if [ " $sensor_temp " -le " 25" ] && [ " $LEVEL " -ne " 0" ]
136- then
137- # Set Fan Speed to 7000 RPM"
138- LEVEL=0
139- update_fan_speed $IDLE
140- logger " Adjusted FAN Speed to $IDLE RPM against $sensor_temp Temperature"
141-
142- elif [ " $sensor_temp " -ge " 26" ] && [ " $sensor_temp " -le " 44" ] && [ " $LEVEL " -ne " 1" ]
143- then
144- # Set Fan Speed to 10000 RPM"
145- LEVEL=1
146- update_fan_speed $LEVEL1
147- logger " Adjusted FAN Speed to $IDLE RPM against $sensor_temp Temperature"
148-
149- elif [ " $sensor_temp " -ge " 45" ] && [ " $sensor_temp " -le " 59" ] && [ " $LEVEL " -ne " 2" ]
150- then
151- # Set Fan Speed to 13000 RPM"
152- LEVEL=2
153- update_fan_speed $LEVEL2
154- logger " Adjusted FAN Speed to $IDLE RPM against $sensor_temp Temperature"
155-
156- elif [ " $sensor_temp " -ge " 60" ] && [ " $sensor_temp " -le " 79" ] && [ " $LEVEL " -ne " 3" ]
157- then
158- # Set Fan Speed to 16000 RPM"
159- LEVEL=3
160- update_fan_speed $LEVEL3
161- logger " Adjusted FAN Speed to $IDLE RPM against $sensor_temp Temperature"
162-
163- elif [ " $sensor_temp " -ge " 80" ] && [ " $LEVEL " -ne " 4" ]
164- then
165- # Set Fan Speed to 19000 RPM"
166- LEVEL=4
167- update_fan_speed $LEVEL4
168- logger " Adjusted FAN Speed to $IDLE RPM against $sensor_temp Temperature"
169- fi
173+ # go through all temp sensor outputs
174+ sensor1=$( expr ` echo $( cat $SENSOR1 ) ` / 1000)
175+ sensor2=$( expr ` echo $( cat $SENSOR2 ) ` / 1000)
176+ sensor3=$( expr ` echo $( cat $SENSOR3 ) ` / 1000)
177+ # All sensors output in 1000's
178+ s1=$( cat $SENSOR1 )
179+ s2=$( cat $SENSOR2 )
180+ s3=$( cat $SENSOR3 )
181+
182+ if [ " $s1 " -ge " $SENSOR1_MAX_VAL " ] || [ " $s2 " -ge " $SENSOR2_MAX_VAL " ] || [ " $s3 " -ge " $SENSOR3_MAX_VAL " ]
183+ then
184+ # Thermal trip is about to happen
185+ echo " Thermal Overload $sensor1 $sensor2 $sensor3 " > $LRR_FILE
186+ logger " Shutting down due to over temperature ($sensor1 degree, $sensor2 degree, $sensor3 degree)"
187+ sync
188+ sleep 1 # Give time to send logger message to server
189+ # Assigning the original max values back in sensors
190+ echo $SENSOR1_MAX_VAL > $SENSOR1_MAX
191+ echo $SENSOR2_MAX_VAL > $SENSOR2_MAX
192+ echo $SENSOR3_MAX_VAL > $SENSOR3_MAX
193+
194+ # ## Not Reached ###
195+ # In case if HW fails to shutdown
196+ /sbin/shutdown -P now
197+ fi
198+ sum=$(( $sensor1 + $sensor2 + $sensor3 ))
199+ sensor_temp=$(( $sum / 3 ))
200+
201+ if [ " $sensor_temp " -le " 25" ] && [ " $LEVEL " -ne " 0" ]
202+ then
203+ # Set Fan Speed to 7000 RPM"
204+ LEVEL=0
205+ update_fan_speed $IDLE
206+ logger " Adjusted FAN Speed to $IDLE RPM against $sensor_temp Temperature"
207+
208+ elif [ " $sensor_temp " -ge " 26" ] && [ " $sensor_temp " -le " 44" ] && [ " $LEVEL " -ne " 1" ]
209+ then
210+ # Set Fan Speed to 10000 RPM"
211+ LEVEL=1
212+ update_fan_speed $LEVEL1
213+ logger " Adjusted FAN Speed to $IDLE RPM against $sensor_temp Temperature"
214+
215+ elif [ " $sensor_temp " -ge " 45" ] && [ " $sensor_temp " -le " 59" ] && [ " $LEVEL " -ne " 2" ]
216+ then
217+ # Set Fan Speed to 13000 RPM"
218+ LEVEL=2
219+ update_fan_speed $LEVEL2
220+ logger " Adjusted FAN Speed to $IDLE RPM against $sensor_temp Temperature"
221+
222+ elif [ " $sensor_temp " -ge " 60" ] && [ " $sensor_temp " -le " 79" ] && [ " $LEVEL " -ne " 3" ]
223+ then
224+ # Set Fan Speed to 16000 RPM"
225+ LEVEL=3
226+ update_fan_speed $LEVEL3
227+ logger " Adjusted FAN Speed to $IDLE RPM against $sensor_temp Temperature"
228+
229+ elif [ " $sensor_temp " -ge " 80" ] && [ " $LEVEL " -ne " 4" ]
230+ then
231+ # Set Fan Speed to 19000 RPM"
232+ LEVEL=4
233+ update_fan_speed $LEVEL4
234+ logger " Adjusted FAN Speed to $IDLE RPM against $sensor_temp Temperature"
235+ fi
170236
171237 # Check for faulty fan
172238 check_faulty_fan
173239
174- done
175-
176240}
177241
178242# Check drivers for sysfs attributes
0 commit comments