89 lines
2.8 KiB
Bash
89 lines
2.8 KiB
Bash
#!/bin/bash
|
|
|
|
FAN_TABLE_FILE_IN="/usr/share/swampd/config.json.in"
|
|
TEMP_FILE="$(mktemp)"
|
|
cp "$FAN_TABLE_FILE_IN" "$TEMP_FILE"
|
|
|
|
# wait for fan dbus
|
|
mapper wait /xyz/openbmc_project/sensors/fan_tach/fan0
|
|
mapper wait /xyz/openbmc_project/sensors/fan_tach/fan1
|
|
mapper wait /xyz/openbmc_project/sensors/fan_tach/fb_fan0
|
|
mapper wait /xyz/openbmc_project/sensors/fan_tach/fb_fan1
|
|
mapper wait /xyz/openbmc_project/sensors/fan_tach/fb_fan2
|
|
|
|
# generate fan table writePath
|
|
Fan_0_To_4_Hwmon="$(ls /sys/devices/platform/ahb/ahb:*/*pwm-fan-controller/hwmon/)"
|
|
|
|
if [[ "$Fan_0_To_4_Hwmon" != "" ]]; then
|
|
sed -i "s/@Fan_0_To_4_Hwmon@/$Fan_0_To_4_Hwmon/g" "$TEMP_FILE"
|
|
fi
|
|
|
|
presentGpio=()
|
|
presentState=()
|
|
gpioPath="/sys/class/gpio/gpio"
|
|
if [[ -f "/etc/nvme/nvme_config.json" ]]; then
|
|
# shellcheck disable=SC2207
|
|
presentGpio=($(grep NVMeDrivePresentPin /etc/nvme/nvme_config.json \
|
|
| awk '{print $2}' | cut -d "," -f 0))
|
|
fi
|
|
|
|
nvmePath="/xyz/openbmc_project/sensors/temperature/nvme"
|
|
# Get and Set WCTEMP
|
|
for ((i = 0; i < 16; i++)); do
|
|
name="@WCTemp$(printf "%02d" $i)@"
|
|
wcTemp=72000
|
|
|
|
if [[ -d "${gpioPath}${presentGpio[i]}" ]] &&
|
|
[[ "$(cat "${gpioPath}${presentGpio[i]}/value")" == "0" ]]; then
|
|
presentState[i]="true"
|
|
else
|
|
presentState[i]="false"
|
|
fi
|
|
|
|
if [[ "${presentState[i]}" == "true" ]]; then
|
|
actualWCTemp=0
|
|
for ((j = 0; j < 3; j++)); do
|
|
actualWCTemp="$(
|
|
busctl get-property xyz.openbmc_project.nvme.manager \
|
|
${nvmePath}${i} \
|
|
xyz.openbmc_project.Sensor.Threshold.Critical \
|
|
CriticalHigh | awk '{print $2}'
|
|
)"
|
|
if [[ "${actualWCTemp}" -ne 0 ]]; then
|
|
break
|
|
fi
|
|
|
|
echo "${nvmePath}${i} WCTemp was read to be 0, retrying after 1 sec sleep"
|
|
sleep 1
|
|
done
|
|
|
|
if [[ "${actualWCTemp}" -ne 0 ]]; then
|
|
wcTemp="$(echo "${actualWCTemp} -7" | awk '{printf $1 + $2}')"
|
|
else
|
|
echo "${nvmePath}${i} WCTemp was read to be 0, using default WCTemp: ${wcTemp}"
|
|
fi
|
|
fi
|
|
|
|
sed -i "s/$name/${wcTemp}/g" "$TEMP_FILE"
|
|
|
|
if [[ "${presentState[i]}" == "false" ]]; then
|
|
sensorPath="${nvmePath}${i}"
|
|
pathLine=$(grep -nw "$sensorPath" "$TEMP_FILE" | awk -F ':' '{print $1}')
|
|
sed -i "$TEMP_FILE" -re "$((pathLine - 3)),$((pathLine + 6))d"
|
|
if [ $i -eq 15 ]; then
|
|
sed -i "$((pathLine - 4))s/,//" "$TEMP_FILE"
|
|
fi
|
|
|
|
listLine=$(grep -n "\"name\": \"nvme${i}\"" "$TEMP_FILE" | awk -F ':' '{print $1}')
|
|
sed -i "$TEMP_FILE" -re "$((listLine - 1)),$((listLine + 21))d"
|
|
if [ $i -eq 15 ]; then
|
|
sed -i "$((listLine - 2))s/,//" "$TEMP_FILE"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Use shell parameter expansion to trim the ".in" suffix
|
|
mv "$TEMP_FILE" "${FAN_TABLE_FILE_IN%".in"}"
|
|
|
|
exit 0
|