summaryrefslogtreecommitdiff
path: root/meta-facebook/meta-harma
diff options
context:
space:
mode:
authorPeter Yin <peter.yin@quantatw.com>2023-12-06 13:17:31 +0300
committerPatrick Williams <patrick@stwcx.xyz>2024-01-04 17:32:49 +0300
commit42e7aff560c16d22a9d5e6d84f2d37432b937c29 (patch)
tree747f8e226a92b2b934f2bc32c7da93c3d15869c1 /meta-facebook/meta-harma
parent6c79cf784ee2388dd236a6672f851041500613bf (diff)
downloadopenbmc-42e7aff560c16d22a9d5e6d84f2d37432b937c29.tar.xz
meta-facebook: harma: power control support
To support power on, power off, power-cycle reset and sled-cycle. Change-Id: Ib26fbe7087d7ab2b68c61d46a7dcf3ab5f7847b0 Signed-off-by: Peter Yin <peter.yin@quantatw.com>
Diffstat (limited to 'meta-facebook/meta-harma')
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle28
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle@.service9
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/discover-sys-init.conf3
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powercycle8
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powercycle@.service9
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweroff5
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweroff@.service9
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweron12
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweron@.service9
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powerreset5
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powerreset@.service9
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/phosphor-state-manager-init10
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/phosphor-state-manager-init.conf3
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd57
-rw-r--r--meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager_%.bbappend57
15 files changed, 233 insertions, 0 deletions
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle
new file mode 100644
index 0000000000..295982dc56
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+# shellcheck source=meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd
+source /usr/libexec/phosphor-state-manager/power-cmd
+
+#Sled cycle
+echo "Starting Chassis Power Cycle"
+# LTC4287 MFR_REBOOT_CONTROL (FDh) Read/Write
+# [3]:
+# REBOOT 0 Write a 1 to reboot.
+# [2:0]
+# RBT_DL 100 Configures Auto-Reboot turn-on Delay (tDL(RBT)) after the REBOOT bit is set to 1
+# RBT_DL[2:0] DELAY
+# 000 0.580 s
+# 001 1.16 s
+# 010 2.32 s
+# 011 4.64 s
+# 100 9.28 s
+# 101 18.6 s
+# 110 37.1 s
+# 111 74.2 s
+ltc4287-chassis-power-cycle() {
+ i2cset -f -y 4 0x44 0xfd 0x04
+ i2cset -f -y 4 0x44 0xfd 0x0e
+}
+
+echo "Starting Chassis Power Cycle"
+ltc4287-chassis-power-cycle
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle@.service b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle@.service
new file mode 100644
index 0000000000..a8a110e4d1
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle@.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Chassis Power Cycle: %i
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-state-manager/chassis-powercycle %i
+
+[Install]
+WantedBy=obmc-chassis-powercycle@%i.target
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/discover-sys-init.conf b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/discover-sys-init.conf
new file mode 100644
index 0000000000..5bd96e0750
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/discover-sys-init.conf
@@ -0,0 +1,3 @@
+[Unit]
+Wants=muti-gpios-sys-init.service
+After=muti-gpios-sys-init.service
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powercycle b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powercycle
new file mode 100644
index 0000000000..6d41abaf10
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powercycle
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# shellcheck source=meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd
+source /usr/libexec/phosphor-state-manager/power-cmd
+
+power_off
+sleep 10
+power_on
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powercycle@.service b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powercycle@.service
new file mode 100644
index 0000000000..f45e71f8fe
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powercycle@.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Host Power Cycle: %i
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-state-manager/host-powercycle %i
+
+[Install]
+WantedBy=obmc-host-reboot@%i.target
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweroff b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweroff
new file mode 100644
index 0000000000..506879e96e
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweroff
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+# shellcheck source=meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd
+source /usr/libexec/phosphor-state-manager/power-cmd
+power_off
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweroff@.service b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweroff@.service
new file mode 100644
index 0000000000..3ead57e051
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweroff@.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=power off host:%i
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-state-manager/host-poweroff %i
+
+[Install]
+WantedBy=obmc-host-shutdown@%i.target
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweron b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweron
new file mode 100644
index 0000000000..25f6d31924
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweron
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# shellcheck source=meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd
+source /usr/libexec/phosphor-state-manager/power-cmd
+
+power_on
+st=$?
+
+if [ "$st" -ne 0 ]; then
+ exit 1
+fi
+exit 0
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweron@.service b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweron@.service
new file mode 100644
index 0000000000..38f0879caa
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweron@.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=power on host:%i
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-state-manager/host-poweron %i
+
+[Install]
+RequiredBy=obmc-host-startmin@%i.target
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powerreset b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powerreset
new file mode 100644
index 0000000000..bd3a3fd84d
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powerreset
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+# shellcheck source=meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd
+source /usr/libexec/phosphor-state-manager/power-cmd
+power_reset
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powerreset@.service b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powerreset@.service
new file mode 100644
index 0000000000..0fd059ce16
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-powerreset@.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Host Power Reset: %i
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-state-manager/host-powerreset %i
+
+[Install]
+WantedBy=obmc-host-force-warm-reboot@%i.target
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/phosphor-state-manager-init b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/phosphor-state-manager-init
new file mode 100644
index 0000000000..3796273b08
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/phosphor-state-manager-init
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+# Create /dev/mem
+if [ ! -c /dev/mem ]; then
+ /bin/mknod /dev/mem c 1 1
+fi
+
+devmem 0x1e6ee000 32 0xff00ba55
+devmem 0x1e6e2454 32 0xaa000000
+devmem 0x1e6e2094 32 0x00000003
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/phosphor-state-manager-init.conf b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/phosphor-state-manager-init.conf
new file mode 100644
index 0000000000..28a586679b
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/phosphor-state-manager-init.conf
@@ -0,0 +1,3 @@
+[Service]
+ExecStartPre=/usr/libexec/phosphor-state-manager/phosphor-state-manager-init
+
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd
new file mode 100644
index 0000000000..c1b9a379c5
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+# shellcheck source=meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions
+source /usr/libexec/fb-common-functions
+
+# Power Good Status
+power_status() {
+ if [ "$(get_gpio "power-cpu-good")" -eq 1 ]; then
+ echo "on"
+ else
+ echo "off"
+ fi
+}
+
+# DC off
+power_off() {
+ if [ "$(power_status)" == "on" ]; then
+ echo "Set Host Power Off"
+ set_gpio power-host-control 0
+ sleep 6
+ set_gpio power-host-control 1
+ sleep 1
+ fi
+}
+
+# DC on
+power_on() {
+ if [ "$(power_status)" == "off" ]; then
+ set_gpio power-host-control 0
+ sleep 1
+ set_gpio power-host-control 1
+ sleep 1
+ fi
+
+ for i in $(seq 1 10)
+ do
+ if [ "$(power_status)" == "on" ]; then
+
+ echo "Set Host Power On"
+ return 0
+ fi
+
+ if [ "$i" -eq 10 ]; then
+ echo "Set Host Power On Fail"
+ return 1
+ fi
+ done
+}
+
+# Host reset
+power_reset() {
+ echo "Set Host Reset"
+ set_gpio reset-control 0
+ sleep 1
+ set_gpio reset-control 1
+ sleep 1
+}
diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager_%.bbappend b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager_%.bbappend
new file mode 100644
index 0000000000..23a94d9fe7
--- /dev/null
+++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager_%.bbappend
@@ -0,0 +1,57 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+PACKAGECONFIG:remove = "no-warm-reboot"
+
+CHASSIS_DEFAULT_TARGETS:remove:harma = " \
+ obmc-chassis-powerreset@{}.target.requires/phosphor-reset-chassis-on@{}.service \
+ obmc-chassis-powerreset@{}.target.requires/phosphor-reset-chassis-running@{}.service \
+ obmc-chassis-poweroff@{}.target.requires/obmc-power-stop@{}.service \
+ obmc-chassis-poweron@{}.target.requires/obmc-power-start@{}.service \
+ "
+
+CHASSIS_DEFAULT_TARGETS:append:harma = " \
+ obmc-chassis-hard-poweroff@{}.target.wants/host-poweroff@0.service \
+ "
+
+HOST_DEFAULT_TARGETS:remove:harma = " \
+ obmc-host-start@{}.target.wants/host-poweron@{}.service \
+"
+
+HOST_DEFAULT_TARGETS:append:harma = " \
+ obmc-host-startmin@{}.target.requires/host-poweron@{}.service \
+"
+
+SRC_URI:append:harma = " \
+ file://chassis-powercycle@.service \
+ file://host-poweroff@.service \
+ file://host-poweron@.service \
+ file://host-powercycle@.service \
+ file://host-powerreset@.service \
+ file://chassis-powercycle \
+ file://host-poweroff \
+ file://host-poweron \
+ file://host-powercycle \
+ file://host-powerreset \
+ file://power-cmd \
+ file://discover-sys-init.conf \
+ file://phosphor-state-manager-init \
+ file://phosphor-state-manager-init.conf \
+ "
+
+RDEPENDS:${PN}:append:harma = " bash"
+
+do_install:append:harma() {
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/*.service ${D}${systemd_system_unitdir}/
+
+ install -d ${D}${libexecdir}/${PN}
+ install -m 0777 ${WORKDIR}/chassis-powercycle ${D}${libexecdir}/${PN}/
+ install -m 0777 ${WORKDIR}/host-poweroff ${D}${libexecdir}/${PN}/
+ install -m 0777 ${WORKDIR}/host-poweron ${D}${libexecdir}/${PN}/
+ install -m 0777 ${WORKDIR}/host-powercycle ${D}${libexecdir}/${PN}/
+ install -m 0777 ${WORKDIR}/host-powerreset ${D}${libexecdir}/${PN}/
+ install -m 0777 ${WORKDIR}/power-cmd ${D}${libexecdir}/${PN}/
+ install -m 0777 ${WORKDIR}/phosphor-state-manager-init ${D}${libexecdir}/${PN}/
+}
+SYSTEMD_OVERRIDE:${PN}-discover:harma += "discover-sys-init.conf:phosphor-discover-system-state@0.service.d/discover-sys-init.conf"
+SYSTEMD_OVERRIDE:${PN}-systemd-target-monitor:harma += "phosphor-state-manager-init.conf:phosphor-systemd-target-monitor.service.d/phosphor-state-manager-init.conf"