summaryrefslogtreecommitdiff
path: root/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh
diff options
context:
space:
mode:
Diffstat (limited to 'meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh')
-rw-r--r--meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh138
1 files changed, 88 insertions, 50 deletions
diff --git a/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh b/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh
index 420abfb8c..19ccc0e8e 100644
--- a/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh
+++ b/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh
@@ -1,24 +1,40 @@
#!/bin/bash
+
+source /usr/sbin/kudo-lib.sh
+
# Usage of this utility
function usage() {
- echo "usage: power-util mb [on|off|status|cycle|reset|graceful_shutdown|graceful_reset|force_reset]";
+ echo "usage: power-util mb [on|off|graceful_shutdown|force_reset|shutdown_ack|hotswap|power_button]";
+}
+
+hotswap() {
+ kudo.sh rst hotswap
+}
+
+force_off() {
+ echo "Powering down Server"
+
+ set_gpio_ctrl 203 out 1
+ sleep 6
+ set_gpio_ctrl 203 out 0
}
power_off() {
- echo "Shutting down Server $2"
+ busctl set-property xyz.openbmc_project.Watchdog /xyz/openbmc_project/watchdog/host0 xyz.openbmc_project.State.Watchdog ExpireAction s xyz.openbmc_project.State.Watchdog.Action.None
busctl set-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.Off
}
power_on() {
- echo "Powering on Server $2"
- gpioset 6 11=1
+ echo "Powering on Server"
+
+ set_gpio_ctrl 203 out 1
sleep 1
- gpioset 6 11=0
+ set_gpio_ctrl 203 out 0
busctl set-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.On
}
power_status() {
- st=$(busctl get-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis CurrentPowerState | cut -d"." -f6)
+ st=$(busctl get-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis CurrentPowerState | cut -d "." -f6)
if [ "$st" == "On\"" ]; then
echo "on"
else
@@ -26,33 +42,73 @@ power_status() {
fi
}
-power_reset() {
- echo "Reset on server $2"
- busctl set-property xyz.openbmc_project.State.Host /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.Host RequestedHostTransition s xyz.openbmc_project.State.Host.Transition.Reboot
+host_status() {
+ BOOT_OK=$(get_gpio_ctrl 194)
+ S5_N=$(get_gpio_ctrl 204)
+ if [ $S5_N == 1 ] || [ $BOOT_OK == 1 ]; then
+ echo "on"
+ else
+ echo "off"
+ fi
+}
+
+timestamp() {
+ date +"%s" # current time
}
graceful_shutdown() {
if [ -f "/run/openbmc/host@0-request" ]; then
- echo "shutdown host immediately"
- gpioset 6 11=1
- sleep 6
- gpioset 6 11=0
+ echo "Shutdown host immediately"
power_off
else
echo "Triggering graceful shutdown"
- gpioset -l 2 6=0
+ mkdir /run/openbmc
+ echo "$(timestamp)" > "/run/openbmc/host@0-shutdown-req-time"
+ set_gpio_ctrl 70 out 0
sleep 3
- gpioset -l 2 6=1
- sleep 30s
- power_off
+ set_gpio_ctrl 70 out 1
fi
}
force_reset() {
- echo "Triggering sysreset pin"
- gpioset -l 2 1=0
- sleep 1
- gpioset -l 2 1=1
+ if [ $(host_status) == "on" ]; then
+ echo "Triggering sysreset pin"
+ busctl set-property xyz.openbmc_project.Watchdog /xyz/openbmc_project/watchdog/host0 xyz.openbmc_project.State.Watchdog ExpireAction s xyz.openbmc_project.State.Watchdog.Action.None
+ set_gpio_ctrl 65 out 0
+ sleep 1
+ set_gpio_ctrl 65 out 1
+ else
+ echo "Host is off, cannot reset."
+ fi
+}
+
+shutdown_ack() {
+ echo "Receive shutdown ACK triggered"
+ power_off
+
+ if [ -f "/run/openbmc/host@0-shutdown-req-time" ]; then
+ rm -rf "/run/openbmc/host@0-shutdown-req-time"
+ fi
+}
+
+power_button() {
+ echo "Power button trigger event."
+ current_time="$(timestamp)"
+ if [ -f "/run/openbmc/power-button" ]; then
+ echo "Power button released"
+ press_time="$(cat /run/openbmc/power-button)"
+ if [[ "$current_time" -le "(($press_time + 1))" ]]; then
+ power_on
+ elif [[ "$current_time" -ge "(($press_time + 5))" ]]; then
+ power_off
+ else
+ echo "Button press did not match interval."
+ fi
+ rm "/run/openbmc/power-button"
+ else
+ echo "Power button pressed"
+ echo "$(timestamp)" > "/run/openbmc/power-button"
+ fi
}
if [ $# -lt 2 ]; then
@@ -69,49 +125,31 @@ if [ $1 != "mb" ]; then
fi
if [ $2 = "on" ]; then
+ sleep 3
if [ $(power_status) == "off" ]; then
power_on
fi
elif [ $2 = "off" ]; then
if [ $(power_status) == "on" ]; then
power_off
+ sleep 6
+ if [ $(host_status) == "on" ]; then
+ force_off
+ fi
fi
- # If any request of graceful reset, need to power on
- if [ -f "/run/openbmc/host@0-graceful-reset" ]; then
- sleep 20s
- power_on
- rm -f "/run/openbmc/host@0-graceful-reset"
- fi
-elif [ $2 == "cycle" ]; then
- if [ $(power_status) == "on" ]; then
- echo "Power cycling server"
- power_off
- sleep 20s
- power_on
- else
- echo "Host is already off, do nothing"
- fi
-elif [ $2 == "reset" ]; then
- if [ $(power_status) == "on" ]; then
- power_reset
- else
- echo "ERROR: Server not powered on"
- fi
+elif [[ $2 == "hotswap" ]]; then
+ hotswap
elif [[ $2 == "graceful_shutdown" ]]; then
graceful_shutdown
-elif [ $2 == "graceful_reset" ]; then
- mkdir -p "/run/openbmc/"
- touch "/run/openbmc/host@0-graceful-reset"
- graceful_shutdown
- sleep 20s
-elif [ $2 == "status" ]; then
- power_status
elif [ $2 == "force_reset" ]; then
force_reset
+elif [ $2 == "shutdown_ack" ]; then
+ shutdown_ack
+elif [ $2 == "power_button" ]; then
+ power_button
else
echo "Invalid parameter2=$2"
usage;
fi
exit 0;
-