1*6c5cc06eSPeter Yin#!/bin/bash
2*6c5cc06eSPeter Yin
3*6c5cc06eSPeter Yin# shellcheck source=meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/logging-util
4*6c5cc06eSPeter Yinsource /usr/libexec/phosphor-gpio-monitor/logging-util
5*6c5cc06eSPeter Yin
6*6c5cc06eSPeter YinHELP="
7*6c5cc06eSPeter YinUsage: smc-event-logger <event> <id_gpio-name>
8*6c5cc06eSPeter Yin<event> is the power rail event to log,
9*6c5cc06eSPeter Yine.g. assert / deassert.
10*6c5cc06eSPeter Yin
11*6c5cc06eSPeter Yin<id_gpio-name> is defined in json file,
12*6c5cc06eSPeter Yine.g. 5_health-mmc
13*6c5cc06eSPeter Yin"
14*6c5cc06eSPeter Yin
15*6c5cc06eSPeter Yin# get assert or deassert message
16*6c5cc06eSPeter Yinif [ "$1" == "assert" ]; then
17*6c5cc06eSPeter Yin  action="SMCFailed"
18*6c5cc06eSPeter Yinelif [ "$1" == "deassert" ]; then
19*6c5cc06eSPeter Yin  action="SMCRestored"
20*6c5cc06eSPeter Yinfi
21*6c5cc06eSPeter Yin
22*6c5cc06eSPeter Yin# get gpio chip ID
23*6c5cc06eSPeter YinMESSAGE=$2
24*6c5cc06eSPeter Yinnumber="${MESSAGE%%_*}"
25*6c5cc06eSPeter Yin
26*6c5cc06eSPeter Yin# remove prefix from 0_xxxxxx to xxxxxx
27*6c5cc06eSPeter YinGPIO_NAME="${MESSAGE#*_}"
28*6c5cc06eSPeter Yin
29*6c5cc06eSPeter YinMSG_ID="xyz.openbmc_project.State.SMC.$action"
30*6c5cc06eSPeter YinDEVICE_PATH="/xyz/openbmc_project/inventory/system/board/Minerva_Aegis/smc0"
31*6c5cc06eSPeter YinSTASH_FILE="/run/$GPIO_NAME.log_entry"
32*6c5cc06eSPeter Yin
33*6c5cc06eSPeter Yinif gpio_logging_valid "$number" "$1" ; then
34*6c5cc06eSPeter Yin    case $1 in
35*6c5cc06eSPeter Yin        "-h")
36*6c5cc06eSPeter Yin            echo "$HELP"
37*6c5cc06eSPeter Yin            ;;
38*6c5cc06eSPeter Yin
39*6c5cc06eSPeter Yin        "assert")
40*6c5cc06eSPeter Yin            if [ ! -s "$STASH_FILE" ]; then
41*6c5cc06eSPeter Yin                 /usr/bin/log-create "$MSG_ID" --json \
42*6c5cc06eSPeter Yin                     "{ \"IDENTIFIER\": \"${DEVICE_PATH}\", \"FAILURE_TYPE\": \"${GPIO_NAME}\"}" \
43*6c5cc06eSPeter Yin                     > "${STASH_FILE}"
44*6c5cc06eSPeter Yin            fi
45*6c5cc06eSPeter Yin            ;;
46*6c5cc06eSPeter Yin
47*6c5cc06eSPeter Yin        "deassert")
48*6c5cc06eSPeter Yin            if [ -s "${STASH_FILE}" ]; then
49*6c5cc06eSPeter Yin                log-resolve -p "$(< "${STASH_FILE}")"
50*6c5cc06eSPeter Yin                rm "${STASH_FILE}"
51*6c5cc06eSPeter Yin            fi
52*6c5cc06eSPeter Yin            /usr/bin/log-create "$MSG_ID" --json \
53*6c5cc06eSPeter Yin                "{ \"IDENTIFIER\": \"${DEVICE_PATH}\"}"
54*6c5cc06eSPeter Yin            ;;
55*6c5cc06eSPeter Yin    esac
56*6c5cc06eSPeter Yinfi
57*6c5cc06eSPeter Yin
58*6c5cc06eSPeter Yinexit 0
59