diff options
author | Jason M. Bills <jason.m.bills@linux.intel.com> | 2020-12-08 00:38:17 +0300 |
---|---|---|
committer | Jason M. Bills <jason.m.bills@linux.intel.com> | 2020-12-08 00:38:17 +0300 |
commit | 8d6ae7f2a817751fad151168fa10ce28ee0869d8 (patch) | |
tree | 281032f7ec07c41589aa094bd165cc2a98f2d3a7 /meta-quanta/meta-gbs/recipes-gbs/gbs-detect-fan-fail/files/gbs-detect-fan-fail.sh | |
parent | c16fb8893b19075db4bcf3b5bf33c1db8c3ca2bd (diff) | |
parent | 5da3c2284560a7e08ffafd03c5b5ba44a3242228 (diff) | |
download | openbmc-8d6ae7f2a817751fad151168fa10ce28ee0869d8.tar.xz |
Merge tag '0.26' of ssh://git-amr-1.devtools.intel.com:29418/openbmc-openbmc into update
Diffstat (limited to 'meta-quanta/meta-gbs/recipes-gbs/gbs-detect-fan-fail/files/gbs-detect-fan-fail.sh')
-rw-r--r-- | meta-quanta/meta-gbs/recipes-gbs/gbs-detect-fan-fail/files/gbs-detect-fan-fail.sh | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/meta-quanta/meta-gbs/recipes-gbs/gbs-detect-fan-fail/files/gbs-detect-fan-fail.sh b/meta-quanta/meta-gbs/recipes-gbs/gbs-detect-fan-fail/files/gbs-detect-fan-fail.sh new file mode 100644 index 000000000..56ae7bbc5 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-gbs/gbs-detect-fan-fail/files/gbs-detect-fan-fail.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +## + # This script is to handle fan fail condition which is described below. + # Fan fail means one fan RPM is under its CriticalLow. If BMC encounters + # such situation, then sets other fans to full speed. + # + +# get fan state +function get_fan_state() { + get_property_path='xyz.openbmc_project.Sensor.Threshold.Critical CriticalAlarmLow' + fan_state="$(busctl get-property $1 $2 $get_property_path | awk '{print $2}')" + echo "$fan_state" +} + +# check fan fail +function is_fan_fail() { + fan_state=("$@") + + for i in "${fan_state[@]}" + do + if [ ! -z "$i" ] + then + if [ $i == "true" ] + then + echo 1 + return + fi + fi + done + echo 0 +} + +fan_tach_path=( '/xyz/openbmc_project/sensors/fan_tach/fan0' + '/xyz/openbmc_project/sensors/fan_tach/fan1' + '/xyz/openbmc_project/sensors/fan_tach/fb_fan0' + '/xyz/openbmc_project/sensors/fan_tach/fb_fan1' + '/xyz/openbmc_project/sensors/fan_tach/fb_fan2' + ) + +check_fail_flag=0 +is_fan_fail_flag=0 +current_fan_state=() + +while true +do + for i in ${!fan_tach_path[@]} + do + mapper wait ${fan_tach_path[$i]} + hwmon_path="$(mapper get-service ${fan_tach_path[0]})" + current_fan_state[$i]=$(get_fan_state $hwmon_path ${fan_tach_path[$i]}) + done + + is_fan_fail_flag=$(is_fan_fail "${current_fan_state[@]}") + + # if fan fails then set all fans to full speed + if [ $is_fan_fail_flag -eq 1 ] && [ $check_fail_flag -eq 0 ] + then + check_fail_flag=1 + systemctl stop phosphor-pid-control.service + + # fans recover to normal state + elif [ $is_fan_fail_flag -eq 0 ] && [ $check_fail_flag -eq 1 ] + then + check_fail_flag=0 + systemctl restart phosphor-pid-control.service + fi + + sleep 2 +done |