meta-facebook: yosemite4: Fan board eFuse fault event
Summary:
The system shall register an event in response to fan board eFuse fault.
BMC is triggered by INT_FANBOARD0_IOEXP_N or INT_FANBOARD1_IOEXP_N to
identify which fan board has eFuse fault.
Then, BMC reads relevant fan board IOE to check affected eFuse.
Test Plan:
Pull FLT_EFUSE0_N low to make INT_FANBOARD0_IOEXP_N be low.
Testing:
Take fan board 0 and eFuse 0 for example.
1. Check fan board 0 IOE init status
root@bmc:~# i2ctransfer -f -y 30 w1@0x22 0 r1
0xff
2. Pull FLT_EFUSE0_N low and check fan board 0 IOE init status
root@bmc:~# i2ctransfer -f -y 30 w1@0x22 0 r1
0xfb
3. Check event log
root@bmc:~# mfg-tool log-display
...
"2": {
"additional_data": [
"FAULT=eFuse0"
],
"event_id": "",
"message": "Fan board 0 eFuse fault",
"resolution": "",
"resolved": false,
"severity": "xyz.openbmc_project.Logging.Entry.Level.Error",
"timestamp": "2024-02-27T17:31:55.420000000Z",
"updated_timestamp": "2024-02-27T17:31:55.420000000Z"
}
Change-Id: Idb1a6a767b1e412931d229eb9cfaac7624fdec0a
Signed-off-by: Yikai Tsai <yikai.tsai.wiwynn@gmail.com>
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor/fan-board-efuse-fault b/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor/fan-board-efuse-fault
new file mode 100644
index 0000000..641db4b
--- /dev/null
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor/fan-board-efuse-fault
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+log_message() {
+ local MESSAGE="Fan board $1 eFuse fault"
+ local COMBINED_INFO="eFuse$2"
+
+ busctl call \
+ xyz.openbmc_project.Logging /xyz/openbmc_project/logging \
+ xyz.openbmc_project.Logging.Create Create "ssa{ss}" "$MESSAGE" \
+ "xyz.openbmc_project.Logging.Entry.Level.Error" 1 "FAULT" "$COMBINED_INFO"
+}
+
+
+
+# if $1 == 0, fan board 0 IOE is at i2c-30 0x22.
+# if $1 == 1, fan board 1 IOE is at i2c-31 0x22.
+
+if [ "$1" -eq 0 ]; then
+ i2c_bus=30
+ ioe_addr=0x22
+ fan_board=0
+elif [ "$1" -eq 1 ]; then
+ i2c_bus=31
+ ioe_addr=0x22
+ fan_board=1
+else
+ echo "Invalid input. Please provide 0 or 1."
+ exit 1
+fi
+
+
+# i2ctranster to check which slot got interrupt
+read -r INT_BYTE <<< "$(i2ctransfer -f -y $i2c_bus w1@$ioe_addr 0 r1)"
+INT_BYTE=$((INT_BYTE >> 2))
+
+# Traverse INT_BYTE
+count=0
+EFUSE_RANGE=6
+while [ $count -lt $EFUSE_RANGE ]
+do
+ fault=$(( (INT_BYTE >> count) & 1 ))
+ # if fault[i] == 0, means efuse_x got fault
+ if [ $fault -eq 0 ]; then
+ log_message $fan_board $count
+ fi
+
+ count=$((count + 1))
+done
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor/fan-board-efuse-fault@.service b/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor/fan-board-efuse-fault@.service
new file mode 100644
index 0000000..0042d84
--- /dev/null
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor/fan-board-efuse-fault@.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=fan board power-fault:%i
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/fan-board-efuse-fault %i
+SyslogIdentifier=fan-board-efuse-fault%i
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor/yosemite4-phosphor-multi-gpio-monitor.json b/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor/yosemite4-phosphor-multi-gpio-monitor.json
index 88c72d5..a5db14f 100644
--- a/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor/yosemite4-phosphor-multi-gpio-monitor.json
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor/yosemite4-phosphor-multi-gpio-monitor.json
@@ -325,5 +325,25 @@
"slot-power-fault@58.service"]
},
"Continue": true
+ },
+ {
+ "Name": "INT_FANBOARD1_IOEXP_N",
+ "LineName": "INT_FANBOARD1_IOEXP_N",
+ "EventMon": "FALLING",
+ "Targets": {
+ "FALLING": [
+ "fan-board-efuse-fault@1.service"]
+ },
+ "Continue": true
+ },
+ {
+ "Name": "INT_FANBOARD0_IOEXP_N",
+ "LineName": "INT_FANBOARD0_IOEXP_N",
+ "EventMon": "FALLING",
+ "Targets": {
+ "FALLING": [
+ "fan-board-efuse-fault@0.service"]
+ },
+ "Continue": true
}
]
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend b/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend
index 91bfebc..26006a2 100644
--- a/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend
@@ -20,6 +20,8 @@
file://slot-hsc-fault@.service \
file://slot-power-fault \
file://slot-power-fault@.service \
+ file://fan-board-efuse-fault \
+ file://fan-board-efuse-fault@.service \
"
RDEPENDS:${PN}:append = " bash"
@@ -36,6 +38,7 @@
rescan-wf-bic@.service \
slot-hsc-fault@.service \
slot-power-fault@.service \
+ fan-board-efuse-fault@.service \
reconfig-net-interface@.service \
"
@@ -55,6 +58,7 @@
install -m 0644 ${WORKDIR}/rescan-wf-bic@.service ${D}${systemd_system_unitdir}/
install -m 0644 ${WORKDIR}/slot-hsc-fault@.service ${D}${systemd_system_unitdir}/
install -m 0644 ${WORKDIR}/slot-power-fault@.service ${D}${systemd_system_unitdir}/
+ install -m 0644 ${WORKDIR}/fan-board-efuse-fault@.service ${D}${systemd_system_unitdir}/
install -d ${D}${libexecdir}/${PN}
install -m 0755 ${WORKDIR}/probe-slot-device ${D}${libexecdir}/${PN}/
install -m 0755 ${WORKDIR}/reconfig-net-interface ${D}${libexecdir}/${PN}/
@@ -62,6 +66,7 @@
install -m 0755 ${WORKDIR}/rescan-wf-bic ${D}${libexecdir}/${PN}/
install -m 0755 ${WORKDIR}/slot-hsc-fault ${D}${libexecdir}/${PN}/
install -m 0755 ${WORKDIR}/slot-power-fault ${D}${libexecdir}/${PN}/
+ install -m 0755 ${WORKDIR}/fan-board-efuse-fault ${D}${libexecdir}/${PN}/
install -d ${D}/${bindir}
install -m 0755 ${WORKDIR}/configure-nic-mctp-endpoint.sh ${D}/${bindir}/
}