1#!/bin/bash 2 3# shellcheck disable=SC2120 4 5# Provide source directive to shellcheck. 6# shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd 7source /usr/libexec/phosphor-state-manager/power-cmd 8#IO 0:7 input port for showing slot 1:8 power status 9#IO 8:16 output port for controlling slot 1:8 power status 10CHASSIS_ID=$1 11IO_EXP_SLOT_PWR_STATUS=$((CHASSIS_ID - 1)) 12IO_EXP_SLOT_PWR_CTRL=$((IO_EXP_SLOT_PWR_STATUS + 8)) 13IO_EXP_SLED_CYCLE=12 14IO_EXP_BIC_PWR_CTRL=32 15 16GPIOCHIP_IO_EXP_SLOT_PWR_CTRL=$(basename "/sys/bus/i2c/devices/$SPIDER_BOARD_IO_EXP_BUS_NUM-00$IO_EXP_SLOT_PWR_CTRL_ADDR/"*gpiochip*) 17GPIOCHIP_IO_EXP_SLED_PWR_CTRL=$(basename "/sys/bus/i2c/devices/$MANAGEMENT_BOARD_IO_EXP_BUS_NUM-00$IO_EXP_SLED_PWR_CTRL_ADDR/"*gpiochip*) 18GPIOCHIP_IO_EXP_BIC_PWR_CTRL=$(basename "/sys/bus/i2c/devices/$IO_EXP_SLOT_PWR_STATUS-00$IO_EXP_BIC_PWR_CTRL_ADDR/"*gpiochip*) 19 20chassis-power-cycle() 21{ 22 CHASSIS_ID=$1 23 24 if [ "$CHASSIS_ID" -le 8 ] 25 then 26 chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS") 27 if [ "$chassis_status" == "$STATE_ON" ] 28 then 29 if ! gpioset "$GPIOCHIP_IO_EXP_BIC_PWR_CTRL" "$IO_EXP_BIC_PWR_CTRL"=0 30 then 31 echo "Failed to set slot$1 sentinel dome bic off" 32 fi 33 sleep 1 34 if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=1 35 then 36 echo "Failed to set slot$1 power off" 37 fi 38 sleep 10 39 fi 40 if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=0 41 then 42 echo "Failed to set slot$1 power on" 43 fi 44 sleep 2 45 46 # Check chassis status after doing 12V cycle 47 chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS") 48 if [ "$chassis_status" == "$STATE_ON" ] 49 then 50 busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_ON_PROPERTY" 51 exit 0; 52 else 53 busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_OFF_PROPERTY" 54 exit 0; 55 fi 56 fi 57 58 echo "Invalid slot id" 59 exit 1; 60} 61 62if [ "$1" == 0 ] 63then 64 echo "Starting sled cycle..." 65 if ! gpioset "$GPIOCHIP_IO_EXP_SLED_PWR_CTRL" "$IO_EXP_SLED_CYCLE"=1 66 then 67 echo "Failed to do sled cycle" 68 fi 69else 70 echo "Starting slot$1 cycle" 71 chassis-power-cycle "$1" 72fi 73