meta-facebook: harma: phosphor-gpio-monitor
Add gpio monitor for power good, power reset button
and post end.
Change-Id: Ibd18b04eaf2db45fb12765a922ce3cbd2787e32e
Signed-off-by: Peter Yin <peter.yin@quantatw.com>
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-post-end b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-post-end
new file mode 100644
index 0000000..8c96ccd
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-post-end
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+busctl set-property xyz.openbmc_project.State.Host0 /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.OperatingSystem.Status OperatingSystemState s xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Standby
+
+exit 0
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-post-end.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-post-end.service
new file mode 100644
index 0000000..7c22069
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-post-end.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Assert Post Complete Status
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/assert-post-end
+
+SyslogIdentifier=assert-post-end
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good
new file mode 100644
index 0000000..595725d
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+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
+
+exit 0
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good.service
new file mode 100644
index 0000000..12c5686
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Assert Power Good Status
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/assert-power-good
+
+SyslogIdentifier=assert-power-good
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button
new file mode 100644
index 0000000..150e3d7
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# shellcheck source=meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions
+source /usr/libexec/fb-common-functions
+
+set_gpio reset-control 0
+
+exit 0
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button.service
new file mode 100644
index 0000000..47e2b2a
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Assert Reset Button
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/assert-reset-button
+
+SyslogIdentifier=assert-reset-button
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-post-end b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-post-end
new file mode 100644
index 0000000..b9e8a2e
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-post-end
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+busctl set-property xyz.openbmc_project.State.Host0 /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.OperatingSystem.Status OperatingSystemState s xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Inactive
+
+exit 0
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-post-end.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-post-end.service
new file mode 100644
index 0000000..74eb955
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-post-end.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Deassert Post Complete Status
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/deassert-post-end
+
+SyslogIdentifier=deassert-post-end
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good
new file mode 100644
index 0000000..9cc75c4
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+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
+
+
+# The hardware disables the multiplexer in standby
+# to prevent sending a command by mistake to the retimer when it boots up.
+# Therefore, we need to rebind it when powered on.
+
+if [ ! -e "/sys/bus/i2c/drivers/pca954x/3-0070" ]; then
+ sleep 6
+ /usr/bin/echo 3-0070 > /sys/bus/i2c/drivers/pca954x/bind
+fi
+
+exit 0
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good.service
new file mode 100644
index 0000000..acd7486
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Deassert Power Good Status
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/deassert-power-good
+
+SyslogIdentifier=deassert-power-good
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button
new file mode 100644
index 0000000..b9c2f00
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# shellcheck source=meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions
+source /usr/libexec/fb-common-functions
+
+set_gpio reset-control 1
+
+exit 0
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button.service
new file mode 100644
index 0000000..66da79b
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Deassert Reset Button
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/deassert-reset-button
+
+SyslogIdentifier=deassert-reset-button
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/multi-gpios-sys-init b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/multi-gpios-sys-init
new file mode 100644
index 0000000..05bc103
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/multi-gpios-sys-init
@@ -0,0 +1,151 @@
+#!/bin/bash
+
+# shellcheck source=meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions
+source /usr/libexec/fb-common-functions
+
+power_good_init() {
+ if [ "$(get_gpio power-host-good)" -eq 1 ]; then
+ 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
+ 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
+}
+
+post_end_init() {
+ if [ "$(get_gpio host-ready-n)" -eq 0 ]; then
+ busctl set-property xyz.openbmc_project.State.Host0 /xyz/openbmc_project/state/host0 \
+ xyz.openbmc_project.State.OperatingSystem.Status OperatingSystemState s \
+ xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Standby;
+ else
+ busctl set-property xyz.openbmc_project.State.Host0 \
+ /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.OperatingSystem.Status OperatingSystemState s \
+ xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Inactive;
+ fi
+}
+
+# Set Post Led out GPIO N0-N7
+set_gpio led-postcode-0 1
+set_gpio led-postcode-1 1
+set_gpio led-postcode-2 1
+set_gpio led-postcode-3 1
+set_gpio led-postcode-4 1
+set_gpio led-postcode-5 1
+set_gpio led-postcode-6 1
+set_gpio led-postcode-7 1
+
+# gpiochip0 166
+set_gpio led-identify-gate 0
+
+# Set SGPIO Initial Value
+# SGPIO Out Bit-01
+set_gpio power-config-disable-e1s-0 0
+# SGPIO Out Bit-05
+set_gpio power-config-disable-e1s-1 0
+# SGPIO Out Bit-09
+set_gpio power-config-asic-module-enable 1
+
+# SGPIO Out Bit-11
+set_gpio power-config-asic-power-good 1
+# SGPIO Out Bit-13
+set_gpio power-config-pdb-power-good 1
+# SGPIO Out Bit-15
+set_gpio smi-control-n 1
+# SGPIO Out Bit-17
+set_gpio nmi-control-n 1
+# SGPIO Out Bit-19
+set_gpio nmi-control-sync-flood-n 1
+
+# SGPIO Out Bit-25
+set_gpio FM_CPU_SP5R1 0
+# SGPIO Out Bit-27
+set_gpio FM_CPU_SP5R2 0
+# SGPIO Out Bit-29
+set_gpio FM_CPU_SP5R3 0
+
+# SGPIO Out Bit-31
+set_gpio FM_CPU_SP5R4 0
+# SGPIO Out Bit-33
+set_gpio FM_CPU0_SA0 0
+# SGPIO Out Bit-35
+set_gpio FM_CPU0_SA1 0
+# SGPIO Out Bit-37
+set_gpio rt-cpu0-p0-enable 1
+# SGPIO Out Bit-39
+set_gpio rt-cpu0-p1-enable 1
+
+# SGPIO Out Bit-41
+set_gpio smb-rt-rom-p0-select 0
+# SGPIO Out Bit-43
+set_gpio smb-rt-rom-p1-select 0
+# SGPIO Out Bit-45
+set_gpio i3c-cpu-mux0-oe-n 0
+# SGPIO Out Bit-47
+set_gpio i3c-cpu-mux0-select 0
+# SGPIO Out Bit-49
+set_gpio i3c-cpu-mux1-oe-n 0
+
+# SGPIO Out Bit-51
+set_gpio i3c-cpu-mux1-select 0
+# SGPIO Out Bit-53
+set_gpio reset-control-bmc 1
+# SGPIO Out Bit-55
+set_gpio reset-control-cpu0-p0-mux 1
+# SGPIO Out Bit-57
+set_gpio reset-control-cpu0-p1-mux 1
+# SGPIO Out Bit-59
+set_gpio reset-control-e1s-mux 1
+
+# SGPIO Out Bit-61
+set_gpio reset-control-mb-mux 1
+# SGPIO Out Bit-63
+set_gpio reset-control-smb-e1s-0 1
+# SGPIO Out Bit-65
+set_gpio reset-control-smb-e1s-1 1
+# SGPIO Out Bit-67
+set_gpio reset-control-srst 1
+# SGPIO Out Bit-69
+set_gpio reset-control-usb-hub 1
+
+# SGPIO Out Bit-71
+set_gpio reset-control 1
+# SGPIO Out Bit-73
+set_gpio reset-control-cpu-kbrst 1
+# SGPIO Out Bit-75
+set_gpio reset-control-platrst 1
+# SGPIO Out Bit-77
+set_gpio bmc-jtag-mux-select-0 0
+# SGPIO Out Bit-79
+set_gpio bmc-jtag-mux-select-1 0
+# SGPIO Out Bit-81
+set_gpio bmc-jtag-select 1
+# SGPIO Out Bit-87
+set_gpio rt-cpu0-p0-force-enable 0
+# SGPIO Out Bit-89
+set_gpio rt-cpu0-p1-force-enable 0
+# SGPIO Out Bit-91
+set_gpio bios-debug-msg-disable 1
+# SGPIO Out Bit-93
+set_gpio uart-control-buffer-select 0
+# SGPIO Out Bit-95
+set_gpio ac-control-n 0
+# SGPIO Out Bit-83
+set_gpio bmc-ready-n 0
+# SGPIO Out Bit-85
+set_gpio bmc-ready-sgpio 1
+
+# Create /dev/mem
+if [ ! -c /dev/mem ]; then
+ /bin/mknod /dev/mem c 1 1
+fi
+
+# The workaround is to disable GPIO passthrough,
+# which is enabled by a hardware strap pin that is active high.
+# This design is intended for a debug presence pin,
+# so the default value is pulled high.
+devmem 0x1e6e251c 32 0
+
+# Initial Power status.
+power_good_init
+post_end_init
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/multi-gpios-sys-init.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/multi-gpios-sys-init.service
new file mode 100644
index 0000000..1ee870b
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/multi-gpios-sys-init.service
@@ -0,0 +1,11 @@
+[Unit]
+Wants=xyz.openbmc_project.State.Host@0.service
+After=xyz.openbmc_project.State.Host@0.service
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-gpio-monitor/multi-gpios-sys-init
+SyslogIdentifier=Power Good Status Init
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-multi-gpio-monitor.conf b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-multi-gpio-monitor.conf
new file mode 100644
index 0000000..f70d5f5
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-multi-gpio-monitor.conf
@@ -0,0 +1,3 @@
+[Unit]
+Wants=multi-gpios-sys-init.service
+After=multi-gpios-sys-init.service
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/plat-phosphor-multi-gpio-monitor.json b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/plat-phosphor-multi-gpio-monitor.json
new file mode 100644
index 0000000..8cab74b
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/plat-phosphor-multi-gpio-monitor.json
@@ -0,0 +1,38 @@
+[
+ {
+ "Name": "reset-button",
+ "ChipId": "0",
+ "GpioNum": 122,
+ "EventMon": "BOTH",
+ "Targets": {
+ "RISING": ["deassert-reset-button.service"],
+ "FALLING": ["assert-reset-button.service"]
+
+ },
+ "Continue": true
+ },
+ {
+ "Name": "power-host-good",
+ "ChipId": "2",
+ "GpioNum": 60,
+ "EventMon": "BOTH",
+ "Targets": {
+ "RISING": ["deassert-power-good.service"],
+ "FALLING": ["assert-power-good.service"]
+
+ },
+ "Continue": true
+ },
+ {
+ "Name": "host-ready-n",
+ "ChipId": "2",
+ "GpioNum": 66,
+ "EventMon": "BOTH",
+ "Targets": {
+ "RISING": ["deassert-post-end.service"],
+ "FALLING": ["assert-post-end.service"]
+
+ },
+ "Continue": true
+ }
+]
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend
new file mode 100644
index 0000000..8ab2deb
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend
@@ -0,0 +1,59 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+inherit obmc-phosphor-systemd systemd
+
+SRC_URI += "file://plat-phosphor-multi-gpio-monitor.json \
+ file://assert-reset-button.service \
+ file://assert-power-good.service \
+ file://assert-post-end.service \
+ file://deassert-reset-button.service \
+ file://deassert-power-good.service \
+ file://deassert-post-end.service \
+ file://multi-gpios-sys-init.service \
+ file://multi-gpios-sys-init \
+ file://assert-power-good \
+ file://deassert-power-good \
+ file://assert-post-end \
+ file://deassert-post-end \
+ file://assert-reset-button \
+ file://deassert-reset-button \
+ "
+
+RDEPENDS:${PN}:append:harma = " bash"
+
+FILES:${PN} += "${systemd_system_unitdir}/*"
+
+SYSTEMD_SERVICE:${PN} += " \
+ assert-reset-button.service \
+ assert-power-good.service \
+ assert-post-end.service \
+ deassert-reset-button.service \
+ deassert-power-good.service \
+ deassert-post-end.service \
+ multi-gpios-sys-init.service \
+ "
+
+SYSTEMD_AUTO_ENABLE = "enable"
+
+do_install:append:() {
+ install -d ${D}${datadir}/phosphor-gpio-monitor
+ install -m 0644 ${WORKDIR}/plat-phosphor-multi-gpio-monitor.json \
+ ${D}${datadir}/phosphor-gpio-monitor/phosphor-multi-gpio-monitor.json
+
+ install -d ${D}${systemd_system_unitdir}/
+ install -m 0644 ${WORKDIR}/*.service ${D}${systemd_system_unitdir}/
+
+ install -d ${D}${libexecdir}/${PN}
+ install -m 0777 ${WORKDIR}/multi-gpios-sys-init ${D}${libexecdir}/${PN}/
+
+ install -m 0777 ${WORKDIR}/assert-reset-button ${D}${libexecdir}/${PN}/
+ install -m 0777 ${WORKDIR}/deassert-reset-button ${D}${libexecdir}/${PN}/
+
+ install -m 0777 ${WORKDIR}/assert-post-end ${D}${libexecdir}/${PN}/
+ install -m 0777 ${WORKDIR}/deassert-post-end ${D}${libexecdir}/${PN}/
+
+ install -m 0777 ${WORKDIR}/assert-power-good ${D}${libexecdir}/${PN}/
+ install -m 0777 ${WORKDIR}/deassert-power-good ${D}${libexecdir}/${PN}/
+}
+
+SYSTEMD_OVERRIDE:${PN}-monitor:harma += "phosphor-multi-gpio-monitor.conf:phosphor-multi-gpio-monitor.service.d/phosphor-multi-gpio-monitor.conf"