diff options
Diffstat (limited to 'meta-ampere/meta-common/recipes-ac01/host/files/ampere_power_util.sh')
-rw-r--r-- | meta-ampere/meta-common/recipes-ac01/host/files/ampere_power_util.sh | 65 |
1 files changed, 50 insertions, 15 deletions
diff --git a/meta-ampere/meta-common/recipes-ac01/host/files/ampere_power_util.sh b/meta-ampere/meta-common/recipes-ac01/host/files/ampere_power_util.sh index 8bab9a370..9a8b06c6b 100644 --- a/meta-ampere/meta-common/recipes-ac01/host/files/ampere_power_util.sh +++ b/meta-ampere/meta-common/recipes-ac01/host/files/ampere_power_util.sh @@ -1,12 +1,11 @@ #!/bin/bash # 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|status|cycle|reset|graceful_reset|force_reset|soft_off]"; } power_off() { - echo "Shutting down Server $2" - 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 + echo "power_off" } power_on() { @@ -28,6 +27,19 @@ power_reset() { 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 } +timestamp() { + date +"%s" # current time +} + +shutdown_ack() { + if [ -f "/run/openbmc/host@0-softpoweroff" ]; then + echo "Receive shutdown ACK triggered after softportoff the host." + touch /run/openbmc/host@0-softpoweroff-shutdown-ack + else + echo "Receive shutdown ACK triggered" + fi +} + graceful_shutdown() { if [ -f "/run/openbmc/host@0-request" ]; then echo "shutdown host immediately" @@ -41,6 +53,33 @@ graceful_shutdown() { fi } +soft_off() { + # Trigger shutdown_req + touch /run/openbmc/host@0-softpoweroff + gpioset -l 0 49=1 + sleep 1s + gpioset -l 0 49=0 + + # Wait for shutdown_ack from the host in 30 seconds + cnt=30 + while [ $cnt -gt 0 ]; + do + # Wait for SHUTDOWN_ACK and create the host@0-softpoweroff-shutdown-ack + if [ -f "/run/openbmc/host@0-softpoweroff-shutdown-ack" ]; then + break + fi + sleep 1 + cnt=$((cnt - 1)) + done + # Softpoweroff is successed + sleep 2 + rm -rf /run/openbmc/host@0-softpoweroff + if [ -f "/run/openbmc/host@0-softpoweroff-shutdown-ack" ]; then + rm -rf /run/openbmc/host@0-softpoweroff-shutdown-ack + fi + echo 0 +} + force_reset() { echo "Triggering sysreset pin" gpioset -l 0 91=1 @@ -65,16 +104,6 @@ if [ $2 = "on" ]; then if [ $(power_status) == "off" ]; then power_on fi -elif [ $2 = "off" ]; then - if [ $(power_status) == "on" ]; then - power_off - 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 "Powering off server" @@ -90,8 +119,6 @@ elif [ $2 == "reset" ]; then else echo "ERROR: Server not powered on" fi -elif [[ $2 == "graceful_shutdown" ]]; then - graceful_shutdown elif [ $2 == "graceful_reset" ]; then mkdir -p "/run/openbmc/" touch "/run/openbmc/host@0-graceful-reset" @@ -101,6 +128,14 @@ elif [ $2 == "status" ]; then power_status elif [ $2 == "force_reset" ]; then force_reset +elif [ $2 == "soft_off" ]; then + ret=$(soft_off) + if [ $ret == 0 ]; then + echo "The host is already softoff" + else + echo "Failed to softoff the host" + fi + exit $ret; else echo "Invalid parameter2=$2" usage; |