blob: 19ccc0e8e5e64e85d11ea1c96114e34a8e0dbd2a [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 Boyera3dc5502021-10-29 16:39:16 -05007 echo "usage: power-util mb [on|off|graceful_shutdown|force_reset|shutdown_ack|hotswap|power_button]";
Charles Boyer17b216a2021-08-27 16:09:03 -05008}
9
10hotswap() {
11 kudo.sh rst hotswap
Charles Boyer1c51ca52021-08-24 11:25:03 -050012}
13
14force_off() {
15 echo "Powering down Server"
16
17 set_gpio_ctrl 203 out 1
18 sleep 6
19 set_gpio_ctrl 203 out 0
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050020}
21
22power_off() {
Charles Boyer1c51ca52021-08-24 11:25:03 -050023 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 -050024 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
25}
26
27power_on() {
Charles Boyer1c51ca52021-08-24 11:25:03 -050028 echo "Powering on Server"
29
30 set_gpio_ctrl 203 out 1
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050031 sleep 1
Charles Boyer1c51ca52021-08-24 11:25:03 -050032 set_gpio_ctrl 203 out 0
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050033 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
34}
35
36power_status() {
Charles Boyer1c51ca52021-08-24 11:25:03 -050037 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 -050038 if [ "$st" == "On\"" ]; then
39 echo "on"
40 else
41 echo "off"
42 fi
43}
44
Charles Boyer1c51ca52021-08-24 11:25:03 -050045host_status() {
46 BOOT_OK=$(get_gpio_ctrl 194)
47 S5_N=$(get_gpio_ctrl 204)
48 if [ $S5_N == 1 ] || [ $BOOT_OK == 1 ]; then
49 echo "on"
50 else
51 echo "off"
52 fi
53}
54
55timestamp() {
56 date +"%s" # current time
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050057}
58
59graceful_shutdown() {
60 if [ -f "/run/openbmc/host@0-request" ]; then
Charles Boyer1c51ca52021-08-24 11:25:03 -050061 echo "Shutdown host immediately"
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050062 power_off
63 else
64 echo "Triggering graceful shutdown"
Charles Boyer1c51ca52021-08-24 11:25:03 -050065 mkdir /run/openbmc
66 echo "$(timestamp)" > "/run/openbmc/host@0-shutdown-req-time"
67 set_gpio_ctrl 70 out 0
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050068 sleep 3
Charles Boyer1c51ca52021-08-24 11:25:03 -050069 set_gpio_ctrl 70 out 1
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050070 fi
71}
72
73force_reset() {
Charles Boyer1c51ca52021-08-24 11:25:03 -050074 if [ $(host_status) == "on" ]; then
75 echo "Triggering sysreset pin"
76 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
77 set_gpio_ctrl 65 out 0
78 sleep 1
79 set_gpio_ctrl 65 out 1
80 else
81 echo "Host is off, cannot reset."
82 fi
83}
84
85shutdown_ack() {
86 echo "Receive shutdown ACK triggered"
87 power_off
88
89 if [ -f "/run/openbmc/host@0-shutdown-req-time" ]; then
90 rm -rf "/run/openbmc/host@0-shutdown-req-time"
91 fi
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -050092}
93
Charles Boyera3dc5502021-10-29 16:39:16 -050094power_button() {
95 echo "Power button trigger event."
96 current_time="$(timestamp)"
97 if [ -f "/run/openbmc/power-button" ]; then
98 echo "Power button released"
99 press_time="$(cat /run/openbmc/power-button)"
100 if [[ "$current_time" -le "(($press_time + 1))" ]]; then
101 power_on
102 elif [[ "$current_time" -ge "(($press_time + 5))" ]]; then
103 power_off
104 else
avenash.thambi92d0d572021-11-12 19:22:47 -0600105 echo "Button press did not match interval."
Charles Boyera3dc5502021-10-29 16:39:16 -0500106 fi
107 rm "/run/openbmc/power-button"
108 else
109 echo "Power button pressed"
110 echo "$(timestamp)" > "/run/openbmc/power-button"
111 fi
112}
113
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -0500114if [ $# -lt 2 ]; then
115 echo "Total number of parameter=$#"
116 echo "Insufficient parameter"
117 usage;
118 exit 0;
119fi
120
121if [ $1 != "mb" ]; then
122 echo "Invalid parameter1=$1"
123 usage;
124 exit 0;
125fi
126
127if [ $2 = "on" ]; then
Charles Boyer1c51ca52021-08-24 11:25:03 -0500128 sleep 3
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -0500129 if [ $(power_status) == "off" ]; then
130 power_on
131 fi
132elif [ $2 = "off" ]; then
133 if [ $(power_status) == "on" ]; then
134 power_off
Charles Boyer1c51ca52021-08-24 11:25:03 -0500135 sleep 6
136 if [ $(host_status) == "on" ]; then
137 force_off
138 fi
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -0500139 fi
Charles Boyer17b216a2021-08-27 16:09:03 -0500140elif [[ $2 == "hotswap" ]]; then
141 hotswap
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -0500142elif [[ $2 == "graceful_shutdown" ]]; then
143 graceful_shutdown
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -0500144elif [ $2 == "force_reset" ]; then
145 force_reset
Charles Boyer1c51ca52021-08-24 11:25:03 -0500146elif [ $2 == "shutdown_ack" ]; then
147 shutdown_ack
Charles Boyera3dc5502021-10-29 16:39:16 -0500148elif [ $2 == "power_button" ]; then
149 power_button
Mohaimen Alsamarai82a11d82021-06-24 16:59:29 -0500150else
151 echo "Invalid parameter2=$2"
152 usage;
153fi
154
155exit 0;