| #!/bin/bash |
| |
| # shellcheck disable=SC2120 |
| |
| # Provide source directive to shellcheck. |
| # shellcheck source=meta-facebook/meta-greatlakes/recipes-phosphor/state/phosphor-state-manager/power-cmd |
| source /usr/libexec/phosphor-state-manager/power-cmd |
| #IO 0:7 input port for showing slot 1:8 power status |
| #IO 8:16 output port for controlling slot 1:8 power status |
| CHASSIS_ID=$1 |
| IO_EXP_SLOT_PWR_STATUS=$((CHASSIS_ID - 1)) |
| IO_EXP_SLOT_PWR_CTRL=$((IO_EXP_SLOT_PWR_STATUS + 8)) |
| IO_EXP_SLED_CYCLE=12 |
| IO_EXP_BIC_PWR_CTRL=32 |
| |
| GPIOCHIP_IO_EXP_SLOT_PWR_CTRL=$(basename "/sys/bus/i2c/devices/$SPIDER_BOARD_IO_EXP_BUS_NUM-00$IO_EXP_SLOT_PWR_CTRL_ADDR/"*gpiochip*) |
| GPIOCHIP_IO_EXP_SLED_PWR_CTRL=$(basename "/sys/bus/i2c/devices/$MANAGEMENT_BOARD_IO_EXP_BUS_NUM-00$IO_EXP_SLED_PWR_CTRL_ADDR/"*gpiochip*) |
| GPIOCHIP_IO_EXP_BIC_PWR_CTRL=$(basename "/sys/bus/i2c/devices/$IO_EXP_SLOT_PWR_STATUS-00$IO_EXP_BIC_PWR_CTRL_ADDR/"*gpiochip*) |
| |
| chassis-power-cycle() |
| { |
| CHASSIS_ID=$1 |
| |
| if [ "$CHASSIS_ID" -le 8 ] |
| then |
| chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS") |
| if [ "$chassis_status" == "$STATE_ON" ] |
| then |
| if ! gpioset "$GPIOCHIP_IO_EXP_BIC_PWR_CTRL" "$IO_EXP_BIC_PWR_CTRL"=0 |
| then |
| echo "Failed to set slot$1 sentinel dome bic off" |
| fi |
| sleep 1 |
| if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=1 |
| then |
| echo "Failed to set slot$1 power off" |
| fi |
| sleep 10 |
| fi |
| if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=0 |
| then |
| echo "Failed to set slot$1 power on" |
| fi |
| sleep 2 |
| |
| # Check chassis status after doing 12V cycle |
| chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS") |
| if [ "$chassis_status" == "$STATE_ON" ] |
| then |
| busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_ON_PROPERTY" |
| exit 0; |
| else |
| busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_OFF_PROPERTY" |
| exit 0; |
| fi |
| fi |
| |
| echo "Invalid slot id" |
| exit 1; |
| } |
| |
| if [ "$1" == 0 ] |
| then |
| echo "Starting sled cycle..." |
| if ! gpioset "$GPIOCHIP_IO_EXP_SLED_PWR_CTRL" "$IO_EXP_SLED_CYCLE"=1 |
| then |
| echo "Failed to do sled cycle" |
| fi |
| else |
| echo "Starting slot$1 cycle" |
| chassis-power-cycle "$1" |
| fi |