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