George Hung | a0ae66a | 2020-06-30 10:47:30 +0800 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | |
George Hung | d754198 | 2021-03-31 15:38:25 +0800 | [diff] [blame] | 3 | FAN_TABLE_FILE_IN="/usr/share/swampd/config.json.in" |
| 4 | TEMP_FILE="$(mktemp)" |
| 5 | cp "$FAN_TABLE_FILE_IN" "$TEMP_FILE" |
George Hung | df4f877 | 2021-01-20 21:40:31 +0800 | [diff] [blame] | 6 | |
George Hung | a0ae66a | 2020-06-30 10:47:30 +0800 | [diff] [blame] | 7 | # wait for fan dbus |
| 8 | mapper wait /xyz/openbmc_project/sensors/fan_tach/fan0 |
| 9 | mapper wait /xyz/openbmc_project/sensors/fan_tach/fan1 |
George Hung | 0a72c0f | 2020-07-16 13:47:14 +0800 | [diff] [blame] | 10 | mapper wait /xyz/openbmc_project/sensors/fan_tach/fb_fan0 |
| 11 | mapper wait /xyz/openbmc_project/sensors/fan_tach/fb_fan1 |
| 12 | mapper wait /xyz/openbmc_project/sensors/fan_tach/fb_fan2 |
George Hung | a0ae66a | 2020-06-30 10:47:30 +0800 | [diff] [blame] | 13 | |
George Hung | a0ae66a | 2020-06-30 10:47:30 +0800 | [diff] [blame] | 14 | # generate fan table writePath |
Patrick Williams | 8c22623 | 2023-04-15 20:05:21 -0500 | [diff] [blame^] | 15 | Fan_0_To_4_Hwmon="$(ls /sys/devices/platform/ahb/ahb:*/*pwm-fan-controller/hwmon/)" |
George Hung | a0ae66a | 2020-06-30 10:47:30 +0800 | [diff] [blame] | 16 | |
George Hung | df4f877 | 2021-01-20 21:40:31 +0800 | [diff] [blame] | 17 | if [[ "$Fan_0_To_4_Hwmon" != "" ]]; then |
Patrick Williams | 8c22623 | 2023-04-15 20:05:21 -0500 | [diff] [blame^] | 18 | sed -i "s/@Fan_0_To_4_Hwmon@/$Fan_0_To_4_Hwmon/g" "$TEMP_FILE" |
George Hung | a0ae66a | 2020-06-30 10:47:30 +0800 | [diff] [blame] | 19 | fi |
| 20 | |
George Hung | bf07882 | 2021-06-11 13:23:25 +0800 | [diff] [blame] | 21 | presentGpio=() |
| 22 | presentState=() |
| 23 | gpioPath="/sys/class/gpio/gpio" |
| 24 | if [[ -f "/etc/nvme/nvme_config.json" ]]; then |
Patrick Williams | 8c22623 | 2023-04-15 20:05:21 -0500 | [diff] [blame^] | 25 | # shellcheck disable=SC2207 |
| 26 | presentGpio=($(grep NVMeDrivePresentPin /etc/nvme/nvme_config.json \ |
George Hung | bf07882 | 2021-06-11 13:23:25 +0800 | [diff] [blame] | 27 | | awk '{print $2}' | cut -d "," -f 0)) |
| 28 | fi |
| 29 | |
| 30 | nvmePath="/xyz/openbmc_project/sensors/temperature/nvme" |
George Hung | bf07882 | 2021-06-11 13:23:25 +0800 | [diff] [blame] | 31 | # Get and Set WCTEMP |
| 32 | for ((i = 0; i < 16; i++)); do |
| 33 | name="@WCTemp$(printf "%02d" $i)@" |
| 34 | wcTemp=72000 |
| 35 | |
| 36 | if [[ -d "${gpioPath}${presentGpio[i]}" ]] && |
Patrick Williams | 8c22623 | 2023-04-15 20:05:21 -0500 | [diff] [blame^] | 37 | [[ "$(cat "${gpioPath}${presentGpio[i]}/value")" == "0" ]]; then |
George Hung | bf07882 | 2021-06-11 13:23:25 +0800 | [diff] [blame] | 38 | presentState[i]="true" |
| 39 | else |
| 40 | presentState[i]="false" |
| 41 | fi |
| 42 | |
| 43 | if [[ "${presentState[i]}" == "true" ]]; then |
| 44 | actualWCTemp=0 |
| 45 | for ((j = 0; j < 3; j++)); do |
| 46 | actualWCTemp="$( |
| 47 | busctl get-property xyz.openbmc_project.nvme.manager \ |
| 48 | ${nvmePath}${i} \ |
| 49 | xyz.openbmc_project.Sensor.Threshold.Critical \ |
| 50 | CriticalHigh | awk '{print $2}' |
| 51 | )" |
| 52 | if [[ "${actualWCTemp}" -ne 0 ]]; then |
| 53 | break |
| 54 | fi |
| 55 | |
| 56 | echo "${nvmePath}${i} WCTemp was read to be 0, retrying after 1 sec sleep" |
| 57 | sleep 1 |
| 58 | done |
| 59 | |
| 60 | if [[ "${actualWCTemp}" -ne 0 ]]; then |
| 61 | wcTemp="$(echo "${actualWCTemp} -7" | awk '{printf $1 + $2}')" |
| 62 | else |
| 63 | echo "${nvmePath}${i} WCTemp was read to be 0, using default WCTemp: ${wcTemp}" |
| 64 | fi |
| 65 | fi |
| 66 | |
| 67 | sed -i "s/$name/${wcTemp}/g" "$TEMP_FILE" |
| 68 | |
| 69 | if [[ "${presentState[i]}" == "false" ]]; then |
| 70 | sensorPath="${nvmePath}${i}" |
| 71 | pathLine=$(grep -nw "$sensorPath" "$TEMP_FILE" | awk -F ':' '{print $1}') |
| 72 | sed -i "$TEMP_FILE" -re "$((pathLine - 3)),$((pathLine + 6))d" |
| 73 | if [ $i -eq 15 ]; then |
| 74 | sed -i "$((pathLine - 4))s/,//" "$TEMP_FILE" |
| 75 | fi |
| 76 | |
| 77 | listLine=$(grep -n "\"name\": \"nvme${i}\"" "$TEMP_FILE" | awk -F ':' '{print $1}') |
| 78 | sed -i "$TEMP_FILE" -re "$((listLine - 1)),$((listLine + 21))d" |
| 79 | if [ $i -eq 15 ]; then |
| 80 | sed -i "$((listLine - 2))s/,//" "$TEMP_FILE" |
| 81 | fi |
| 82 | fi |
| 83 | done |
| 84 | |
George Hung | d754198 | 2021-03-31 15:38:25 +0800 | [diff] [blame] | 85 | # Use shell parameter expansion to trim the ".in" suffix |
| 86 | mv "$TEMP_FILE" "${FAN_TABLE_FILE_IN%".in"}" |
| 87 | |
George Hung | a0ae66a | 2020-06-30 10:47:30 +0800 | [diff] [blame] | 88 | exit 0 |