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 9GPIOCHIP_IO_EXP_SLOT_PWR_CTRL=$(basename "/sys/bus/i2c/devices/$MEDUSA_IO_EXP_BUS_NUM-00$IO_EXP_SLOT_PWR_CTRL_ADDR/"*gpiochip*) 10 11#IO 0:7 input port for showing slot 1:8 power status 12#IO 8:16 output port for controlling slot 1:8 power status 13CHASSIS_ID=$1 14IO_EXP_SLOT_PWR_STATUS=$((CHASSIS_ID - 1)) 15IO_EXP_SLOT_PWR_CTRL=$((IO_EXP_SLOT_PWR_STATUS + 8)) 16 17chassis-power-cycle() 18{ 19 CHASSIS_ID=$1 20 21 if [ "$CHASSIS_ID" -le 8 ] 22 then 23 chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS") 24 if [ "$chassis_status" == "$STATE_ON" ] 25 then 26 if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=0 27 then 28 echo "Failed to set slot$1 power off" 29 fi 30 sleep 10 31 fi 32 if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=1 33 then 34 echo "Failed to set slot$1 power on" 35 fi 36 sleep 2 37 38 # Check chassis status after doing 12V cycle 39 chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS") 40 if [ "$chassis_status" == "$STATE_ON" ] 41 then 42 busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_ON_PROPERTY" 43 exit 0; 44 else 45 busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_OFF_PROPERTY" 46 exit 0; 47 fi 48 fi 49 50 echo "Invalid slot id" 51 exit 1; 52} 53 54if [ "$1" == 0 ] 55then 56 # TODO: SLED cycle 57 echo "SLED-cycle is not support for now" 58else 59 echo "Starting slot$1 cycle" 60 chassis-power-cycle "$1" 61fi 62