meta-ampere: mtjade: handle Tempt events

Handle S0/1 OVERTEMP and S0/1 HIGHTEMP GPIO signals from Host CPU that turn off the Host to
prevent hardware damage and log an event.

Tested:
1. Assert OVERTEMP event by running below command from SCP console:
S0-cli> mww 0x10000f0112d0 0x2
  Check if the Host is turned OFF and event is logged
2. Assert and deassert HIGHTEMP event on Socket 0 and check if new
events are logged.
3. Repeat steps 1 and 2 on Socket 1

Signed-off-by: Thang Q. Nguyen <thang@os.amperecomputing.com>
Change-Id: I16c9676be379ac5d21849c591fbdadda4a6951ef
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils.bb b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils.bb
index 1ed440a..546315b 100644
--- a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils.bb
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils.bb
@@ -9,6 +9,7 @@
           file://gpio-lib.sh \
           file://ampere_power_util.sh \
           file://ampere_host_check.sh \
+          file://ampere_add_redfishevent.sh \
           "
 
 RDEPENDS:${PN} = "bash"
@@ -19,4 +20,5 @@
     install -m 0755 ${WORKDIR}/gpio-defs.sh ${D}/${sbindir}/
     install -m 0755 ${WORKDIR}/ampere_power_util.sh ${D}/${sbindir}/
     install -m 0755 ${WORKDIR}/ampere_host_check.sh ${D}/${sbindir}/
