summaryrefslogtreecommitdiff
path: root/meta-ampere/meta-mitchell
diff options
context:
space:
mode:
authorHieu Huynh <hieuh@os.amperecomputing.com>2023-10-16 10:29:58 +0300
committerHieu Huynh <hieuh@os.amperecomputing.com>2023-10-19 15:37:24 +0300
commit2df80e6badc39f9ca8c3a25df4649a8f679f1be4 (patch)
tree49af38bd0d2da62c64076ebbd4e8dd7e65bacafb /meta-ampere/meta-mitchell
parent52a3436a7d88ce6a091390878952510d001c9d08 (diff)
downloadopenbmc-2df80e6badc39f9ca8c3a25df4649a8f679f1be4.tar.xz
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 <hieuh@os.amperecomputing.com> Signed-off-by: Thang Tran <thuutran@amperecomputing.com> Change-Id: I15237d5f6be454b628529fce43424514bf445d53
Diffstat (limited to 'meta-ampere/meta-mitchell')
-rw-r--r--meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl.bbappend16
-rw-r--r--meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl/ampere-host-on-host-check-override.conf4
-rw-r--r--meta-ampere/meta-mitchell/recipes-ampere/host/ampere-hostctrl/ampere_power_on_failure_check.sh110
-rw-r--r--meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/mtmitchell_platform_gpios_init.sh3
4 files changed, 132 insertions, 1 deletions
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"