Initial commit
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
SUMMARY = "Ampere Computing LLC System Firmware Hang Handler"
|
||||
DESCRIPTION = "A host control implementation suitable for Ampere Computing LLC's systems"
|
||||
PR = "r1"
|
||||
LICENSE = "Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
|
||||
|
||||
inherit systemd
|
||||
inherit obmc-phosphor-systemd
|
||||
|
||||
RDEPENDS:${PN} = "bash"
|
||||
FILESEXTRAPATHS:append := "${THISDIR}/${PN}:"
|
||||
|
||||
SYSTEMD_PACKAGES = "${PN}"
|
||||
|
||||
SRC_URI = " \
|
||||
file://ampere-sysfw-hang-handler.service \
|
||||
file://ampere_sysfw_hang_handler.sh \
|
||||
"
|
||||
|
||||
SYSTEMD_SERVICE:${PN} += "ampere-sysfw-hang-handler.service"
|
||||
|
||||
SYSFW_HANG_TGT = "ampere-sysfw-hang-handler.service"
|
||||
SYSFW_HANG_INSTMPL = "ampere-sysfw-hang-handler.service"
|
||||
AMPER_HOST_RUNNING = "obmc-host-already-on@{0}.target"
|
||||
SYSFW_HANG_TARGET_FMT = "../${SYSFW_HANG_TGT}:${AMPER_HOST_RUNNING}.wants/${SYSFW_HANG_INSTMPL}"
|
||||
SYSTEMD_LINK:${PN} += "${@compose_list_zip(d, 'SYSFW_HANG_TARGET_FMT', 'OBMC_HOST_INSTANCES')}"
|
||||
|
||||
do_install() {
|
||||
install -d ${D}/usr/sbin
|
||||
install -m 0755 ${WORKDIR}/ampere_sysfw_hang_handler.sh ${D}/${sbindir}/
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
[Unit]
|
||||
Description=Ampere System Firmware Hang Handler
|
||||
After=obmc-host-already-on@0.target
|
||||
BindTo=obmc-host-already-on@0.target
|
||||
ConditionPathExists=!/var/ampere/sysfw-hang-disable
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/sbin/ampere_sysfw_hang_handler.sh
|
||||
SyslogIdentifier=ampere_sysfw_hang
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
|
||||
# shellcheck source=meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/gpio-lib.sh
|
||||
source /usr/sbin/gpio-lib.sh
|
||||
|
||||
# Do event trigger
|
||||
function sel_trigger()
|
||||
{
|
||||
echo "Error: system firmware hang, trigger sel"
|
||||
ampere_add_redfishevent.sh OpenBMC.0.1.SystemPowerOnFailed.Critical
|
||||
}
|
||||
|
||||
# Do reset the system
|
||||
function reset_system()
|
||||
{
|
||||
echo "Error: system firmware hang, reset the system"
|
||||
ipmitool chassis power reset
|
||||
}
|
||||
|
||||
s0_last_hb_state=0
|
||||
cnt=-1
|
||||
while true
|
||||
do
|
||||
# Monitor heart beat GPIO value, GPIOF4 for Socket 0
|
||||
s0_hb_state=$(gpio_name_get s0-heartbeat)
|
||||
if [ "$s0_last_hb_state" != "$s0_hb_state" ]; then
|
||||
cnt=0
|
||||
else
|
||||
cnt=$((cnt + 1))
|
||||
fi
|
||||
|
||||
if [ "$cnt" -ge 6 ]; then
|
||||
echo "Error: system firmware hang"
|
||||
sel_trigger
|
||||
reset_system
|
||||
exit 0
|
||||
fi
|
||||
s0_last_hb_state="$s0_hb_state"
|
||||
sleep 0.5
|
||||
done
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user