62 lines
2.0 KiB
Bash
62 lines
2.0 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# shellcheck disable=SC2120
|
||
|
|
|
||
|
|
# Provide source directive to shellcheck.
|
||
|
|
# shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd
|
||
|
|
source /usr/libexec/phosphor-state-manager/power-cmd
|
||
|
|
|
||
|
|
GPIOCHIP_IO_EXP_SLOT_PWR_CTRL=$(basename "/sys/bus/i2c/devices/$MEDUSA_IO_EXP_BUS_NUM-00$IO_EXP_SLOT_PWR_CTRL_ADDR/"*gpiochip*)
|
||
|
|
|
||
|
|
#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))
|
||
|
|
|
||
|
|
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_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=0
|
||
|
|
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"=1
|
||
|
|
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
|
||
|
|
# TODO: SLED cycle
|
||
|
|
echo "SLED-cycle is not support for now"
|
||
|
|
else
|
||
|
|
echo "Starting slot$1 cycle"
|
||
|
|
chassis-power-cycle "$1"
|
||
|
|
fi
|