From 2df80e6badc39f9ca8c3a25df4649a8f679f1be4 Mon Sep 17 00:00:00 2001 From: Hieu Huynh Date: Mon, 16 Oct 2023 07:29:58 +0000 Subject: meta-ampere: mtmitchell: handle power sequence failure This commit supports log the power on sequence to analyze power on failure. This would include: - PSU power good monitoring to indicate PSU is powered on. - System power good monitoring to indicate CPU is powered on. Tested: 1. Power on Host, check the Event logs identify the system /redfish/v1/Systems/system/LogServices/EventLog/Entries "Message": "Host firmware boots with 1 Processor", 2. Check the Event logs in case power on failure. Signed-off-by: Hieu Huynh Signed-off-by: Thang Tran Change-Id: I15237d5f6be454b628529fce43424514bf445d53 --- .../recipes-ampere/host/ampere-hostctrl.bbappend | 16 +++ .../ampere-host-on-host-check-override.conf | 4 + .../ampere_power_on_failure_check.sh | 110 +++++++++++++++++++++ .../mtmitchell_platform_gpios_init.sh | 3 +- 4 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl.bbappend create mode 100644 meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl/ampere-host-on-host-check-override.conf create mode 100644 meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl/ampere_power_on_failure_check.sh (limited to 'meta-ampere/meta-mitchell') diff --git a/meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl.bbappend b/meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl.bbappend new file mode 100644 index 0000000000..6a3bf862d4 --- /dev/null +++ b/meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl.bbappend @@ -0,0 +1,16 @@ +FILESEXTRAPATHS:append := "${THISDIR}/${PN}:" + +SRC_URI += " \ + file://ampere_power_on_failure_check.sh \ + file://ampere-host-on-host-check-override.conf \ + " + +FILES:${PN} += "${systemd_system_unitdir}/ampere-host-on-host-check@0.service.d" + +do_install:append() { + install -m 0755 ${WORKDIR}/ampere_power_on_failure_check.sh ${D}/${sbindir}/ + + install -d ${D}${systemd_system_unitdir}/ampere-host-on-host-check@0.service.d + install -m 644 ${WORKDIR}/ampere-host-on-host-check-override.conf \ + ${D}${systemd_system_unitdir}/ampere-host-on-host-check@0.service.d +} diff --git a/meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl/ampere-host-on-host-check-override.conf b/meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl/ampere-host-on-host-check-override.conf new file mode 100644 index 0000000000..ece22f238b --- /dev/null +++ b/meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl/ampere-host-on-host-check-override.conf @@ -0,0 +1,4 @@ +[Service] +ExecStartPre=/bin/sh -c "ampere_power_on_failure_check.sh check_cpu" +ExecStartPost=/bin/sleep 3 +ExecStopPost=/bin/sh -c "ampere_power_on_failure_check.sh check_power" diff --git a/meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl/ampere_power_on_failure_check.sh b/meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl/ampere_power_on_failure_check.sh new file mode 100644 index 0000000000..4748706d9c --- /dev/null +++ b/meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl/ampere_power_on_failure_check.sh @@ -0,0 +1,110 @@ +#!/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 diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/mtmitchell_platform_gpios_init.sh b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/mtmitchell_platform_gpios_init.sh index 57a951abda..74a7afd700 100644 --- a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/mtmitchell_platform_gpios_init.sh +++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/mtmitchell_platform_gpios_init.sh @@ -108,7 +108,8 @@ export input_gpios_in_bmc_reboot=( "ps0-ac-loss-n" "ps1-ac-loss-n" "s1-ddr-save" - "sys-pgood" + "s0-fw-boot-ok" + "s1-pcp-pgood" "presence-cpu1" "s0-fault-alert" "s0-sys-auth-failure-n" -- cgit v1.2.3