blob: 4748706d9c06c72e159e5a7182aa54fa235f28ca [file] [log] [blame]
#!/bin/bash
# shellcheck disable=SC2046
function check_cpu_presence()
{
# Check CPU presence, identify whether it is 1P or 2P system
s0_presence=$(gpioget $(gpiofind presence-cpu0))
s1_presence=$(gpioget $(gpiofind presence-cpu1))
if [ "$s0_presence" == "0" ] && [ "$s1_presence" == "0" ]; then
ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.OK "Host firmware boots with 2 Processor"
elif [ "$s0_presence" == "0" ]; then
ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.OK "Host firmware boots with 1 Processor"
else
ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.OK "No Processor is present"
fi
}
function get_dbus_property()
{
service=$1
object_path=$2
interface=$3
property=$4
value=$(busctl get-property "$service" "$object_path" "$interface" "$property" | cut -d" " -f2)
echo "$value"
}
function is_ATX_power_good()
{
pgood_value=$(get_dbus_property org.openbmc.control.Power \
/org/openbmc/control/power0 org.openbmc.control.Power pgood)
if [ "$pgood_value" == "0" ]
then
echo 0
else
echo 1
fi
}
function is_PCP_power_good()
{
pcp_value=$(get_dbus_property xyz.openbmc_project.State.HostCondition.Gpio \
/xyz/openbmc_project/Gpios/host0 xyz.openbmc_project.Condition.HostFirmware \
CurrentFirmwareCondition)
if [[ "$pcp_value" == *".Running"* ]]
then
echo 1
else
echo 0
fi
}
function check_power_state()
{
echo "ATX power good checking"
state=$(is_ATX_power_good)
if [ "$state" == "0" ]
then
echo "Error: Failed to turn on ATX Power"
ampere_add_redfishevent.sh OpenBMC.0.1.PowerSupplyPowerGoodFailed.Critical "60000"
exit 0
else
ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.OK "ATX Power is ON"
fi
echo "Soc power good checking"
state=$(gpioget $(gpiofind s0-soc-pgood))
if [ "$state" == "0" ]
then
echo "Error: Soc domain power failure"
ampere_add_redfishevent.sh OpenBMC.0.1.AmpereCritical.Critical "Soc domain, power failure"
exit 0
else
ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.OK "SoC power domain is ON"
fi
echo "PCP power good checking"
state=$(is_PCP_power_good)
if [ "$state" == "0" ]
then
echo "Error: PCP domain power failure. Power off Host"
ampere_add_redfishevent.sh OpenBMC.0.1.AmpereCritical.Critical "PCP domain, power failure"
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
exit 0
else
ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.OK "PCP power is ON"
fi
}
action=$1
if [ "$action" == "check_cpu" ]
then
echo "Check CPU presence"
check_cpu_presence
elif [ "$action" == "check_power" ]
then
echo "Check Power state"
check_power_state
fi
exit 0