sonic-buildimage/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-fanthrml-monitor
RogerX87 33db298d70
[devices]: Update the Wistron platform support in master branch (#12110)
* Update the Wistron platform support in master branch

Signed-off-by: RogerX87 <RogerX87@gmail.com>
2023-02-23 09:08:13 -08:00

355 lines
13 KiB
Bash
Executable File

#!/bin/bash
debug_flag=0
ipmi_val=0
ctrl_mode_val=0
fan_pwm_val=0
fan_rpm_val=0
bmc_sensor_read()
{
ipmi_val=$(ipmitool raw 0x30 0x92 2>>/dev/null)
if [ $? -eq 0 ];then
return 0
fi
return 1
}
#$1=get(0)/set(1), $2=ctrl_mode(1:manual, 0:auto)
#get rtn: ctrl_mode_val, fan_pwm_val
bmc_fan_speed_ctrl()
{
if [ -e /sys/bus/i2c/devices/0-0066/fan_duty_cycle_percentage ];then
if [ $1 -eq 1 ];then
#Set Fan Speed Control
if [ $2 -eq 0 ];then
ipmitool raw 0x30 0x20 0x0 0x0 1>/dev/null 2>/dev/null
else
fan_pwm_input=$(cat /sys/bus/i2c/devices/0-0066/fan_duty_cycle_percentage | awk '{printf $1}')
fan_pwm_input=$( printf "%d" 0x$fan_pwm_input )
ipmitool raw 0x30 0x20 0x1 $fan_pwm_input 1>/dev/null 2>/dev/null
fi
else
#Get Fan Speed Control
ctrl_mode_val=$(echo $ipmi_val | awk '{printf $1}')
fan_pwm_val=$(echo $ipmi_val | awk '{printf $2}')
ctrl_mode_val=$( printf "%d" 0x$ctrl_mode_val )
fan_pwm_val=$( printf "%d" 0x$fan_pwm_val )
echo $fan_pwm_val > /sys/bus/i2c/devices/0-0066/fan_duty_cycle_percentage
fi
fi
}
bmc_fan_presence()
{
if [ -e /sys/bus/i2c/devices/0-0066/fan1_presence ];then
fan_pre_val=$(echo $ipmi_val | awk '{printf $44}')
fan_pre_val=$( printf "%d" 0x$fan_pre_val )
for i in $(seq 0 6);
do
tmp=$((1 << $i))
tmp1=$(($fan_pre_val & $tmp))
if [ $tmp1 -eq 0 ];then
if [ $i == 0 ];then
echo 1 > /sys/bus/i2c/devices/0-0066/fan1_presence
elif [ $i == 1 ];then
echo 1 > /sys/bus/i2c/devices/0-0066/fan2_presence
elif [ $i == 2 ];then
echo 1 > /sys/bus/i2c/devices/0-0066/fan3_presence
elif [ $i == 3 ];then
echo 1 > /sys/bus/i2c/devices/0-0066/fan4_presence
elif [ $i == 4 ];then
echo 1 > /sys/bus/i2c/devices/0-0066/fan5_presence
elif [ $i == 5 ];then
echo 1 > /sys/bus/i2c/devices/0-0066/fan6_presence
else
echo 1 > /sys/bus/i2c/devices/0-0066/fan7_presence
fi
else
if [ $i == 0 ];then
echo 0 > /sys/bus/i2c/devices/0-0066/fan1_presence
elif [ $i == 1 ];then
echo 0 > /sys/bus/i2c/devices/0-0066/fan2_presence
elif [ $i == 2 ];then
echo 0 > /sys/bus/i2c/devices/0-0066/fan3_presence
elif [ $i == 3 ];then
echo 0 > /sys/bus/i2c/devices/0-0066/fan4_presence
elif [ $i == 4 ];then
echo 0 > /sys/bus/i2c/devices/0-0066/fan5_presence
elif [ $i == 5 ];then
echo 0 > /sys/bus/i2c/devices/0-0066/fan6_presence
else
echo 0 > /sys/bus/i2c/devices/0-0066/fan7_presence
fi
fi
done
fi
}
bmc_fan_enable()
{
if [ -e /sys/bus/i2c/devices/0-0066/fan1_enable ];then
fan_en_val=$(echo $ipmi_val | awk '{printf $45}')
fan_en_val=$( printf "%d" 0x$fan_en_val )
for i in $(seq 0 6);
do
tmp=$((1 << $i))
tmp1=$(($fan_en_val & $tmp))
if [ $tmp1 -ne 0 ];then
if [ $i == 0 ];then
echo 1 > /sys/bus/i2c/devices/0-0066/fan1_enable
elif [ $i == 1 ];then
echo 1 > /sys/bus/i2c/devices/0-0066/fan2_enable
elif [ $i == 2 ];then
echo 1 > /sys/bus/i2c/devices/0-0066/fan3_enable
elif [ $i == 3 ];then
echo 1 > /sys/bus/i2c/devices/0-0066/fan4_enable
elif [ $i == 4 ];then
echo 1 > /sys/bus/i2c/devices/0-0066/fan5_enable
elif [ $i == 5 ];then
echo 1 > /sys/bus/i2c/devices/0-0066/fan6_enable
else
echo 1 > /sys/bus/i2c/devices/0-0066/fan7_enable
fi
else
if [ $i == 0 ];then
echo 0 > /sys/bus/i2c/devices/0-0066/fan1_enable
elif [ $i == 1 ];then
echo 0 > /sys/bus/i2c/devices/0-0066/fan2_enable
elif [ $i == 2 ];then
echo 0 > /sys/bus/i2c/devices/0-0066/fan3_enable
elif [ $i == 3 ];then
echo 0 > /sys/bus/i2c/devices/0-0066/fan4_enable
elif [ $i == 4 ];then
echo 0 > /sys/bus/i2c/devices/0-0066/fan5_enable
elif [ $i == 5 ];then
echo 0 > /sys/bus/i2c/devices/0-0066/fan6_enable
else
echo 0 > /sys/bus/i2c/devices/0-0066/fan7_enable
fi
fi
done
fi
}
bmc_fan_speed_rpm()
{
if [ -e /sys/bus/i2c/devices/0-0066/fan1_front_speed_rpm ];then
#fan1 front
hi_byte=$(echo $ipmi_val | awk '{printf $1}')
lo_byte=$(echo $ipmi_val | awk '{printf $2}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan1_front_speed_rpm
#fan1 rear
hi_byte=$(echo $ipmi_val | awk '{printf $15}')
lo_byte=$(echo $ipmi_val | awk '{printf $16}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan1_rear_speed_rpm
#fan2 front
hi_byte=$(echo $ipmi_val | awk '{printf $3}')
lo_byte=$(echo $ipmi_val | awk '{printf $4}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan2_front_speed_rpm
#fan2 rear
hi_byte=$(echo $ipmi_val | awk '{printf $17}')
lo_byte=$(echo $ipmi_val | awk '{printf $18}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan2_rear_speed_rpm
#fan3 front
hi_byte=$(echo $ipmi_val | awk '{printf $5}')
lo_byte=$(echo $ipmi_val | awk '{printf $6}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan3_front_speed_rpm
#fan3 rear
hi_byte=$(echo $ipmi_val | awk '{printf $19}')
lo_byte=$(echo $ipmi_val | awk '{printf $20}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan3_rear_speed_rpm
#fan4 front
hi_byte=$(echo $ipmi_val | awk '{printf $7}')
lo_byte=$(echo $ipmi_val | awk '{printf $8}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan4_front_speed_rpm
#fan4 rear
hi_byte=$(echo $ipmi_val | awk '{printf $21}')
lo_byte=$(echo $ipmi_val | awk '{printf $22}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan4_rear_speed_rpm
#fan5 front
hi_byte=$(echo $ipmi_val | awk '{printf $9}')
lo_byte=$(echo $ipmi_val | awk '{printf $10}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan5_front_speed_rpm
#fan5 rear
hi_byte=$(echo $ipmi_val | awk '{printf $23}')
lo_byte=$(echo $ipmi_val | awk '{printf $24}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan5_rear_speed_rpm
#fan6 front
hi_byte=$(echo $ipmi_val | awk '{printf $11}')
lo_byte=$(echo $ipmi_val | awk '{printf $12}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan6_front_speed_rpm
#fan6 rear
hi_byte=$(echo $ipmi_val | awk '{printf $25}')
lo_byte=$(echo $ipmi_val | awk '{printf $26}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan6_rear_speed_rpm
#fan7 front
hi_byte=$(echo $ipmi_val | awk '{printf $13}')
lo_byte=$(echo $ipmi_val | awk '{printf $14}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan7_front_speed_rpm
#fan7 rear
hi_byte=$(echo $ipmi_val | awk '{printf $27}')
lo_byte=$(echo $ipmi_val | awk '{printf $28}')
hi_byte=$( printf "%d" 0x$hi_byte )
lo_byte=$( printf "%d" 0x$lo_byte )
fan_rpm_val=$((hi_byte<<8))
fan_rpm_val=`expr $fan_rpm_val + $lo_byte`
echo $fan_rpm_val > /sys/bus/i2c/devices/0-0066/fan7_rear_speed_rpm
fi
}
do_fan_update()
{
#fan presence
bmc_fan_presence
#fan enable
bmc_fan_enable
#fan speed rpm
bmc_fan_speed_rpm
if [ $debug_flag -eq 0 ];then
#Get Fan RPM
bmc_fan_speed_ctrl 0
else
bmc_fan_speed_ctrl 1 1
fi
}
do_thermal_update()
{
if [ -e /sys/bus/i2c/devices/0-004f/temp1_input ];then
#lm75_1
thermal_val=$(echo $ipmi_val | awk '{printf $29}')
thermal_val=$( printf "%d" 0x$thermal_val )
thermal_val=`expr $thermal_val \* 1000`
echo $thermal_val > /sys/bus/i2c/devices/0-004f/temp1_input
#lm75_2
thermal_val=$(echo $ipmi_val | awk '{printf $30}')
thermal_val=$( printf "%d" 0x$thermal_val )
thermal_val=`expr $thermal_val \* 1000`
echo $thermal_val > /sys/bus/i2c/devices/0-0049/temp1_input
#lm75_3
thermal_val=$(echo $ipmi_val | awk '{printf $31}')
thermal_val=$( printf "%d" 0x$thermal_val )
thermal_val=`expr $thermal_val \* 1000`
echo $thermal_val > /sys/bus/i2c/devices/0-004a/temp1_input
#lm75_4
thermal_val=$(echo $ipmi_val | awk '{printf $32}')
thermal_val=$( printf "%d" 0x$thermal_val )
thermal_val=`expr $thermal_val \* 1000`
echo $thermal_val > /sys/bus/i2c/devices/0-004b/temp1_input
#lm75_5
thermal_val=$(echo $ipmi_val | awk '{printf $32}')
thermal_val=$( printf "%d" 0x$thermal_val )
thermal_val=`expr $thermal_val \* 1000`
echo $thermal_val > /sys/bus/i2c/devices/0-004c/temp1_input
#lm75_6
thermal_val=$(echo $ipmi_val | awk '{printf $33}')
thermal_val=$( printf "%d" 0x$thermal_val )
thermal_val=`expr $thermal_val \* 1000`
echo $thermal_val > /sys/bus/i2c/devices/0-004d/temp1_input
#lm75_7
thermal_val=$(echo $ipmi_val | awk '{printf $34}')
thermal_val=$( printf "%d" 0x$thermal_val )
thermal_val=`expr $thermal_val \* 1000`
echo $thermal_val > /sys/bus/i2c/devices/0-004e/temp1_input
fi
}
FAN_Thermal_monitor()
{
if [ $debug_flag -eq 1 ];then
fan_pwm_input=100
echo $fan_pwm_input > /sys/bus/i2c/devices/0-0066/fan_duty_cycle_percentage
fi
while true
do
#get bmc sensor value
bmc_sensor_read
if [ $? -eq 0 ];then
do_fan_update
do_thermal_update
fi
sleep 1
done
}
FAN_Thermal_monitor