summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDelphine CC Chiu <delphine_cc_chiu@wiwynn.com>2024-06-21 09:10:21 +0300
committerPatrick Williams <patrick@stwcx.xyz>2024-07-03 00:15:50 +0300
commitcc6df074b89539d372a8596b92e87e2ecc1f7099 (patch)
tree22627999011ed548668eeb3af2141d37ba3a8666
parente589135df1f0048ac641ee217541cf0a3353e8f6 (diff)
downloadopenbmc-cc6df074b89539d372a8596b92e87e2ecc1f7099.tar.xz
meta-facebook: yosemite4: enhance power control
1. Add retry of gpioget/gpioset function since gpio control is mutual exclusive 2. Remove EID removal workaround. 3. Extend 12v cycle interval which let entity-manager have enough time to detect FRU removal. Change-Id: I736ea4cdac9ea9d27efa3c31f40be847be0c50a8 Signed-off-by: Delphine CC Chiu <delphine_cc_chiu@wiwynn.com>
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle14
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweroff6
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweron12
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-powercycle6
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-poweroff4
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-poweron6
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/host-powerreset2
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/power-cmd30
8 files changed, 54 insertions, 26 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 c13138f0a2..f31f3d4fe0 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
@@ -23,26 +23,24 @@ chassis-power-cycle()
if [ "$CHASSIS_ID" -le 8 ]
then
- chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS")
+ chassis_status=$(gpio_get "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS")
if [ "$chassis_status" == "$STATE_ON" ]
then
- busctl call xyz.openbmc_project.MCTP "/xyz/openbmc_project/mctp/1/${CHASSIS_ID}0" au.com.CodeConstruct.MCTP.Endpoint Remove
- busctl call xyz.openbmc_project.MCTP "/xyz/openbmc_project/mctp/1/${CHASSIS_ID}2" au.com.CodeConstruct.MCTP.Endpoint Remove
sleep 1
- if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=1
+ if ! gpio_set "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=1
then
echo "Failed to set slot$1 power off"
fi
- sleep 10
+ sleep 20
fi
- if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=0
+ if ! gpio_set "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=0
then
echo "Failed to set slot$1 power on"
fi
sleep 2
# Check chassis status after doing 12V cycle
- chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS")
+ chassis_status=$(gpio_get "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS")
if [ "$chassis_status" == "$STATE_ON" ]
then
busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_ON_PROPERTY"
@@ -62,7 +60,7 @@ chassis-power-cycle()
if [ "$1" == 0 ]
then
echo "Starting sled cycle..."
- if ! gpioset "$GPIOCHIP_IO_EXP_SLED_PWR_CTRL" "$IO_EXP_SLED_CYCLE"=1
+ if ! gpio_set "$GPIOCHIP_IO_EXP_SLED_PWR_CTRL" "$IO_EXP_SLED_CYCLE"=1
then
echo "Failed to do sled cycle"
fi
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 2f9b550d1e..615c68e27c 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
@@ -21,14 +21,14 @@ chassis-power-off()
busctl call xyz.openbmc_project.MCTP "/xyz/openbmc_project/mctp/1/${CHASSIS_ID}0" au.com.CodeConstruct.MCTP.Endpoint Remove
busctl call xyz.openbmc_project.MCTP "/xyz/openbmc_project/mctp/1/${CHASSIS_ID}2" au.com.CodeConstruct.MCTP.Endpoint Remove
sleep 1
- if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=1
+ if ! gpio_set "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=1
then
echo "Failed to set slot$1 power off"
fi
sleep 1
# Check chassis status after doing 12V off
- chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS")
+ chassis_status=$(gpio_get "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS")
if [ "$chassis_status" == "$STATE_OFF" ]
then
busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_OFF_PROPERTY"
@@ -40,7 +40,7 @@ chassis-power-off()
fi
}
-if ! chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS"); then
+if ! chassis_status=$(gpio_get "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS"); then
echo "Failed to get chassis status"
exit 1
fi
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 3a1584f99d..fd9860c9c5 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
@@ -17,26 +17,26 @@ IO_EXP_SLOT_PWR_CTRL=$((IO_EXP_SLOT_PWR_STATUS + 8))
# Server 12v power on
chassis-power-on()
{
- if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=0
+ if ! gpio_set "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=0
then
echo "Failed to set slot$1 power on"
fi
sleep 1
# Check chassis status after doing 12V on
- chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS")
+ chassis_status=$(gpio_get "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS")
if [ "$chassis_status" == "$STATE_ON" ]
then
busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_ON_PROPERTY"
- echo "Chassis is power on"
+ echo "Chassis$1 is power on"
else
busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_OFF_PROPERTY"
- echo "Chassis is power off"
+ echo "Chassis$1 is power off"
exit 0;
fi
}
-if ! chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS"); then
+if ! chassis_status=$(gpio_get "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS"); then
echo "Failed to get chassis status"
exit 1
fi
@@ -47,6 +47,6 @@ then
/usr/libexec/phosphor-state-manager/wait-until-mctp-connection-done "$CHASSIS_ID" && systemctl restart "phosphor-discover-system-state@$CHASSIS_ID.service"
exit 0;
else
- echo "Chassis is already on"
+ echo "Chassis$1 is already on"
exit 0;
fi
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 29067327c2..517e08f7d3 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
@@ -14,7 +14,7 @@ GPIOCHIP_IO_EXP_HOST_POWER_STATUS=$(basename "/sys/bus/i2c/devices/$CHASSIS_BUS-
EID=$((CHASSIS_ID * 10))
get_host_status() {
- if ! host_status=$(gpioget "$GPIOCHIP_IO_EXP_HOST_POWER_STATUS" "$IO_EXP_P0_PWRGD_R_OUT"); then
+ if ! host_status=$(gpio_get "$GPIOCHIP_IO_EXP_HOST_POWER_STATUS" "$IO_EXP_P0_PWRGD_R_OUT"); then
echo "Failed to get host status"
exit 1
fi
@@ -53,5 +53,5 @@ if [ "$host_status" != "$STATE_ON" ]; then
fi
fi
-echo "Host power cycle success"
-exit 0; \ No newline at end of file
+echo "Host$1 power cycle success"
+exit 0;
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 7592f20958..12492d2457 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
@@ -11,7 +11,7 @@ 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
+ if ! host_status=$(gpio_get "$GPIOCHIP_IO_EXP_HOST_POWER_STATUS" "$IO_EXP_P0_PWRGD_R_OUT"); then
echo "Failed to get host status"
exit 1
fi
@@ -43,7 +43,7 @@ get_host_status
if [ "$host_status" == "$STATE_OFF" ]
then
- echo "Host power off success"
+ echo "Host$1 power off success"
exit 0;
else
echo "Failed to set host$1 power off"
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 bdaa0ebfd8..9f84809614 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
@@ -10,7 +10,7 @@ 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
+ if ! host_status=$(gpio_get "$GPIOCHIP_IO_EXP_HOST_POWER_STATUS" "$IO_EXP_P0_PWRGD_R_OUT"); then
echo "Failed to get host status"
exit 1
fi
@@ -20,7 +20,7 @@ get_host_status
if [ "$host_status" == "$STATE_ON" ]
then
- echo "Already host power on."
+ echo "Already host$1 power on."
exit 0;
fi
@@ -45,7 +45,7 @@ get_host_status
if [ "$host_status" == "$STATE_ON" ]
then
- echo "Host power on success"
+ echo "Host$1 power on success"
exit 0;
else
echo "Failed to set host$1 power on"
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 8829f366d2..082fbbd912 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
@@ -13,5 +13,5 @@ if ! pldmtool raw -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x04 -m "$EID"
then
echo "Failed to set host$1 power reset"
else
- echo "Host is power reset"
+ echo "Host$1 is power reset"
fi
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/power-cmd b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/power-cmd
index abba9235d2..2ac98c4d37 100644
--- a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/power-cmd
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/power-cmd
@@ -14,3 +14,33 @@ export CHASSIS_INTF_NAME="xyz.openbmc_project.State.Chassis"
export CHASSIS_PROPERTY_NAME="CurrentPowerState"
export CHASSIS_ON_PROPERTY="xyz.openbmc_project.State.Chassis.PowerState.On"
export CHASSIS_OFF_PROPERTY="xyz.openbmc_project.State.Chassis.PowerState.Off"
+
+gpio_get()
+{
+ RETRY=3
+ while [ $RETRY -gt 0 ]
+ do
+ if gpioget "$1" "$2"
+ then
+ return 0
+ fi
+ RETRY=$((RETRY-1))
+ sleep 0.5
+ done
+ echo "gpioget failed"
+}
+
+gpio_set()
+{
+ RETRY=3
+ while [ $RETRY -gt 0 ]
+ do
+ if gpioset "$1" "$2"
+ then
+ return 0
+ fi
+ RETRY=$((RETRY-1))
+ sleep 0.5
+ done
+ echo "gpioset failed"
+}