blob: 8d58a08273a2f70cfca9e73baa3a4db4c6e943f0 [file] [log] [blame]
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -05001#!/bin/bash
Charles Boyer1c51ca52021-08-24 11:25:03 -05002
3source /usr/sbin/kudo-lib.sh
4
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -05005# Usage of this utility
6function usage() {
Charles Boyer1c51ca52021-08-24 11:25:03 -05007 echo "usage: power-util mb [on|off|graceful_shutdown|force_reset|shutdown_ack]";
8}
9
10force_off() {
11 echo "Powering down Server"
12
13 set_gpio_ctrl 203 out 1
14 sleep 6
15 set_gpio_ctrl 203 out 0
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050016}
17
18power_off() {
Charles Boyer1c51ca52021-08-24 11:25:03 -050019 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
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050020 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
21}
22
23power_on() {
Charles Boyer1c51ca52021-08-24 11:25:03 -050024 echo "Powering on Server"
25
26 set_gpio_ctrl 203 out 1
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050027 sleep 1
Charles Boyer1c51ca52021-08-24 11:25:03 -050028 set_gpio_ctrl 203 out 0
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050029 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
30}
31
32power_status() {
Charles Boyer1c51ca52021-08-24 11:25:03 -050033 st=$(busctl get-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis CurrentPowerState | cut -d "." -f6)
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050034 if [ "$st" == "On\"" ]; then
35 echo "on"
36 else
37 echo "off"
38 fi
39}
40
Charles Boyer1c51ca52021-08-24 11:25:03 -050041host_status() {
42 BOOT_OK=$(get_gpio_ctrl 194)
43 S5_N=$(get_gpio_ctrl 204)
44 if [ $S5_N == 1 ] || [ $BOOT_OK == 1 ]; then
45 echo "on"
46 else
47 echo "off"
48 fi
49}
50
51timestamp() {
52 date +"%s" # current time
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050053}
54
55graceful_shutdown() {
56 if [ -f "/run/openbmc/host@0-request" ]; then
Charles Boyer1c51ca52021-08-24 11:25:03 -050057 echo "Shutdown host immediately"
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050058 power_off
59 else
60 echo "Triggering graceful shutdown"
Charles Boyer1c51ca52021-08-24 11:25:03 -050061 mkdir /run/openbmc
62 echo "$(timestamp)" > "/run/openbmc/host@0-shutdown-req-time"
63 set_gpio_ctrl 70 out 0
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050064 sleep 3
Charles Boyer1c51ca52021-08-24 11:25:03 -050065 set_gpio_ctrl 70 out 1
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050066 fi
67}
68
69force_reset() {
Charles Boyer1c51ca52021-08-24 11:25:03 -050070 if [ $(host_status) == "on" ]; then
71 echo "Triggering sysreset pin"
72 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
73 set_gpio_ctrl 65 out 0
74 sleep 1
75 set_gpio_ctrl 65 out 1
76 else
77 echo "Host is off, cannot reset."
78 fi
79}
80
81shutdown_ack() {
82 echo "Receive shutdown ACK triggered"
83 power_off
84
85 if [ -f "/run/openbmc/host@0-shutdown-req-time" ]; then
86 rm -rf "/run/openbmc/host@0-shutdown-req-time"
87 fi
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050088}
89
90if [ $# -lt 2 ]; then
91 echo "Total number of parameter=$#"
92 echo "Insufficient parameter"
93 usage;
94 exit 0;
95fi
96
97if [ $1 != "mb" ]; then
98 echo "Invalid parameter1=$1"
99 usage;
100 exit 0;
101fi
102
103if [ $2 = "on" ]; then
Charles Boyer1c51ca52021-08-24 11:25:03 -0500104 sleep 3
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -0500105 if [ $(power_status) == "off" ]; then
106 power_on
107 fi
108elif [ $2 = "off" ]; then
109 if [ $(power_status) == "on" ]; then
110 power_off
Charles Boyer1c51ca52021-08-24 11:25:03 -0500111 sleep 6
112 if [ $(host_status) == "on" ]; then
113 force_off
114 fi
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -0500115 fi
116elif [[ $2 == "graceful_shutdown" ]]; then
117 graceful_shutdown
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -0500118elif [ $2 == "force_reset" ]; then
119 force_reset
Charles Boyer1c51ca52021-08-24 11:25:03 -0500120elif [ $2 == "shutdown_ack" ]; then
121 shutdown_ack
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -0500122else
123 echo "Invalid parameter2=$2"
124 usage;
125fi
126
127exit 0;