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/host-poweroff.service b/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/host-poweroff.service
index 95c7708..d23ef90 100644
--- a/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/host-poweroff.service
+++ b/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/host-poweroff.service
@@ -5,5 +5,5 @@
[Service]
Type=oneshot
-ExecStart=/usr/sbin/power-util mb 1 off
+ExecStart=/usr/sbin/power-util mb off
SyslogIdentifier=power-util
diff --git a/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/host-poweron.service b/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/host-poweron.service
index b070eda..446df38 100644
--- a/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/host-poweron.service
+++ b/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/host-poweron.service
@@ -5,7 +5,7 @@
[Service]
Type=oneshot
-ExecStart=/usr/sbin/power-util mb 1 on
+ExecStart=/usr/sbin/power-util mb on
SyslogIdentifier=power-util
[Install]
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
diff --git a/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/setup_gpio.sh b/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/setup_gpio.sh
index 4e13109..1b1b2e3 100755
--- a/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/setup_gpio.sh
+++ b/meta-facebook/meta-tiogapass/recipes-fbtp/fb-powerctrl/files/setup_gpio.sh
@@ -17,12 +17,22 @@
set_gpio_active_low $((${GPIO_BASE} + 144 +1)) high
# FM_BMC_SSB_SMI_LPC_N, GPIO Q6, active low
-set_gpio_active_low $((${GPIO_BASE} + 128 + 6)) high
+#set_gpio_active_low $((${GPIO_BASE} + 128 + 6)) high
# FP_PWR_BTN_PASS_R_N, GPIO E3, active low
set_gpio_active_low $((${GPIO_BASE} + 32 + 3)) high
# FP_PWR_GOOD, GPIO B6, active low
-set_gpio_active_low $((${GPIO_BASE} + 8 + 6)) high
+set_gpio_active_low $((${GPIO_BASE} + 8 + 6)) in
+
+# SYSRST_BTN_OUT_N, GPIO E1, active low
+set_gpio_active_low $((${GPIO_BASE} + 32 + 1)) high
+
+# FP_PECI_MUX, active low
+set_gpio_active_low $((${GPIO_BASE} + 212)) high
+
+# Set PECI Mux to high to select Peci interface
+echo 1 > /sys/class/gpio/gpio$((${GPIO_BASE} + 212))/value
+
exit 0;