1#!/bin/bash 2# 3# PSU hard reset (power cycle) script. 4# 5# Power cycle the entire tray by setting the PSU hotswap reset (GPIO218) to high 6# 7# Global variable: PSU_HARDRESET_DELAY specifies the number of seconds to wait 8# before pulling the trigger. If not specified or zero, the script power cycles 9# immediately. 10 11################################################## 12# Stop the phosphor-hwmon daemon 13# Return: 14# 0 if success, non-zero if error 15################################################## 16stop_phosphor_hwmon() { 17 if (( $# != 0 )); then 18 echo 'Usage: stop_phosphor_hwmon' >&2 19 return 1 20 fi 21 22 echo "Stopping phosphor-hwmon" >&2 23 local srv='system-xyz.openbmc_project.Hwmon.slice' 24 systemctl stop "${srv}" 25} 26 27main() { 28 # Sleep PSU_HARDRESET_DELAY seconds 29 local psu_delay=$((PSU_HARDRESET_DELAY)) 30 if ((psu_delay > 0)); then 31 echo "Sleeping ${psu_delay} seconds before PSU hard reset!" 32 sleep "${psu_delay}" 33 fi 34 35 # Stop phosphor-hwmon so that ADM1272 powercycle doesn't happen 36 # in the middle of an i2c transaction and stuck the bus low 37 stop_phosphor_hwmon 38 39 gpioset gpiochip6 26=1 40} 41 42# Exit without running main() if sourced 43return 0 2>/dev/null 44 45main "$@" 46