meta-facebook: catalina: phosphor-gpio-monitor: add leak detect gpio pin monitor

Add leak detect gpio pin mornitoring and add corresponding event log.

Change-Id: Ibf0ec1e0d845aaa4e36c310d9b9aecd99f6681e9
Signed-off-by: Potin Lai <potin.lai@quantatw.com>
diff --git a/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-gpio-log@.service b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-gpio-log@.service
new file mode 100644
index 0000000..b44b0ba
--- /dev/null
+++ b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-gpio-log@.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=%i GPIO Assert
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/catalina-gpio-monitor %i assert
+
+SyslogIdentifier=%i-gpio-assert
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
index 2fd42f3..779d856 100644
--- 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
@@ -8,6 +8,27 @@
 LINENAME="$1"
 STATE="$2"
 
+logging()
+{
+    MESSAGE="$1"
+    SEVERITY="$2"
+    busctl call \
+        xyz.openbmc_project.Logging /xyz/openbmc_project/logging \
+        xyz.openbmc_project.Logging.Create Create "ssa{ss}" \
+        "$MESSAGE" "$SEVERITY" 0
+}
+
+log_error()
+{
+    logging "$1" "xyz.openbmc_project.Logging.Entry.Level.Error"
+}
+
+log_info()
+{
+    logging "$1" "xyz.openbmc_project.Logging.Entry.Level.Informational"
+}
+
+
 do_RUN_POWER_PG_change()
 {
     if [ "$STATE" = "assert" ]; then
@@ -28,11 +49,41 @@
     fi
 }
 
+do_leak_detect_change()
+{
+    if [ "$STATE" = "assert" ]; then
+        LOG_MSG="leak has been detected"
+    else
+        LOG_MSG="leak has been recoverd"
+    fi
+
+    case "$LINENAME" in
+        "LEAK0_DETECT_R" | "LEAK2_DETECT_R")
+            LOG_MSG="A large $LOG_MSG at location $LINENAME"
+            ;;
+        "LEAK1_DETECT_R" | "LEAK3_DETECT_R")
+            LOG_MSG="A small $LOG_MSG at location $LINENAME"
+            ;;
+        *)
+            return 0
+            ;;
+    esac
+
+    if [ "$STATE" = "assert" ]; then
+        log_error "$LOG_MSG"
+    else
+        log_info "$LOG_MSG"
+    fi
+}
+
 case $LINENAME in
     "RUN_POWER_PG" | "ID_RST_BTN_BMC_N")
         FUNC_NAME="do_${LINENAME}_change"
         "$FUNC_NAME"
         ;;
+    "LEAK0_DETECT_R" | "LEAK1_DETECT_R" | "LEAK2_DETECT_R" | "LEAK3_DETECT_R")
+        do_leak_detect_change
+        ;;
     *)
         echo "Unknown LINENAME = $LINENAME"
         exit 1
diff --git a/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-gpio-log@service b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-gpio-log@service
new file mode 100644
index 0000000..5767e1f
--- /dev/null
+++ b/meta-facebook/meta-catalina/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-gpio-log@service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Deassert %i
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/catalina-gpio-monitor %i deassert
+
+SyslogIdentifier=deassert-%i
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
index c34afcf..42d458a 100644
--- 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
@@ -18,5 +18,45 @@
             "FALLING": ["deassert-reset-button.service"]
         },
         "Continue": true
+    },
+    {
+        "Name": "LEAK0_DETECT_R",
+        "LineName": "LEAK0_DETECT_R",
+        "EventMon": "BOTH",
+        "Targets": {
+            "RISING": ["assert-gpio-log@LEAK0_DETECT_R.service"],
+            "FALLING": ["deassert-gpio-log@LEAK0_DETECT_R.service"]
+        },
+        "Continue": true
+    },
+    {
+        "Name": "LEAK1_DETECT_R",
+        "LineName": "LEAK1_DETECT_R",
+        "EventMon": "BOTH",
+        "Targets": {
+            "RISING": ["assert-gpio-log@LEAK1_DETECT_R.service"],
+            "FALLING": ["deassert-gpio-log@LEAK1_DETECT_R.service"]
+        },
+        "Continue": true
+    },
+    {
+        "Name": "LEAK2_DETECT_R",
+        "LineName": "LEAK2_DETECT_R",
+        "EventMon": "BOTH",
+        "Targets": {
+            "RISING": ["assert-gpio-log@LEAK2_DETECT_R.service"],
+            "FALLING": ["deassert-gpio-log@LEAK2_DETECT_R.service"]
+        },
+        "Continue": true
+    },
+    {
+        "Name": "LEAK3_DETECT_R",
+        "LineName": "LEAK3_DETECT_R",
+        "EventMon": "BOTH",
+        "Targets": {
+            "RISING": ["assert-gpio-log@LEAK3_DETECT_R.service"],
+            "FALLING": ["deassert-gpio-log@LEAK3_DETECT_R.service"]
+        },
+        "Continue": true
     }
 ]