meta-ampere: mtmitchell: support system firmware hang handler

Monitors GPIOF4 for 1P system and GPION5 for 2P system to detect if
system firmware hang. If these GPIOs stop asserting for more than three
seconds, BMC will trigger events and reset the system.

Tested:
1. Simulate the GPIO that deasserted for more than three seconds.
2. Fail to boot to Host, check the event log is created
   and system will be reset.

Signed-off-by: Hieu Huynh <hieuh@os.amperecomputing.com>
Change-Id: I2c2d5d50e5ebd6d9b9e3435ab1c17393dac1d9cf
diff --git a/meta-ampere/meta-mitchell/recipes-ampere/host/ampere-sysfw-hang-handler.bb b/meta-ampere/meta-mitchell/recipes-ampere/host/ampere-sysfw-hang-handler.bb
new file mode 100644
index 0000000..7562cbd
--- /dev/null
+++ b/meta-ampere/meta-mitchell/recipes-ampere/host/ampere-sysfw-hang-handler.bb
@@ -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}/
+}