-}
\ No newline at end of file
+    install -m 0755 ${WORKDIR}/ampere_add_redfishevent.sh ${D}/${sbindir}/
+}
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_add_redfishevent.sh b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_add_redfishevent.sh
new file mode 100644
index 0000000..1170c6a
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_add_redfishevent.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+registry=$1
+msgarg=$2
+
+if [ -z "$registry" ]; then
+	echo "Usage:"
+	echo "     $0 <redfish registry> <argument>"
+	exit
+fi
+
+# Check if logger-systemd exist. Do nothing if not exists
+if ! command -v logger-systemd;
+then
+	echo "logger-systemd does not exist. Skip log events for $registry $msgarg"
+	exit
+fi
+
+# Log events
+logger-systemd --journald << EOF
+MESSAGE=
+PRIORITY=
+SEVERITY=
+REDFISH_MESSAGE_ID=$registry
+REDFISH_MESSAGE_ARGS=$msgarg
+EOF
diff --git a/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor.bb b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor.bb
new file mode 100644
index 0000000..c57ab13
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Ampere Computing LLC Host temperature event monitor application"
+PR = "r1"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+inherit obmc-phosphor-systemd
+inherit allarch
+
+DEPENDS += "virtual/obmc-gpio-monitor"
+RDEPENDS:${PN} += "virtual/obmc-gpio-monitor"
+
+OBMC_HOST_MONITOR_INSTANCES = "S0_overtemp S1_overtemp S0_hightemp_start S0_hightemp_stop S1_hightemp_start S1_hightemp_stop"
+
+# Copies config file having arguments for monitoring host overtemp
+# via GPIO assertion
+SYSTEMD_ENVIRONMENT_FILE:${PN} += " \
+                                   obmc/gpio/S0_overtemp \
+                                   obmc/gpio/S0_hightemp_start \
+                                   obmc/gpio/S0_hightemp_stop \
+                                   obmc/gpio/S1_overtemp \
+                                   obmc/gpio/S1_hightemp_start \
+                                   obmc/gpio/S1_hightemp_stop \
+                                  "
+
+
+SYSTEMD_SERVICE:${PN} = "ampere_overtemp@.service ampere_hightemp_start@.service ampere_hightemp_stop@.service"
+
+GPIO_MONITOR_TMPL = "phosphor-gpio-monitor@.service"
+GPIO_MONITOR_TGTFMT = "phosphor-gpio-monitor@{0}.service"
+TGT = "multi-user.target"
+TEMPEVENT_MONITOR_FMT = "../${GPIO_MONITOR_TMPL}:${TGT}.requires/${GPIO_MONITOR_TGTFMT}"
+SYSTEMD_LINK:${PN} += "${@compose_list(d, 'TEMPEVENT_MONITOR_FMT', 'OBMC_HOST_MONITOR_INSTANCES', 'OBMC_HOST_INSTANCES')}"
diff --git a/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/ampere_hightemp_start@.service b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/ampere_hightemp_start@.service
new file mode 100644
index 0000000..5f26194
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/ampere_hightemp_start@.service
@@ -0,0 +1,6 @@
+[Unit]
+Description=Ampere Computing LLC HighTempt event
+
+[Service]
+Restart=no
+ExecStart=/usr/bin/env ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.Warning "CPU%i HighTemp asserted"
diff --git a/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/ampere_hightemp_stop@.service b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/ampere_hightemp_stop@.service
new file mode 100644
index 0000000..012b0dd
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/ampere_hightemp_stop@.service
@@ -0,0 +1,6 @@
+[Unit]
+Description=Ampere Computing LLC HighTempt event
+
+[Service]
+Restart=no
+ExecStart=/usr/bin/env ampere_add_redfishevent.sh OpenBMC.0.1.AmpereEvent.OK "CPU%i HighTemp deasserted"
diff --git a/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/ampere_overtemp@.service b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/ampere_overtemp@.service
new file mode 100644
index 0000000..587cba1
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/ampere_overtemp@.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=Ampere Computing LLC Overtemp event
+
+[Service]
+Restart=no
+ExecStart=/usr/bin/env obmcutil chassisoff
+ExecStartPost=/usr/bin/env ampere_add_redfishevent.sh OpenBMC.0.1.CPUThermalTrip.Critical %i
diff --git a/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S0_hightemp_start b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S0_hightemp_start
new file mode 100644
index 0000000..44dc221
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S0_hightemp_start
@@ -0,0 +1,4 @@
+DEVPATH=/dev/input/by-path/platform-gpio-keys-event
+KEY=72
+POLARITY=1
+TARGET=ampere_hightemp_start@0.service
diff --git a/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S0_hightemp_stop b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S0_hightemp_stop
new file mode 100644
index 0000000..ccd0519
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S0_hightemp_stop
@@ -0,0 +1,4 @@
+DEVPATH=/dev/input/by-path/platform-gpio-keys-event
+KEY=72
+POLARITY=0
+TARGET=ampere_hightemp_stop@0.service
diff --git a/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S0_overtemp b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S0_overtemp
new file mode 100644
index 0000000..e39e196
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S0_overtemp
@@ -0,0 +1,4 @@
+DEVPATH=/dev/input/by-path/platform-gpio-keys-event
+KEY=51
+POLARITY=1
+TARGET=ampere_overtemp@0.service
diff --git a/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S1_hightemp_start b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S1_hightemp_start
new file mode 100644
index 0000000..901eb00
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S1_hightemp_start
@@ -0,0 +1,4 @@
+DEVPATH=/dev/input/by-path/platform-gpio-keys-event
+KEY=216
+POLARITY=1
+TARGET=ampere_hightemp_start@1.service
diff --git a/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S1_hightemp_stop b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S1_hightemp_stop
new file mode 100644
index 0000000..f1b4cc1
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S1_hightemp_stop
@@ -0,0 +1,4 @@
+DEVPATH=/dev/input/by-path/platform-gpio-keys-event
+KEY=216
+POLARITY=0
+TARGET=ampere_hightemp_start@1.service
diff --git a/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S1_overtemp b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S1_overtemp
new file mode 100644
index 0000000..c7bb8c1
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-phosphor/gpio/tempevent-monitor/obmc/gpio/S1_overtemp
@@ -0,0 +1,4 @@
+DEVPATH=/dev/input/by-path/platform-gpio-keys-event
+KEY=206
+POLARITY=1
+TARGET=ampere_overtemp@1.service
diff --git a/meta-ampere/meta-jade/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend b/meta-ampere/meta-jade/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
index 7b27a7e..23015af 100644
--- a/meta-ampere/meta-jade/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
+++ b/meta-ampere/meta-jade/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
@@ -6,6 +6,7 @@
                                        fault-monitor \
                                        id-button \
                                        psu-hotswap-reset \
+                                       tempevent-monitor \
                                       "
 
 RDEPENDS:${PN}-inventory:append:mtjade = " \