diff options
author | Zoey YJ Chung <zoey.yj.chung.wiwynn@gmail.com> | 2025-08-13 13:00:07 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2025-08-21 19:42:52 +0300 |
commit | dbb3a1c978b7736b7191be659bef5b4bd035f91c (patch) | |
tree | 05813ccfc5e1ac81c278670baf3ec2a43c72658d | |
parent | 47b9cdbf2a01fd825f1c9c1005278ab516b538f0 (diff) | |
download | openbmc-dbb3a1c978b7736b7191be659bef5b4bd035f91c.tar.xz |
meta-facebook: yosemite4: Modify power control dependency
Description:
1. Add policy-chassis-poweron.service to ensure that power policy is executed only after AC ON is completed (obmc-chassis-poweron target is Active)
2. Modify the dependency order after sled cycle
Original:
multi-user.target is active -> Power Policy (discover-system-state service) -> DC ON (require AC ON)
After:
multi-user.target is active -> AC ON -> AC ON target is active -> Power Policy -> DC ON
Motivation:
When executing slot AC OFF -> AC ON or sled cycle, AC ON may be triggered twice ,resulting in unexpected entries in the SEL.
Tested:
- Check power state and SEL count after power control - pass
Change-Id: I9a5e2f56ab2314079dcf91524bce7baa52d020cc
Signed-off-by: Zoey YJ Chung <zoey.yj.chung.wiwynn@gmail.com>
5 files changed, 42 insertions, 8 deletions
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 311a2e674c..59244553a3 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 @@ -12,14 +12,12 @@ source /usr/libexec/yosemite4-common-functions #IO 8:16 output port for controlling slot 1:8 power status CHASSIS_ID=$1 slot_power_control_lock="/run/slot_power_control_${CHASSIS_ID}.lock" -IO_EXP_P0_PWRGD_R_OUT=18 IO_EXP_SLOT_PWR_STATUS=$((CHASSIS_ID - 1)) IO_EXP_SLOT_PWR_CTRL=$((IO_EXP_SLOT_PWR_STATUS + 8)) IO_EXP_SLOT_12V_STATUS=$((CHASSIS_ID + 23)) 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_SLOT_12V_STATUS_CTRL=$(basename "/sys/bus/i2c/devices/$MANAGEMENT_BOARD_IO_EXP_BUS_NUM-00$IO_EXP_SLED_PWR_CTRL_ADDR/"*gpiochip*) -GPIOCHIP_IO_EXP_HOST_POWER_STATUS=$(basename "/sys/bus/i2c/devices/$IO_EXP_SLOT_PWR_STATUS-0023/"*gpiochip*) is_nuvoton_board="$(check_nuvoton_board)" @@ -108,10 +106,4 @@ else add_sel "${msg}" "Info" fi -host_status=$(gpio_get "$GPIOCHIP_IO_EXP_HOST_POWER_STATUS" "$IO_EXP_P0_PWRGD_R_OUT") -if [ "$host_status" != "$STATE_ON" ] -then - systemctl restart "phosphor-discover-system-state@$CHASSIS_ID.service" - echo "Power on Host$CHASSIS_ID" -fi exit 0; diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweron@.service b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweron@.service index 9a43ac2c45..58b9e08780 100644 --- a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweron@.service +++ b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweron@.service @@ -1,10 +1,12 @@ [Unit] Description=power on chassis:%i OnFailure=chassis-poweron-failure@%i.service check-i3c-hub@%i.service +After=multi-user.target [Service] Type=oneshot ExecStart=/usr/libexec/phosphor-state-manager/chassis-poweron %i +ExecStartPost=/bin/bash -c '/bin/systemctl --no-block restart policy-chassis-poweron@%i.service || true' [Install] WantedBy=obmc-chassis-poweron@%i.target diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/policy-chassis-poweron b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/policy-chassis-poweron new file mode 100644 index 0000000000..e987bdb297 --- /dev/null +++ b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/policy-chassis-poweron @@ -0,0 +1,26 @@ +#!/bin/bash + +# Provide source directive to shellcheck. +# shellcheck source=meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/power-cmd +source /usr/libexec/phosphor-state-manager/power-cmd + +CHASSIS_ID=$1 +TARGET_NAME="obmc-chassis-poweron@$CHASSIS_ID.target" +RETRY=30 +count=0 + +while [ $count -lt $RETRY ]; do + status=$(systemctl is-active "$TARGET_NAME") + if [ "$status" == "active" ]; then + systemctl restart "phosphor-discover-system-state@$CHASSIS_ID.service" + echo "Host$CHASSIS_ID doing Power Policy" + exit 0 + else + echo "Waiting for $TARGET_NAME to become active..." + fi + sleep 1 + count=$((count+1)) +done + +echo "Timeout waiting for $TARGET_NAME" +exit 1
\ No newline at end of file diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/policy-chassis-poweron@.service b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/policy-chassis-poweron@.service new file mode 100644 index 0000000000..4d13c7549d --- /dev/null +++ b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/policy-chassis-poweron@.service @@ -0,0 +1,7 @@ +[Unit] +Description=Power Policy for Chassis Power On %i +After=host-poweron@%i.service + +[Service] +Type=oneshot +ExecStart=/usr/libexec/phosphor-state-manager/policy-chassis-poweron %i
\ No newline at end of file diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager_%.bbappend b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager_%.bbappend index 49a20cce49..29ce9330d1 100644 --- a/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager_%.bbappend +++ b/meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager_%.bbappend @@ -8,6 +8,7 @@ PACKAGECONFIG:append = " no-warm-reboot" PACKAGECONFIG:remove = "only-run-apr-on-power-loss" HOST_DEFAULT_TARGETS:remove = " \ + multi-user.target.wants/phosphor-discover-system-state@{}.service \ obmc-host-reboot@{}.target.requires/obmc-host-shutdown@{}.target \ obmc-host-reboot@{}.target.requires/phosphor-reboot-host@{}.service \ " @@ -30,6 +31,9 @@ SYSTEMD_SERVICE:${PN}-chassis:remove = "obmc-power-stop@.service" CHASSIS_DEFAULT_TARGETS:remove = " \ obmc-host-shutdown@{}.target.requires/obmc-chassis-poweroff@{}.target \ " +HOST_DEFAULT_TARGETS:append = " \ + multi-user.target.wants/obmc-chassis-poweron@{}.target \ +" CHASSIS_DEFAULT_TARGETS:append = " \ obmc-chassis-powercycle@{}.target.wants/log-chassis-powercycle-sel@{}.service \ @@ -62,6 +66,8 @@ SRC_URI:append = " \ file://check-i3c-hub \ file://log-chassis-powercycle-sel \ file://log-chassis-powercycle-sel@.service \ + file://policy-chassis-poweron \ + file://policy-chassis-poweron@.service \ " RDEPENDS:${PN}:append = " bash" @@ -86,6 +92,7 @@ do_install:append() { install -m 0755 ${UNPACKDIR}/rescan-cxl-eid ${D}${libexecdir}/${PN}/ install -m 0755 ${UNPACKDIR}/check-i3c-hub ${D}${libexecdir}/${PN}/ install -m 0755 ${UNPACKDIR}/log-chassis-powercycle-sel ${D}${libexecdir}/${PN}/ + install -m 0755 ${UNPACKDIR}/policy-chassis-poweron ${D}${libexecdir}/${PN}/ } FILES:${PN} += " ${systemd_system_unitdir}/*.service" |