Hieu Huynh | 2df80e6 | 2023-10-16 07:29:58 +0000 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | |
| 3 | # shellcheck disable=SC2046 |
| 4 | |
| 5 | function 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 | |
| 19 | function 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 | |
| 31 | function 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 | |
| 44 | function 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 | |
| 58 | function 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 | |
| 98 | action=$1 |
| 99 | |
| 100 | if [ "$action" == "check_cpu" ] |
| 101 | then |
| 102 | echo "Check CPU presence" |
| 103 | check_cpu_presence |
| 104 | elif [ "$action" == "check_power" ] |
| 105 | then |
| 106 | echo "Check Power state" |
| 107 | check_power_state |
| 108 | fi |
| 109 | |
| 110 | exit 0 |