blob: 4748706d9c06c72e159e5a7182aa54fa235f28ca [file] [log] [blame]
Hieu Huynh2df80e62023-10-16 07:29:58 +00001#!/bin/bash
2
3# shellcheck disable=SC2046
4
5function check_cpu_presence()
6{
7 # Check CPU presence, identify whether it is 1P or 2P system
8 s0_presence=$(gpioget $(gpiofind presence-cpu0))
9 s1_presence=$(gpioget $(gpiofind presence-cpu1))
10 if [ "$s0_presence" == "0" ] && [ "$s1_presence" == "0" ]; then
11 ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.OK "Host firmware boots with 2 Processor"
12 elif [ "$s0_presence" == "0" ]; then
13 ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.OK "Host firmware boots with 1 Processor"
14 else
15 ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.OK "No Processor is present"
16 fi
17}
18
19function get_dbus_property()
20{
21 service=$1
22 object_path=$2
23 interface=$3
24 property=$4
25
26 value=$(busctl get-property "$service" "$object_path" "$interface" "$property" | cut -d" " -f2)
27
28 echo "$value"
29}
30
31function is_ATX_power_good()
32{
33 pgood_value=$(get_dbus_property org.openbmc.control.Power \
34 /org/openbmc/control/power0 org.openbmc.control.Power pgood)
35
36 if [ "$pgood_value" == "0" ]
37 then
38 echo 0
39 else
40 echo 1
41 fi
42}
43
44function is_PCP_power_good()
45{
46 pcp_value=$(get_dbus_property xyz.openbmc_project.State.HostCondition.Gpio \
47 /xyz/openbmc_project/Gpios/host0 xyz.openbmc_project.Condition.HostFirmware \
48 CurrentFirmwareCondition)
49
50 if [[ "$pcp_value" == *".Running"* ]]
51 then
52 echo 1
53 else
54 echo 0
55 fi
56}
57
58function check_power_state()
59{
60 echo "ATX power good checking"
61 state=$(is_ATX_power_good)
62 if [ "$state" == "0" ]
63 then
64 echo "Error: Failed to turn on ATX Power"
65 ampere_add_redfishevent.sh OpenBMC.0.1.PowerSupplyPowerGoodFailed.Critical "60000"
66 exit 0
67 else
68 ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.OK "ATX Power is ON"
69 fi
70
71 echo "Soc power good checking"
72 state=$(gpioget $(gpiofind s0-soc-pgood))
73 if [ "$state" == "0" ]
74 then
75 echo "Error: Soc domain power failure"
76 ampere_add_redfishevent.sh OpenBMC.0.1.AmpereCritical.Critical "Soc domain, power failure"
77 exit 0
78 else
79 ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.OK "SoC power domain is ON"
80 fi
81
82 echo "PCP power good checking"
83 state=$(is_PCP_power_good)
84 if [ "$state" == "0" ]
85 then
86 echo "Error: PCP domain power failure. Power off Host"
87 ampere_add_redfishevent.sh OpenBMC.0.1.AmpereCritical.Critical "PCP domain, power failure"
88 busctl set-property xyz.openbmc_project.State.Chassis \
89 /xyz/openbmc_project/state/chassis0 \
90 xyz.openbmc_project.State.Chassis RequestedPowerTransition s \
91 xyz.openbmc_project.State.Chassis.Transition.Off
92 exit 0
93 else
94 ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.OK "PCP power is ON"
95 fi
96}
97
98action=$1
99
100if [ "$action" == "check_cpu" ]
101then
102 echo "Check CPU presence"
103 check_cpu_presence
104elif [ "$action" == "check_power" ]
105then
106 echo "Check Power state"
107 check_power_state
108fi
109
110exit 0