summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZoey YJ Chung <zoey.yj.chung.wiwynn@gmail.com>2025-08-13 13:00:07 +0300
committerPatrick Williams <patrick@stwcx.xyz>2025-08-21 19:42:52 +0300
commitdbb3a1c978b7736b7191be659bef5b4bd035f91c (patch)
tree05813ccfc5e1ac81c278670baf3ec2a43c72658d
parent47b9cdbf2a01fd825f1c9c1005278ab516b538f0 (diff)
downloadopenbmc-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>
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweron8
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/chassis-poweron@.service2
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/policy-chassis-poweron26
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager/policy-chassis-poweron@.service7
-rw-r--r--meta-facebook/meta-yosemite4/recipes-phosphor/state/phosphor-state-manager_%.bbappend7
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"