summaryrefslogtreecommitdiff
path: root/meta-facebook
diff options
context:
space:
mode:
authorDelphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>2022-11-03 10:40:43 +0300
committerPatrick Williams <patrick@stwcx.xyz>2023-02-02 22:45:09 +0300
commit0528ecd60ca357896da8b993291ed7a725ef0102 (patch)
tree373b6d472690f2b0d9224db4d58582e7a6fee890 /meta-facebook
parenta576a59a677ee5af5fbc5304190e7d99853835c2 (diff)
downloadopenbmc-0528ecd60ca357896da8b993291ed7a725ef0102.tar.xz
meta-facebook: phosphor-state-manager: support host power reset and chassis power cycle
Summary: Add service and script to support host reset and chassis power cycle. Tested: Change property to trigger host and chassis target and check the power status. Change-Id: Ie21903f5bc5bbebeaf31153c52d1605cd35619a0 Signed-off-by: Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>
Diffstat (limited to 'meta-facebook')
-rw-r--r--meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-powercycle39
-rw-r--r--meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-powercycle@.service9
-rw-r--r--meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powerreset43
-rw-r--r--meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powerreset@.service9
-rw-r--r--meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd3
-rw-r--r--meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/sled-cycle.service9
-rw-r--r--meta-facebook/recipes-phosphor/state/phosphor-state-manager_%.bbappend20
7 files changed, 128 insertions, 4 deletions
diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-powercycle b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-powercycle
new file mode 100644
index 0000000000..6ae8c12823
--- /dev/null
+++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-powercycle
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+# Provide source directive to shellcheck.
+# shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd
+source /usr/libexec/power-cmd
+
+POWER_OK_SLOT=$(( $1+9 ))
+slot=$(( $1-1 ))
+OFFSET=$(( 0x9 + slot ))
+
+chassis-power-gpio-status()
+{
+ POWER_OK_SLOT=$(( $1+9 ))
+ if [ "$1" -le 4 ]
+ then
+ status=$(gpioget 0 $POWER_OK_SLOT)
+ if [ "$status" == 1 ]
+ then
+ i2cset -y $BUS_NUM $CPLD_PWR_CTRL_ADDR $OFFSET $POW_OFF_SLOT
+ sleep 10
+ fi
+ i2cset -y $BUS_NUM $CPLD_PWR_CTRL_ADDR $OFFSET $POW_ON_SLOT
+ exit 0;
+ fi
+ echo "invalid slot id"
+ exit 1;
+}
+
+chassisid=$1
+if [ "$chassisid" == 0 ]
+then
+ echo "Enter SLED-cycle"
+ result=$(i2cset -y $BUS_NUM $CPLD_PWR_CTRL_ADDR 0x2b 0x1)
+ echo "$result"
+else
+ echo "Enter slot$1 cycle"
+ chassis-power-gpio-status "$chassisid"
+fi
+
diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-powercycle@.service b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-powercycle@.service
new file mode 100644
index 0000000000..9c26915f97
--- /dev/null
+++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-powercycle@.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Chassis Power Cycle: %i
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/chassis-powercycle %i
+
+[Install]
+WantedBy=obmc-chassis-powercycle@%i.target
diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powerreset b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powerreset
new file mode 100644
index 0000000000..f08c1317d6
--- /dev/null
+++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powerreset
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+# Provide source directive to shellcheck.
+# shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd
+source /usr/libexec/power-cmd
+
+SLOT_ID=$(( $1-1 << 2 ))
+
+# Host Reboot
+host-reboot()
+{
+ for reset_cmd in "${reset_seq[@]}"
+ do
+ result="$(busctl call $SERVICE $OBJECT_PATH $INTERFACE sendRequest yyyyay $SLOT_ID $NETFN $LUN $CMD $DATA_LEN 0x01 0x42 0x01 0 "$reset_cmd")"
+ echo "$result"
+ if [ "$reset_cmd" == $POWER_BTN_LOW ]
+ then
+ sleep "$1"
+ fi
+ done
+ echo "Host Power Reset"
+ exit 0
+}
+
+# Check Host Response and Status
+check-response()
+{
+ response="$(busctl call $SERVICE $OBJECT_PATH $INTERFACE sendRequest yyyyay $SLOT_ID 0x38 $LUN 0x3 0x03 0x15 0xa0 0x00)"
+
+ result=$(echo "$response" | cut -d" " -f $PWRGD_SYS_PWROK_INDEX)
+ res="$(( "$result" & 0x80 ))"
+ pgood="$(( "$res" >> 7 ))"
+ if [ "$pgood" == $STATE_ON ]
+ then
+ host-reboot 1
+ exit 0;
+ else
+ echo "Host is Off"
+ exit 1;
+ fi
+}
+
+check-response
diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powerreset@.service b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powerreset@.service
new file mode 100644
index 0000000000..f999d127c7
--- /dev/null
+++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powerreset@.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Host Power Reset: %i
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/host-powerreset %i
+
+[Install]
+WantedBy=obmc-host-force-warm-reboot@%i.target
diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd
index e9c7ed7ce1..334798ca53 100644
--- a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd
+++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd
@@ -2,7 +2,10 @@
export POWER_BTN_HIGH=0xFF
export POWER_BTN_LOW=0xFE
+export RESET_BTN_HIGH=0xFF
+export RESET_BTN_LOW=0xFD
export power_seq=( "$POWER_BTN_HIGH" "$POWER_BTN_LOW" "$POWER_BTN_HIGH" )
+export reset_seq=( "$RESET_BTN_HIGH" "$RESET_BTN_LOW" "$RESET_BTN_HIGH")
export SERVICE="xyz.openbmc_project.Ipmi.Channel.Ipmb"
export OBJECT_PATH="/xyz/openbmc_project/Ipmi/Channel/Ipmb"
export INTERFACE="org.openbmc.Ipmb"
diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/sled-cycle.service b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/sled-cycle.service
new file mode 100644
index 0000000000..57b6bb6851
--- /dev/null
+++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/sled-cycle.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Sled Cycle
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/chassis-powercycle 0
+
+[Install]
+WantedBy=obmc-chassis-powercycle@0.target
diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager_%.bbappend b/meta-facebook/recipes-phosphor/state/phosphor-state-manager_%.bbappend
index 53f7f8ce6e..42c7117941 100644
--- a/meta-facebook/recipes-phosphor/state/phosphor-state-manager_%.bbappend
+++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager_%.bbappend
@@ -1,27 +1,37 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
-DEFAULT_TARGETS:append = " \
- obmc-chassis-poweron@{}.target.wants/chassis-poweron@{}.service \
- obmc-chassis-hard-poweroff@{}.target.wants/chassis-poweroff@{}.service \
+HOST_DEFAULT_TARGETS:append = " \
obmc-host-shutdown@{}.target.wants/host-poweroff@{}.service \
obmc-host-start@{}.target.wants/host-poweron@{}.service \
obmc-host-reboot@{}.target.wants/host-powercycle@{}.service \
+ obmc-host-force-warm-reboot@{}.target.wants/host-powerreset@{}.service \
"
-DEFAULT_TARGETS:remove = " \
+
+CHASSIS_DEFAULT_TARGETS:append = " \
+ obmc-chassis-poweron@{}.target.wants/chassis-poweron@{}.service \
+ obmc-chassis-hard-poweroff@{}.target.wants/chassis-poweroff@{}.service \
+ obmc-chassis-powercycle@{}.target.wants/chassis-powercycle@{}.service \
+"
+
+CHASSIS_DEFAULT_TARGETS:remove = " \
obmc-chassis-poweroff@{}.target.requires/obmc-powered-off@{}.service \
"
SRC_URI:append:greatlakes = " \
file://chassis-poweroff@.service \
file://chassis-poweron@.service \
+ file://chassis-powercycle@.service \
file://host-poweroff@.service \
file://host-poweron@.service \
file://host-powercycle@.service \
+ file://host-powerreset@.service \
file://chassis-poweroff \
file://chassis-poweron \
+ file://chassis-powercycle \
file://host-poweroff \
file://host-poweron \
file://host-powercycle \
+ file://host-powerreset \
file://power-cmd \
"
@@ -34,9 +44,11 @@ do_install:append:greatlakes() {
install -d ${D}${libexecdir}
install -m 0777 ${WORKDIR}/chassis-poweroff ${D}${libexecdir}/
install -m 0777 ${WORKDIR}/chassis-poweron ${D}${libexecdir}/
+ install -m 0777 ${WORKDIR}/chassis-powercycle ${D}${libexecdir}/
install -m 0777 ${WORKDIR}/host-poweroff ${D}${libexecdir}/
install -m 0777 ${WORKDIR}/host-poweron ${D}${libexecdir}/
install -m 0777 ${WORKDIR}/host-powercycle ${D}${libexecdir}/
+ install -m 0777 ${WORKDIR}/host-powerreset ${D}${libexecdir}/
install -m 0777 ${WORKDIR}/power-cmd ${D}${libexecdir}/
}
FILES:${PN} += " /lib/systemd/system/*.service"