diff options
author | Peter Yin <peter.yin@quantatw.com> | 2023-12-06 13:17:31 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2024-01-04 17:32:49 +0300 |
commit | 42e7aff560c16d22a9d5e6d84f2d37432b937c29 (patch) | |
tree | 747f8e226a92b2b934f2bc32c7da93c3d15869c1 /meta-facebook/meta-harma | |
parent | 6c79cf784ee2388dd236a6672f851041500613bf (diff) | |
download | openbmc-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')
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" |