summaryrefslogtreecommitdiff
path: root/meta-ufispace/meta-ncplite/recipes-phosphor/state
diff options
context:
space:
mode:
Diffstat (limited to 'meta-ufispace/meta-ncplite/recipes-phosphor/state')
-rw-r--r--meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/chassis-control59
-rw-r--r--meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/host-control32
-rw-r--r--meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-chassis-poweroff@.service15
-rw-r--r--meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-chassis-poweron@.service10
-rw-r--r--meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-host-force-reset@.service15
-rw-r--r--meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-host-off@.service16
-rw-r--r--meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager_%.bbappend81
7 files changed, 228 insertions, 0 deletions
diff --git a/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/chassis-control b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/chassis-control
new file mode 100644
index 0000000000..865b263794
--- /dev/null
+++ b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/chassis-control
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+# Usage of this utility
+usage() {
+ echo "Usage: $(basename "$0") [on|off|forceoff]";
+}
+
+#Check CPU boot done pin drop in 30s
+timeout=30
+wait_graceful_off(){
+ echo "Wait for host shutdown in ${timeout}s"
+ while [ "${timeout}" -gt 0 ]; do
+ host_state=$(gpioget --numeric host0-ready)
+ timeout=$((timeout-1))
+ if [ "${host_state}" -eq 0 ]; then
+ echo "Host is graceful off"
+ return 0
+ fi
+ sleep 1
+ done
+ echo "Host still on, but reach timeout"
+}
+
+set_gpio_power_off() {
+ echo "Set GPIO to power off chassis"
+ gpioset --hold-period 50ms -t0 power-chassis-control0=1
+ gpioset --hold-period 50ms -t0 power-chassis-control1=1
+}
+
+set_gpio_power_on() {
+ echo "Set GPIO to power on chassis"
+ val=$(gpioget --numeric host0-ready)
+ if [ "$val" == 1 ]; then
+ exit 0
+ fi
+
+ gpioset --hold-period 50ms -t0 power-chassis-control0=0
+ gpioset --hold-period 50ms -t0 power-chassis-control1=0
+
+ #Record IPMI power cycle SEL
+ busctl call xyz.openbmc_project.Logging.IPMI \
+ /xyz/openbmc_project/Logging/IPMI \
+ xyz.openbmc_project.Logging.IPMI IpmiSelAdd ssaybq \
+ "Power Cycle" "/xyz/openbmc_project/state/host0" \
+ 3 0x01 0xff 0xff true 0x0020
+}
+
+if [ "$1" == "on" ]; then
+ set_gpio_power_on
+elif [ "$1" == "off" ]; then
+ wait_graceful_off
+ set_gpio_power_off
+elif [ "$1" == "forceoff" ]; then
+ set_gpio_power_off
+else
+ echo "Invalid parameter"
+ usage
+fi
+exit 0
diff --git a/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/host-control b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/host-control
new file mode 100644
index 0000000000..bec4a176b7
--- /dev/null
+++ b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/host-control
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+# Usage of this utility
+usage() {
+ echo "Usage: $(basename "$0") [reset|gracefuloff]"
+}
+
+graceful_off() {
+ echo "Set GPIO to graceful shutdown Host"
+ gpioset --hold-period 50ms -t0 power-button=1
+ sleep 0.1
+ gpioset --hold-period 50ms -t0 power-button=0
+ gpioget power-button >/dev/null 2>&1
+}
+
+force_reset() {
+ echo "Set GPIO to reset Host"
+ gpioset --hold-period 50ms -t0 reset-button=0
+ sleep 0.1
+ gpioset --hold-period 50ms -t0 reset-button=1
+ gpioget reset-button >/dev/null 2>&1
+}
+
+if [ "$1" == "reset" ]; then
+ force_reset
+elif [ "$1" == "gracefuloff" ]; then
+ graceful_off
+else
+ echo "Invalid parameter"
+ usage
+fi
+exit 0
diff --git a/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-chassis-poweroff@.service b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-chassis-poweroff@.service
new file mode 100644
index 0000000000..92ad57094d
--- /dev/null
+++ b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-chassis-poweroff@.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=NCPLite Chassis Power Off
+Before=phosphor-wait-power-off@%i.service
+Conflicts=ncplite-chassis-poweron@%i.target
+
+[Service]
+Type=oneshot
+ExecStart=@SBINDIR@/chassis-control off
+ExecStartPost=/bin/sh -c "busctl call xyz.openbmc_project.Logging.IPMI \
+ /xyz/openbmc_project/Logging/IPMI \
+ xyz.openbmc_project.Logging.IPMI IpmiSelAdd ssaybq \
+ 'Power Off' '/xyz/openbmc_project/state/host0' \
+ 3 0x00 0xff 0xff true 0x0020"
+ExecStartPost=/bin/sleep 10
+SyslogIdentifier=chassis-control
diff --git a/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-chassis-poweron@.service b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-chassis-poweron@.service
new file mode 100644
index 0000000000..da2acd067f
--- /dev/null
+++ b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-chassis-poweron@.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=NCPLite Chassis Power on
+Before=phosphor-wait-power-on@%i.service
+After=obmc-power-start-pre@%i.target
+Conflicts=ncplite-chassis-poweroff@%i.target
+
+[Service]
+Type=oneshot
+ExecStart=@SBINDIR@/chassis-control on
+SyslogIdentifier=chassis-control
diff --git a/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-host-force-reset@.service b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-host-force-reset@.service
new file mode 100644
index 0000000000..7b002d2a6c
--- /dev/null
+++ b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-host-force-reset@.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=NCPLite Force Reset Host%i
+Wants=phosphor-reboot-host@%i.service
+Conflicts=obmc-chassis-poweroff@%i.target
+OnFailure=obmc-chassis-powerreset@%i.target
+
+[Service]
+RemainAfterExit=no
+Type=oneshot
+ExecStart=@SBINDIR@/host-control reset
+ExecStartPost=/bin/sh -c "busctl call xyz.openbmc_project.Logging.IPMI /xyz/openbmc_project/Logging/IPMI xyz.openbmc_project.Logging.IPMI IpmiSelAdd ssaybq 'Reset Button Pressed' '/xyz/openbmc_project/state/chassis0' 3 0x02 0xff 0xff true 0x0020"
+SyslogIdentifier=host-control
+
+[Install]
+WantedBy=obmc-host-force-warm-reboot@%i.target
diff --git a/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-host-off@.service b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-host-off@.service
new file mode 100644
index 0000000000..c10c20c69f
--- /dev/null
+++ b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager/ncplite-host-off@.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=NCPLite Host%i Off
+Before=obmc-chassis-hard-poweroff@%i.target
+Before=obmc-chassis-poweroff@%i.target
+Conflicts=obmc-host-startmin@%i.target
+OnFailure=obmc-chassis-poweroff@%i.target
+OnFailureJobMode=flush
+
+[Service]
+Type=oneshot
+ExecStart=@SBINDIR@/host-control gracefuloff
+ExecStartPost=/bin/sh -c "busctl call xyz.openbmc_project.Logging.IPMI \
+ /xyz/openbmc_project/Logging/IPMI \
+ xyz.openbmc_project.Logging.IPMI IpmiSelAdd ssaybq \
+ 'Power Button Pressed' '/xyz/openbmc_project/state/chassis0' \
+ 3 0x00 0xff 0xff true 0x0020"
diff --git a/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager_%.bbappend b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager_%.bbappend
new file mode 100644
index 0000000000..5d304e356c
--- /dev/null
+++ b/meta-ufispace/meta-ncplite/recipes-phosphor/state/phosphor-state-manager_%.bbappend
@@ -0,0 +1,81 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+DEPENDS += "gpioplus"
+DEPENDS += "systemd"
+
+EXTRA_OEMESON:append = " -Dhost-gpios=enabled"
+
+SRC_URI += " \
+ file://host-control \
+ file://chassis-control \
+ file://ncplite-chassis-poweroff@.service \
+ file://ncplite-chassis-poweron@.service \
+ file://ncplite-host-off@.service \
+ file://ncplite-host-force-reset@.service \
+ "
+
+RDEPENDS:${PN}:append = " bash"
+
+DBUS_PACKAGES:append = "${PN}-ncplite"
+PACKAGE_BEFORE_PN += "${PN}-ncplite"
+SYSTEMD_PACKAGES += "${PN}-ncplite"
+
+SYSTEMD_SERVICE:${PN}-ncplite += "ncplite-chassis-poweron@.service"
+SYSTEMD_SERVICE:${PN}-ncplite += "ncplite-chassis-poweroff@.service"
+SYSTEMD_SERVICE:${PN}-ncplite += "ncplite-host-off@.service"
+SYSTEMD_SERVICE:${PN}-ncplite += "ncplite-host-force-reset@.service"
+
+# Chassis power on
+CHASSIS_POWERON_SVC = "ncplite-chassis-poweron@.service"
+CHASSIS_POWERON_INSTMPL = "ncplite-chassis-poweron@{0}.service"
+CHASSIS_POWERON_TGTFMT = "obmc-chassis-poweron@{0}.target"
+CHASSIS_POWERON_FMT = "../${CHASSIS_POWERON_SVC}:${CHASSIS_POWERON_TGTFMT}.requires/${CHASSIS_POWERON_INSTMPL}"
+SYSTEMD_LINK:${PN}-ncplite += "${@compose_list_zip(d, 'CHASSIS_POWERON_FMT', 'OBMC_CHASSIS_INSTANCES')}"
+
+# Chassis power off
+CHASSIS_POWEROFF_SVC = "ncplite-chassis-poweroff@.service"
+CHASSIS_POWEROFF_INSTMPL = "ncplite-chassis-poweroff@{0}.service"
+CHASSIS_POWEROFF_TGTFMT = "obmc-chassis-poweroff@{0}.target"
+CHASSIS_POWEROFF_FMT = "../${CHASSIS_POWEROFF_SVC}:${CHASSIS_POWEROFF_TGTFMT}.requires/${CHASSIS_POWEROFF_INSTMPL}"
+SYSTEMD_LINK:${PN}-ncplite += "${@compose_list_zip(d, 'CHASSIS_POWEROFF_FMT', 'OBMC_CHASSIS_INSTANCES')}"
+
+# Host off
+HOST_OFF_SVC = "ncplite-host-off@.service"
+HOST_OFF_INSTMPL = "ncplite-host-off@{0}.service"
+HOST_OFF_TGTFMT = "obmc-host-shutdown@{0}.target"
+HOST_OFF_FMT = "../${HOST_OFF_SVC}:${HOST_OFF_TGTFMT}.requires/${HOST_OFF_INSTMPL}"
+SYSTEMD_LINK:${PN}-ncplite += "${@compose_list_zip(d, 'HOST_OFF_FMT', 'OBMC_HOST_INSTANCES')}"
+
+# Host force reboot
+HOST_FORCE_RESET_SVC = "ncplite-host-force-reset@.service"
+HOST_FORCE_RESET_INSTMPL = "ncplite-host-force-reset@{0}.service"
+HOST_FORCE_RESET_TGTFMT = "obmc-host-force-warm-reboot@{0}.target"
+HOST_FORCE_RESET_TARGET_FMT = "../${HOST_FORCE_RESET_SVC}:${HOST_FORCE_RESET_TGTFMT}.requires/${HOST_FORCE_RESET_INSTMPL}"
+SYSTEMD_LINK:${PN}-ncplite += "${@compose_list_zip(d, 'HOST_FORCE_RESET_TARGET_FMT', 'OBMC_HOST_INSTANCES')}"
+
+# Chassis hard power off require host off in our machine
+CHASSIS_HARD_POWEROFF_TGTFMT = "obmc-chassis-hard-poweroff@{0}.target"
+CHASSIS_HOST_OFF_FMT = "../${HOST_OFF_SVC}:${CHASSIS_HARD_POWEROFF_TGTFMT}.requires/${HOST_OFF_INSTMPL}"
+SYSTEMD_LINK:${PN}-ncplite += "${@compose_list_zip(d, 'CHASSIS_HOST_OFF_FMT', 'OBMC_CHASSIS_INSTANCES')}"
+
+do_install:append() {
+ install -d ${D}${sbindir}
+ install -m 0744 ${WORKDIR}/host-control ${D}${sbindir}/
+ install -m 0744 ${WORKDIR}/chassis-control ${D}${sbindir}/
+}
+
+FILES:${PN} += "${systemd_system_unitdir}/*"
+FILES:${PN}-host += "${bindir}/phosphor-host-condition-gpio"
+SYSTEMD_SERVICE:${PN}-host += "phosphor-host-condition-gpio@.service"
+
+pkg_postinst:${PN}-obmc-targets:prepend() {
+ mkdir -p $D$systemd_system_unitdir/multi-user.target.requires
+ LINK="$D$systemd_system_unitdir/multi-user.target.requires/phosphor-host-condition-gpio@0.service"
+ TARGET="../phosphor-host-condition-gpio@.service"
+ ln -s $TARGET $LINK
+}
+
+pkg_prerm:${PN}-obmc-targets:prepend() {
+ LINK="$D$systemd_system_unitdir/multi-user.target.requires/phosphor-host-condition-gpio@0.service"
+ rm $LINK
+}