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>
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 27e83a9..0db82ce 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_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 @@
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 3e1dd3c..991dbc5 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 @@
# 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 @@
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 31d1520..fbd6009 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 @@
# 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 ffa7e40..237e432 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 @@
# 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 2955050..df881ea 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 @@
# 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 915ee76..5dcb1da 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 @@
# 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 c060105..d667899 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 @@
# 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 759ed98..af5218a 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"