mate-facebook: catalina: enable gpio monitor service

Enable gpio monitor service and add actions of GPIO pins below.
- RUN_POWER_PG
- ID_RST_BTN_BMC_N

Change-Id: I564cad2ef249721c61f7526b18d81dc45e1a1d2f
Signed-off-by: Potin Lai <potin.lai@quantatw.com>
diff --git a/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button.service b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button.service
new file mode 100644
index 0000000..1004e5b
--- /dev/null
+++ b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Assert RUN_POWER_PG
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/catalina-gpio-monitor ID_RST_BTN_BMC_N assert
+
+SyslogIdentifier=assert-run-power-pg
diff --git a/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-run-power-pg.service b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-run-power-pg.service
new file mode 100644
index 0000000..e8a1e24
--- /dev/null
+++ b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-run-power-pg.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Assert RUN_POWER_PG
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/catalina-gpio-monitor RUN_POWER_PG assert
+
+SyslogIdentifier=assert-run-power-pg
diff --git a/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/catalina-gpio-monitor b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/catalina-gpio-monitor
new file mode 100644
index 0000000..c4d2f4f
--- /dev/null
+++ b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/catalina-gpio-monitor
@@ -0,0 +1,40 @@
+#!/bin/bash
+# shellcheck source=meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions
+source /usr/libexec/fb-common-functions
+
+GPIO_HIGH=1
+GPIO_LOW=0
+
+LINENAME="$1"
+STATE="$2"
+
+do_RUN_POWER_PG_change()
+{
+    if [ "$STATE" = "assert" ]; then
+        set_gpio "PCI_MUX_SEL" "$GPIO_HIGH"
+        busctl set-property xyz.openbmc_project.State.Host0 /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.Host CurrentHostState s xyz.openbmc_project.State.Host.HostState.Running
+    else
+        set_gpio "PCI_MUX_SEL" "$GPIO_LOW"
+        busctl set-property xyz.openbmc_project.State.Host0 /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.Host CurrentHostState s xyz.openbmc_project.State.Host.HostState.Off
+    fi
+}
+
+do_ID_RST_BTN_BMC_N_change()
+{
+    if [ "$STATE" = "assert" ]; then
+        set_gpio "RST_BMC_RSTBTN_OUT_N" "$GPIO_HIGH"
+    else
+        set_gpio "RST_BMC_RSTBTN_OUT_N" "$GPIO_LOW"
+    fi
+}
+
+case $LINENAME in
+    "RUN_POWER_PG")
+        FUNC_NAME="do_${LINENAME}_change"
+        "$FUNC_NAME"
+        ;;
+    *)
+        echo "Unknown LINENAME = $LINENAME"
+        exit 1
+        ;;
+esac
diff --git a/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button.service b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button.service
new file mode 100644
index 0000000..2f5da96
--- /dev/null
+++ b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Deassert RUN_POWER_PG
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/catalina-gpio-monitor ID_RST_BTN_BMC_N deassert
+
+SyslogIdentifier=deassert-run-power-pg
diff --git a/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-run-power-pg.service b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-run-power-pg.service
new file mode 100644
index 0000000..4301e89
--- /dev/null
+++ b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-run-power-pg.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Deassert RUN_POWER_PG
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/catalina-gpio-monitor RUN_POWER_PG deassert
+
+SyslogIdentifier=deassert-run-power-pg
diff --git a/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-multi-gpio-monitor.json b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-multi-gpio-monitor.json
new file mode 100644
index 0000000..c34afcf
--- /dev/null
+++ b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-multi-gpio-monitor.json
@@ -0,0 +1,22 @@
+[
+    {
+        "Name": "RUN_POWER_PG",
+        "LineName": "RUN_POWER_PG",
+        "EventMon": "BOTH",
+        "Targets": {
+            "RISING": ["assert-run-power-pg.service"],
+            "FALLING": ["deassert-run-power-pg.service"]
+        },
+        "Continue": true
+    },
+    {
+        "Name": "ID_RST_BTN_BMC_N",
+        "LineName": "ID_RST_BTN_BMC_N",
+        "EventMon": "BOTH",
+        "Targets": {
+            "RISING": ["assert-reset-button.service"],
+            "FALLING": ["deassert-reset-button.service"]
+        },
+        "Continue": true
+    }
+]
diff --git a/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend
new file mode 100644
index 0000000..0f90a58
--- /dev/null
+++ b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend
@@ -0,0 +1,26 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+inherit obmc-phosphor-systemd systemd
+
+SRC_URI += " \
+    file://catalina-gpio-monitor \
+    file://phosphor-multi-gpio-monitor.json \
+    "
+
+RDEPENDS:${PN}:append = " bash"
+
+FILES:${PN} += "${systemd_system_unitdir}/*"
+
+SYSTEMD_SERVICE:${PN}-monitor += " \
+    assert-run-power-pg.service \
+    deassert-run-power-pg.service \
+    "
+
+SYSTEMD_AUTO_ENABLE = "enable"
+
+do_install:append:() {
+    install -d ${D}${datadir}/${PN}
+    install -d ${D}${libexecdir}/${PN}
+
+    install -m 0755 ${WORKDIR}/catalina-gpio-monitor ${D}${libexecdir}/${PN}/catalina-gpio-monitor
+}
diff --git a/meta-facebook/meta-catalina/recipes-phosphor/images/fb-catalina-phosphor-image.inc b/meta-facebook/meta-catalina/recipes-phosphor/images/fb-catalina-phosphor-image.inc
index 5b98f30..77bd70b 100644
--- a/meta-facebook/meta-catalina/recipes-phosphor/images/fb-catalina-phosphor-image.inc
+++ b/meta-facebook/meta-catalina/recipes-phosphor/images/fb-catalina-phosphor-image.inc
@@ -8,6 +8,7 @@
 
 # Monitor presence gpio status
 OBMC_IMAGE_EXTRA_INSTALL:append = " \
+    phosphor-gpio-monitor \
     phosphor-gpio-monitor-presence \
 "