Add support for reset, cycle and sled-cycle.
Remove the requirement of the fru-id 1 from the command line.
Add support to reset and cycle the server
Add support to cycle the entire sled (Through the hotswap controller)
Basic checks during power on/off to ensure valid initial steps.
(From meta-facebook rev: af4ff94581bafa922e84b75b8eeff8b7e821328d)
Change-Id: I8044e2afd52e58b095dd4ffad89e4397121a971a
Signed-off-by: Amithash Prasad <amithash@fb.com>
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
diff --git a/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/power-util b/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/power-util
index 59f91ec..a2261fb 100755
--- a/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/power-util
+++ b/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/power-util
@@ -1,48 +1,96 @@
#!/bin/bash
# Usage of this utility
function usage() {
- echo "usage: power-util mb 1 [on|off]";
+ echo "usage: power-util mb [on|off|status|cycle|reset]";
+ echo " power-util sled-cycle"
}
GPIO_BASE=$(cat /sys/class/gpio/gpio*/base)
PWR_GPIO=$(($GPIO_BASE + 32 + 3))
BMC_RDY_GPIO=$(($GPIO_BASE + 144 +1))
+PWR_GOOD=$(($GPIO_BASE + 8 + 6))
+PWR_RESET=$(($GPIO_BASE + 33))
-if [ $# -lt 3 ]; then
+power_off() {
+ echo "Shutting down Server $2"
+ echo 1 > /sys/class/gpio/gpio${PWR_GPIO}/value
+ sleep 1
+ echo 0 > /sys/class/gpio/gpio${PWR_GPIO}/value
+ sleep 6
+ echo 1 > /sys/class/gpio/gpio${PWR_GPIO}/value
+}
+
+power_on() {
+ echo "Powering on Server $2"
+ echo 0 > /sys/class/gpio/gpio${BMC_RDY_GPIO}/value
+ echo 1 > /sys/class/gpio/gpio${PWR_GPIO}/value
+ echo 0 > /sys/class/gpio/gpio${PWR_GPIO}/value
+ sleep 1
+ echo 1 > /sys/class/gpio/gpio${PWR_GPIO}/value
+}
+
+power_status() {
+ st=$(cat /sys/class/gpio/gpio${PWR_GOOD}/value)
+ if [ "$st" == "0" ]; then
+ echo "off"
+ else
+ echo "on"
+ fi
+}
+
+power_reset() {
+ echo "Reset on server $2"
+ echo 0 > /sys/class/gpio/gpio${PWR_RESET}/value
+ sleep 0.1
+ echo 1 > /sys/class/gpio/gpio${PWR_RESET}/value
+}
+
+sled_cycle() {
+ i2cset -y 7 0x45 0xd9 c
+}
+
+if [ $# -lt 2 ]; then
echo "Total number of parameter=$#"
echo "Insufficient parameter"
usage;
exit 0;
fi
+if [ $1 == "sled-cycle" ]; then
+ sled_cycle
+fi
+
if [ $1 != "mb" ]; then
echo "Invalid parameter1=$1"
usage;
exit 0;
fi
-if [ $2 -ne 1 ]; then
- echo "Invalid parameter2=$2, Server $2 not supported"
- usage;
- exit 0;
-fi
-
-if [ $3 = "on" ]; then
- echo "Powering on Server $2"
- echo 0 > /sys/class/gpio/gpio${BMC_RDY_GPIO}/value
- echo 1 > /sys/class/gpio/gpio${PWR_GPIO}/value
- echo 0 > /sys/class/gpio/gpio${PWR_GPIO}/value
- sleep 1
- echo 1 > /sys/class/gpio/gpio${PWR_GPIO}/value
-elif [ $3 = "off" ]; then
- echo "Shutting down Server $2"
- echo 1 > /sys/class/gpio/gpio${PWR_GPIO}/value
- sleep 1
- echo 0 > /sys/class/gpio/gpio${PWR_GPIO}/value
- sleep 6
- echo 1 > /sys/class/gpio/gpio${PWR_GPIO}/value
+if [ $2 = "on" ]; then
+ if [ $(power_status) == "off" ]; then
+ power_on
+ fi
+elif [ $2 = "off" ]; then
+ if [ $(power_status) == "on" ]; then
+ power_off
+ fi
+elif [ $2 == "cycle" ]; then
+ if [ $(power_status) == "on" ]; then
+ power_off
+ else
+ echo "WARNING: Powering on server"
+ fi
+ power_on
+elif [ $2 == "reset" ]; then
+ if [ $(power_status) == "on" ]; then
+ power_reset
+ else
+ echo "ERROR: Server not powered on"
+ fi
+elif [ $2 == "status" ]; then
+ power_status
else
- echo "Invalid parameter3=$3"
+ echo "Invalid parameter2=$2"
usage;
fi