diff options
author | Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com> | 2023-08-22 12:09:25 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2023-10-12 22:11:59 +0300 |
commit | 94e158308f6abbaaa52a78d3e8d7c39bfe27719b (patch) | |
tree | 8ce10ad62dfb8a0b6b8fced19ea837eb5076bebc | |
parent | 8fc47a6e2730f04f7954197576112dace1d4ba70 (diff) | |
download | openbmc-94e158308f6abbaaa52a78d3e8d7c39bfe27719b.tar.xz |
meta-facebook: yosemite4: Support sled power cycle
Description:
- Support sled power cycle
- Revise 12v power control and host power control
Design:
- Add sled power cycle action as chassis 0 by setting virtual i/o exp output port.
- Revise gpio setting and command parameter for 12v power control and host power control.
Test Case:
- Set sled cycle by phosphor-state-manager: pass
- Set 12V on/off/cycle by phosphor-state-manager: pass
- Set host on/off/cycle/reset by phosphor-state-manager: pass
Test Log:
root@yosemite4:~# busctl set-property xyz.openbmc_project.State.Chassis0 /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis RequestedPowerTransition s "xyz.openbmc_project.State.Chassis.Transition.PowerCycle"
root@yosemite4:~# journalctl --since "20 second ago"
Jul 28 07:03:44 yosemite4 phosphor-chassis-state-manager[349]: Change to Chassis Requested Power State: xyz.openbmc_project.State.Chassis.Transition.PowerCycle
Jul 28 07:03:44 yosemite4 systemd[1]: Created slice Slice /system/chassis-powercycle.
Jul 28 07:03:44 yosemite4 systemd[1]: Starting Chassis Power Cycle: 0...
Jul 28 07:03:45 yosemite4 chassis-powercycle[661]: Starting sled cycle...
Change-Id: I6cdb26a2fd8d4d445ca41302d070a369a40c79dd
Signed-off-by: Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>
8 files changed, 23 insertions, 18 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 27e83a99c8..0db82ced96 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 @@ -6,13 +6,15 @@ # shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd source /usr/libexec/phosphor-state-manager/power-cmd -GPIOCHIP_IO_EXP_SLOT_PWR_CTRL=$(basename "/sys/bus/i2c/devices/$MEDUSA_IO_EXP_BUS_NUM-00$IO_EXP_SLOT_PWR_CTRL_ADDR/"*gpiochip*) +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*) +GPIOCHIP_IO_EXP_SLED_PWR_CTRL=$(basename "/sys/bus/i2c/devices/$MANAGEMENT_BOARD_IO_EXP_BUS_NUM-00$IO_EXP_SLED_PWR_CTRL_ADDR/"*gpiochip*) #IO 0:7 input port for showing slot 1:8 power status #IO 8:16 output port for controlling slot 1:8 power status CHASSIS_ID=$1 IO_EXP_SLOT_PWR_STATUS=$((CHASSIS_ID - 1)) IO_EXP_SLOT_PWR_CTRL=$((IO_EXP_SLOT_PWR_STATUS + 8)) +IO_EXP_SLED_CYCLE=12 chassis-power-cycle() { @@ -23,13 +25,13 @@ chassis-power-cycle() chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS") if [ "$chassis_status" == "$STATE_ON" ] then - if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=0 + if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=1 then echo "Failed to set slot$1 power off" fi sleep 10 fi - if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=1 + if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=0 then echo "Failed to set slot$1 power on" fi @@ -53,8 +55,11 @@ chassis-power-cycle() if [ "$1" == 0 ] then - # TODO: SLED cycle - echo "SLED-cycle is not support for now" + echo "Starting sled cycle..." + if ! gpioset "$GPIOCHIP_IO_EXP_SLED_PWR_CTRL" "$IO_EXP_SLED_CYCLE"=1 + then + echo "Failed to do sled cycle" + fi else echo "Starting slot$1 cycle" chassis-power-cycle "$1" 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 3e1dd3ca37..991dbc5dc2 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 @@ -6,7 +6,7 @@ # shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd source /usr/libexec/phosphor-state-manager/power-cmd -GPIOCHIP_IO_EXP_SLOT_PWR_CTRL=$(basename "/sys/bus/i2c/devices/$MEDUSA_IO_EXP_BUS_NUM-00$IO_EXP_SLOT_PWR_CTRL_ADDR/"*gpiochip*) +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*) #IO 0:7 input port for showing slot 1:8 power status #IO 8:16 output port for controlling slot 1:8 power status @@ -17,7 +17,7 @@ IO_EXP_SLOT_PWR_CTRL=$((IO_EXP_SLOT_PWR_STATUS + 8)) # Server 12v power off chassis-power-off() { - if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=0 + if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=1 then echo "Failed to set slot$1 power off" fi @@ -36,7 +36,7 @@ chassis-power-off() fi } -chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL $IO_EXP_SLOT_PWR_STATUS") +chassis_status=$(gpioget "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_STATUS") 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 31d15208be..fbd6009cb0 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 @@ -6,7 +6,7 @@ # shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd source /usr/libexec/phosphor-state-manager/power-cmd -GPIOCHIP_IO_EXP_SLOT_PWR_CTRL=$(basename "/sys/bus/i2c/devices/$MEDUSA_IO_EXP_BUS_NUM-00$IO_EXP_SLOT_PWR_CTRL_ADDR/"*gpiochip*) +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*) #IO 0:7 input port for showing slot 1:8 power status #IO 8:16 output port for controlling slot 1:8 power status @@ -17,7 +17,7 @@ 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"=1 + if ! gpioset "$GPIOCHIP_IO_EXP_SLOT_PWR_CTRL" "$IO_EXP_SLOT_PWR_CTRL"=0 then echo "Failed to set slot$1 power on" 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 ffa7e401cc..237e432537 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 @@ -10,7 +10,7 @@ source /usr/libexec/phosphor-state-manager/power-cmd # Set state effecter state: Entity ID 0x0000 for host power control, 0x3 for power cycle GETEID=$(busctl call "$MCTP_BUS_NAME" "$MCTP_OBJ_PATH" "$MCTP_INTF_NAME" LearnEndpoint say "mctpi2c$(($1-1))" 1 0x20) EID=$(echo "$GETEID" | awk '{print $2}') -if ! pldmtool raw -m "$EID" -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x03 +if ! pldmtool raw -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x03 -m "$EID" then echo "Failed to set host$1 power cycle" else 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 2955050c48..df881eabec 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 @@ -10,7 +10,7 @@ source /usr/libexec/phosphor-state-manager/power-cmd # Set state effecter state: Entity ID 0x0000 for host power control, 0x2 for power off GETEID=$(busctl call "$MCTP_BUS_NAME" "$MCTP_OBJ_PATH" "$MCTP_INTF_NAME" LearnEndpoint say "mctpi2c$(($1-1))" 1 0x20) EID=$(echo "$GETEID" | awk '{print $2}') -if ! pldmtool raw -m "$EID" -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x02 +if ! pldmtool raw -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x02 -m "$EID" then echo "Failed to set host$1 power off" else 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 915ee76226..5dcb1dacca 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 @@ -8,7 +8,7 @@ source /usr/libexec/phosphor-state-manager/power-cmd # Set state effecter state: Entity ID 0x0000 for host power control, 0x1 for power on GETEID=$(busctl call "$MCTP_BUS_NAME" "$MCTP_OBJ_PATH" "$MCTP_INTF_NAME" LearnEndpoint say "mctpi2c$(($1-1))" 1 0x20) EID=$(echo "$GETEID" | awk '{print $2}') -if ! pldmtool raw -m "$EID" -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x01 +if ! pldmtool raw -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x01 -m "$EID" then echo "Failed to set host$1 power on" else 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 c060105192..d667899651 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 @@ -10,7 +10,7 @@ source /usr/libexec/phosphor-state-manager/power-cmd # Set state effecter state: Entity ID 0x0000 for host power control, 0x4 for power reset GETEID=$(busctl call "$MCTP_BUS_NAME" "$MCTP_OBJ_PATH" "$MCTP_INTF_NAME" LearnEndpoint say "mctpi2c$(($1-1))" 1 0x20) EID=$(echo "$GETEID" | awk '{print $2}') -if ! pldmtool raw -m "$EID" -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x04 +if ! pldmtool raw -d 0x80 0x02 0x39 0x00 0x00 0x01 0x00 0x04 -m "$EID" then echo "Failed to set host$1 power reset" else 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 759ed98cf7..af5218a68f 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 @@ -3,10 +3,10 @@ export STATE_OFF=0 export STATE_ON=1 export STATE_UNKNOWN=-1 -export MANAGEMENT_BOARD_IO_EXP_BUS_NUM="12" -export MEDUSA_IO_EXP_BUS_NUM="11" -export IO_EXP_SLOT_PWR_CTRL_ADDR="22" -export IO_EXP_SLED_PWR_CTRL_ADDR="22" +export MANAGEMENT_BOARD_IO_EXP_BUS_NUM="13" +export SPIDER_BOARD_IO_EXP_BUS_NUM="28" +export IO_EXP_SLOT_PWR_CTRL_ADDR="21" +export IO_EXP_SLED_PWR_CTRL_ADDR="21" export CHASSIS_BUS_NAME="xyz.openbmc_project.State.Chassis" export CHASSIS_OBJ_PATH="/xyz/openbmc_project/state/chassis" export CHASSIS_INTF_NAME="xyz.openbmc_project.State.Chassis" |