diff options
author | Delphine CC Chiu <delphine_cc_chiu@wiwynn.com> | 2024-06-21 09:10:21 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2024-07-03 00:15:50 +0300 |
commit | cc6df074b89539d372a8596b92e87e2ecc1f7099 (patch) | |
tree | 22627999011ed548668eeb3af2141d37ba3a8666 | |
parent | e589135df1f0048ac641ee217541cf0a3353e8f6 (diff) | |
download | openbmc-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>
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" +} |