summaryrefslogtreecommitdiff
path: root/meta-facebook
diff options
context:
space:
mode:
authorPotin Lai <potin.lai@quantatw.com>2022-11-14 14:12:08 +0300
committerPatrick Williams <patrick@stwcx.xyz>2022-11-29 22:45:21 +0300
commit6a0b3d3b74b6af3113a48b424261b4001350e1d6 (patch)
tree88395aea5119017b141d47ed60aa2b2e0df55b9f /meta-facebook
parent126591b38d4d623435cfef6023c9fa6d0dd9ead6 (diff)
downloadopenbmc-6a0b3d3b74b6af3113a48b424261b4001350e1d6.tar.xz
meta-bletchley: use BootMode property to select host boot mode.
Use BootMode to decide whether host should boot to Normal, Recovery or DFU mode. - xyz.openbmc_project.Control.Boot.Mode.Modes.Regular: Normal mode - xyz.openbmc_project.Control.Boot.Mode.Modes.Safe: Recovery mode - xyz.openbmc_project.Control.Boot.Mode.Modes.Setup: DFU mode Tested results: - Host normal on (xyz.openbmc_project.Control.Boot.Mode.Modes.Regular) root@bletchley:~# busctl set-property xyz.openbmc_project.Settings \ > /xyz/openbmc_project/control/host6/boot \ > xyz.openbmc_project.Control.Boot.Mode BootMode s \ > xyz.openbmc_project.Control.Boot.Mode.Modes.Regular root@bletchley:~# obmcutil -i=6 poweron root@bletchley:~# power-ctrl sled6 status On - Host boot recovery (xyz.openbmc_project.Control.Boot.Mode.Modes.Safe) root@bletchley:~# busctl set-property xyz.openbmc_project.Settings \ > /xyz/openbmc_project/control/host6/boot \ > xyz.openbmc_project.Control.Boot.Mode BootMode s \ > xyz.openbmc_project.Control.Boot.Mode.Modes.Safe root@bletchley:~# obmcutil -i=6 poweron root@bletchley:~# power-ctrl sled6 status Recovery - Host boot DFU (xyz.openbmc_project.Control.Boot.Mode.Modes.Setup) root@bletchley:~# busctl set-property xyz.openbmc_project.Settings \ > /xyz/openbmc_project/control/host6/boot \ > xyz.openbmc_project.Control.Boot.Mode BootMode s \ > xyz.openbmc_project.Control.Boot.Mode.Modes.Setup root@bletchley:~# obmcutil -i=6 poweron root@bletchley:~# power-ctrl sled6 status DFU Signed-off-by: Potin Lai <potin.lai@quantatw.com> Change-Id: I1eac8fb74f3702d9ce0ab9180b9d7e2e26df81f7
Diffstat (limited to 'meta-facebook')
-rw-r--r--meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/host-poweron@.service2
-rwxr-xr-xmeta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/power-ctrl46
2 files changed, 45 insertions, 3 deletions
diff --git a/meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/host-poweron@.service b/meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/host-poweron@.service
index c9f15a692b..fd0cbd93af 100644
--- a/meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/host-poweron@.service
+++ b/meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/host-poweron@.service
@@ -8,6 +8,6 @@ Conflicts=host-poweroff@%i.service
[Service]
Type=oneshot
-ExecStart=/usr/sbin/power-ctrl sled%i on
+ExecStart=/usr/sbin/power-ctrl sled%i boot-from-bootmode
SyslogIdentifier=power-ctrl
diff --git a/meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/power-ctrl b/meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/power-ctrl
index 9bae16b845..8de9e5afa7 100755
--- a/meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/power-ctrl
+++ b/meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/power-ctrl
@@ -39,6 +39,7 @@ ACTION_RESET="reset"
ACTION_AC_ON="ac-on"
ACTION_AC_OFF="ac-off"
ACTION_STATUS="status"
+ACTION_BOOT_MODE="boot-from-bootmode"
VALID_SLED_ACTIONS="
$ACTION_ON
@@ -50,8 +51,13 @@ VALID_SLED_ACTIONS="
$ACTION_RECOVERY
$ACTION_CYCLE
$ACTION_RESET
+ $ACTION_BOOT_MODE
"
+BOOT_MODE_REGULAR="\"xyz.openbmc_project.Control.Boot.Mode.Modes.Regular\""
+BOOT_MODE_SAFE="\"xyz.openbmc_project.Control.Boot.Mode.Modes.Safe\""
+BOOT_MODE_SETUP="\"xyz.openbmc_project.Control.Boot.Mode.Modes.Setup\""
+
function is_valid_sled_action()
{
local ACTION=$1
@@ -332,6 +338,14 @@ function get_host_status()
return $?
}
+function get_host_bootmode()
+{
+ local BUS_NAME="xyz.openbmc_project.Settings"
+ local OBJ_PATH="/xyz/openbmc_project/control/host${1}/boot"
+ local INTF_NAME="xyz.openbmc_project.Control.Boot.Mode"
+ busctl get-property "${BUS_NAME}" "${OBJ_PATH}" "${INTF_NAME}" BootMode | awk '{print $2}'
+}
+
function do_action_reset()
{
# 1. Power off
@@ -421,7 +435,7 @@ function do_action_dfu()
echo "SLED$SLED_NUM: press power button failed"
echo "SLED$SLED_NUM: releasing power button"
release_power_button "$SLED_NUM"
- exit 1
+ return 1
fi
sleep 1
@@ -434,7 +448,7 @@ function do_action_dfu()
echo "SLED$SLED_NUM: releasing host power button"
if ! release_power_button "$SLED_NUM"; then
echo "SLED$SLED_NUM: release power button failed"
- exit 1
+ return 1
fi
echo "$ACTION_DFU" > "/tmp/sled${SLED_NUM}-last-action"
}
@@ -504,6 +518,9 @@ function host_state_off_action_handler()
"$ACTION_RECOVERY")
do_action_recovery "$SLED_NUM"
;;
+ "$ACTION_DFU")
+ do_action_dfu "$SLED_NUM"
+ ;;
"$ACTION_AC_OFF")
do_action_ac_off "$SLED_NUM"
;;
@@ -555,6 +572,9 @@ function host_state_ac_on_action_handler()
"$ACTION_AC_OFF")
do_action_ac_off "$SLED_NUM"
;;
+ "$ACTION_DFU")
+ do_action_dfu "$SLED_NUM"
+ ;;
"$ACTION_CYCLE")
do_action_cycle "$SLED_NUM"
;;
@@ -688,6 +708,28 @@ elif [ "$ACTION" = "$ACTION_STATUS" ];then
echo "$HOST_CURR_STATUS"
else
HOST_CURR_STATUS=$(get_host_status "$SLED_NUM")
+
+ if [ "$ACTION" = "$ACTION_BOOT_MODE" ]; then
+ BOOT_MODE=$(get_host_bootmode "$SLED_NUM")
+ case "$BOOT_MODE" in
+ "$BOOT_MODE_REGULAR")
+ echo "Boot mode: on (regular)"
+ ACTION="$ACTION_ON"
+ ;;
+ "$BOOT_MODE_SAFE")
+ echo "Boot mode: recovery (safe)"
+ ACTION="$ACTION_RECOVERY"
+ ;;
+ "$BOOT_MODE_SETUP")
+ echo "Boot mode: dfu (setup)"
+ ACTION="$ACTION_DFU"
+ ;;
+ *)
+ echo "Boot mode: unknow"
+ ;;
+ esac
+ fi
+
case $HOST_CURR_STATUS in
"$HOST_AC_OFF")
host_state_ac_off_action_handler "$SLED_NUM" "$ACTION"