summaryrefslogtreecommitdiff
path: root/meta-facebook/meta-yosemite4/recipes-phosphor
diff options
context:
space:
mode:
authorDelphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>2024-05-21 10:37:50 +0300
committerPatrick Williams <patrick@stwcx.xyz>2024-06-13 01:25:42 +0300
commit3f547b499565f05af25671acaea8ee7d68525fba (patch)
treeb8d57c48cab6e5afa04419e9f8550c0369f8e1ac /meta-facebook/meta-yosemite4/recipes-phosphor
parent643aef15e49187aa047696c68c3499073da3582c (diff)
downloadopenbmc-3f547b499565f05af25671acaea8ee7d68525fba.tar.xz
meta-facebook: yosemite4: Add Power Control Status Check
Implement pre-operation and post-operation status checks for each power control action. Change the power cycle behavior to do host on and off on BMC side, so that each power operation can be checked. Change-Id: Ib59626ed35965e852bd5ce8c4b776711872bc656 Signed-off-by: Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>
Diffstat (limited to 'meta-facebook/meta-yosemite4/recipes-phosphor')
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle2
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweroff8
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweron8
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-powercycle58
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-poweroff44
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-poweron49
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-powerreset2
7 files changed, 144 insertions, 27 deletions
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle
index 3bd56521f7..3c45acc70d 100644
--- a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle
@@ -3,7 +3,7 @@
# shellcheck disable=SC2120
# Provide source directive to shellcheck.
-# shellcheck source=meta-facebook/meta-greatlakes/recipes-phosphor/state/phosphor-state-manager/power-cmd
+# shellcheck source=meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/power-cmd
source /usr/libexec/phosphor-state-manager/power-cmd
#IO 0:7 input port for showing slot 1:8 power status
#IO 8:16 output port for controlling slot 1:8 power status
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweroff b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweroff
index d6971eafd9..77122c054e 100644
--- a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweroff
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweroff
@@ -3,7 +3,7 @@
# shellcheck disable=SC2120
# Provide source directive to shellcheck.
-# shellcheck source=meta-facebook/meta-greatlakes/recipes-phosphor/state/phosphor-state-manager/power-cmd
+# shellcheck source=meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/power-cmd
source /usr/libexec/phosphor-state-manager/power-cmd
#IO 0:7 input port for showing slot 1:8 power status
#IO 8:16 output port for controlling slot 1:8 power status
@@ -42,7 +42,11 @@ chassis-power-off()
fi
}
-chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS")
+if ! chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS"); then
+ echo "Failed to get chassis status"
+ exit 1
+fi
+
if [ "$chassis_status" == "$STATE_ON" ]
then
chassis-power-off
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweron b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweron
index 511b3f147d..3a1584f99d 100644
--- a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweron
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweron
@@ -3,7 +3,7 @@
# shellcheck disable=SC2120
# Provide source directive to shellcheck.
-# shellcheck source=meta-facebook/meta-greatlakes/recipes-phosphor/state/phosphor-state-manager/power-cmd
+# shellcheck source=meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/power-cmd
source /usr/libexec/phosphor-state-manager/power-cmd
GPIOCHIP_IO_EXP_SLOT_PWR_CTRL=$(basename "/sys/bus/i2c/devices/$SPIDER_BOARD_IO_EXP_BUS_NUM-00$IO_EXP_SLOT_PWR_CTRL_ADDR/"*gpiochip*)
@@ -36,7 +36,11 @@ chassis-power-on()
fi
}
-chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS")
+if ! chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS"); then
+ echo "Failed to get chassis status"
+ exit 1
+fi
+
if [ "$chassis_status" == "$STATE_OFF" ]
then
chassis-power-on
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-powercycle b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-powercycle
index bc28548f18..29067327c2 100644
--- a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-powercycle
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-powercycle
@@ -3,15 +3,55 @@
# shellcheck disable=SC2120
# Provide source directive to shellcheck.
-# shellcheck source=meta-facebook/meta-greatlakes/recipes-phosphor/state/phosphor-state-manager/power-cmd
+# shellcheck source=meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/power-cmd
source /usr/libexec/phosphor-state-manager/power-cmd
+CHASSIS_ID=$1
-# TODO: check power status before do power cycle
-# Set state effecter state: Entity ID 0x0000 for host power control, 0x3 for power cycle
-EID=$(($1*10))
-if ! pldmtool raw -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x03 -m "$EID"
-then
- echo "Failed to set host$1 power cycle"
-else
- echo "Host is power cycle"
+CHASSIS_BUS=$((CHASSIS_ID - 1))
+IO_EXP_P0_PWRGD_R_OUT=18
+GPIOCHIP_IO_EXP_HOST_POWER_STATUS=$(basename "/sys/bus/i2c/devices/$CHASSIS_BUS-0023/"*gpiochip*)
+
+EID=$((CHASSIS_ID * 10))
+
+get_host_status() {
+ if ! host_status=$(gpioget "$GPIOCHIP_IO_EXP_HOST_POWER_STATUS" "$IO_EXP_P0_PWRGD_R_OUT"); then
+ echo "Failed to get host status"
+ exit 1
+ fi
+}
+
+# Get initial host status
+get_host_status
+
+# Current power is ON, cycle do OFF to ON. If current power is OFF then do ON
+if [ "$host_status" == "$STATE_ON" ]; then
+ # Set state effecter state: Entity ID 0x0000 for host power control, 0x2 for power off
+ pldmtool raw -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x02 -m "$EID"
+ # Wait for the host to power off
+ sleep 10s
+
+ # Get host status again after attempting to power off
+ get_host_status
+
+ if [ "$host_status" != "$STATE_OFF" ]; then
+ echo "Do power cycle fail, fail to set host$CHASSIS_ID power off"
+ exit 1
+ fi
fi
+
+if [ "$host_status" != "$STATE_ON" ]; then
+ # Set state effecter state: Entity ID 0x0000 for host power control, 0x1 for power on
+ pldmtool raw -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x01 -m "$EID"
+ sleep 2s
+
+ # Get host status again after attempting to power on
+ get_host_status
+
+ if [ "$host_status" != "$STATE_ON" ]; then
+ echo "Do power cycle, failed to set host$CHASSIS_ID power on"
+ exit 1
+ fi
+fi
+
+echo "Host power cycle success"
+exit 0; \ No newline at end of file
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-poweroff b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-poweroff
index 214c6beee6..7592f20958 100644
--- a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-poweroff
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-poweroff
@@ -3,15 +3,49 @@
# shellcheck disable=SC2120
# Provide source directive to shellcheck.
-# shellcheck source=meta-facebook/meta-greatlakes/recipes-phosphor/state/phosphor-state-manager/power-cmd
+# shellcheck source=meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/power-cmd
source /usr/libexec/phosphor-state-manager/power-cmd
-# TODO: check power status before do power off
+CHASSIS_BUS=$(($1 - 1))
+IO_EXP_P0_PWRGD_R_OUT=18
+GPIOCHIP_IO_EXP_HOST_POWER_STATUS=$(basename "/sys/bus/i2c/devices/$CHASSIS_BUS-0023/"*gpiochip*)
+
+get_host_status() {
+ if ! host_status=$(gpioget "$GPIOCHIP_IO_EXP_HOST_POWER_STATUS" "$IO_EXP_P0_PWRGD_R_OUT"); then
+ echo "Failed to get host status"
+ exit 1
+ fi
+}
+
+get_host_status
+
+if [ "$host_status" == "$STATE_OFF" ]
+then
+ echo "Already host power off."
+ exit 0;
+fi
+
# Set state effecter state: Entity ID 0x0000 for host power control, 0x2 for power off
EID=$(($1*10))
-if ! pldmtool raw -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x02 -m "$EID"
+pldmtool raw -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x02 -m "$EID"
+
+# Host power off will trigger the BIC to configure the server board CPLD register and set the power sequence.
+# Power Sequence:
+# - Set PLAT_PLDM_HOST_PWR_CTRL_DEFAULT to 0xFF
+# - Set PLAT_PLDM_HOST_PWR_BTN_LOW to 0xFE
+# - Sleep for 6 seconds
+# - Set PLAT_PLDM_HOST_PWR_CTRL_DEFAULT back to 0xFF
+
+# Wait for the host to power off
+sleep 10s
+
+get_host_status
+
+if [ "$host_status" == "$STATE_OFF" ]
then
- echo "Failed to set host$1 power off"
+ echo "Host power off success"
+ exit 0;
else
- echo "Host is power off"
+ echo "Failed to set host$1 power off"
+ exit 1
fi
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-poweron b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-poweron
index 82019a841a..bdaa0ebfd8 100644
--- a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-poweron
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-poweron
@@ -1,18 +1,53 @@
#!/bin/bash
# Provide source directive to shellcheck.
-# shellcheck source=meta-facebook/meta-greatlakes/recipes-phosphor/state/phosphor-state-manager/power-cmd
-CHASSIS_ID=$1
+# shellcheck source=meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/power-cmd
source /usr/libexec/phosphor-state-manager/power-cmd
+CHASSIS_ID=$1
-# TODO: check power status before do power on
-# Set state effecter state: Entity ID 0x0000 for host power control, 0x1 for power on
+CHASSIS_BUS=$(($1 - 1))
+IO_EXP_P0_PWRGD_R_OUT=18
+GPIOCHIP_IO_EXP_HOST_POWER_STATUS=$(basename "/sys/bus/i2c/devices/$CHASSIS_BUS-0023/"*gpiochip*)
+
+get_host_status() {
+ if ! host_status=$(gpioget "$GPIOCHIP_IO_EXP_HOST_POWER_STATUS" "$IO_EXP_P0_PWRGD_R_OUT"); then
+ echo "Failed to get host status"
+ exit 1
+ fi
+}
+
+get_host_status
+
+if [ "$host_status" == "$STATE_ON" ]
+then
+ echo "Already host power on."
+ exit 0;
+fi
+
+# Need to ensure that the mctp connection is complete so that pldmtool can set up successfully.
/usr/libexec/phosphor-state-manager/wait-until-mctp-connection-done "$CHASSIS_ID"
+# Set state effecter state: Entity ID 0x0000 for host power control, 0x1 for power on
EID=$(($1*10))
-if ! pldmtool raw -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x01 -m "$EID"
+pldmtool raw -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x01 -m "$EID"
+
+# Host power ON will trigger the BIC to configure the server board CPLD register and set the power sequence.
+# Power Sequence:
+# - Set PLAT_PLDM_HOST_PWR_CTRL_DEFAULT to 0xFF
+# - Set PLAT_PLDM_HOST_PWR_BTN_LOW to 0xFE
+# - Sleep for 1 second
+# - Set PLAT_PLDM_HOST_PWR_CTRL_DEFAULT back to 0xFF
+
+# Wait for the host to power on
+sleep 2s
+
+get_host_status
+
+if [ "$host_status" == "$STATE_ON" ]
then
- echo "Failed to set host$1 power on"
+ echo "Host power on success"
+ exit 0;
else
- echo "Host is power on"
+ echo "Failed to set host$1 power on"
+ exit 1
fi
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-powerreset b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-powerreset
index 700edd73d7..8829f366d2 100644
--- a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-powerreset
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-powerreset
@@ -3,7 +3,7 @@
# shellcheck disable=SC2120
# Provide source directive to shellcheck.
-# shellcheck source=meta-facebook/meta-greatlakes/recipes-phosphor/state/phosphor-state-manager/power-cmd
+# shellcheck source=meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/power-cmd
source /usr/libexec/phosphor-state-manager/power-cmd
# TODO: check power status before do power reset