summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Chen <yang.chen@quantatw.com>2024-04-18 17:31:59 +0300
committerPatrick Williams <patrick@stwcx.xyz>2024-04-20 00:06:20 +0300
commit9101a902bfc1290c43df6e57ccfda4025c8981c0 (patch)
tree45348ccca4561901088d263026fa7c71b4bfe8ae
parentd60b987c45bd8b3a7ce16e2c2795a8d740cf9248 (diff)
downloadopenbmc-9101a902bfc1290c43df6e57ccfda4025c8981c0.tar.xz
meta-facebook: minerva: enable chassis power cycle
Because CMM is without any host, we use the "Chassis" of the phosphor-state-manager which the chassis0 to indicate the "CMM sled power cycle" to control the CMM board only and the chassis1 to indicate the "CMM chassis power cycle" to control the entire system including CMM, compute, and network blades. Change-Id: I17cf0f3e711b35da2d264e1f2fcb2f44d7af26d0 Signed-off-by: Yang Chen <yang.chen@quantatw.com>
-rw-r--r--meta-facebook/meta-minerva/conf/machine/minerva.conf2
-rw-r--r--meta-facebook/meta-minerva/recipes-phosphor/images/fb-minerva-phosphor-image.inc4
-rw-r--r--meta-facebook/meta-minerva/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle59
-rw-r--r--meta-facebook/meta-minerva/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle@.service9
-rw-r--r--meta-facebook/meta-minerva/recipes-phosphor/state/phosphor-state-manager_%.bbappend15
5 files changed, 89 insertions, 0 deletions
diff --git a/meta-facebook/meta-minerva/conf/machine/minerva.conf b/meta-facebook/meta-minerva/conf/machine/minerva.conf
index 22b6a3db8e..7b2ee8a3b5 100644
--- a/meta-facebook/meta-minerva/conf/machine/minerva.conf
+++ b/meta-facebook/meta-minerva/conf/machine/minerva.conf
@@ -15,3 +15,5 @@ require conf/machine/include/obmc-bsp-common.inc
require conf/machine/include/facebook-tpm2.inc
FLASH_SIZE = "131072"
+
+OBMC_CHASSIS_INSTANCES = "0 1"
diff --git a/meta-facebook/meta-minerva/recipes-phosphor/images/fb-minerva-phosphor-image.inc b/meta-facebook/meta-minerva/recipes-phosphor/images/fb-minerva-phosphor-image.inc
index 72516c6215..fa5266988d 100644
--- a/meta-facebook/meta-minerva/recipes-phosphor/images/fb-minerva-phosphor-image.inc
+++ b/meta-facebook/meta-minerva/recipes-phosphor/images/fb-minerva-phosphor-image.inc
@@ -27,3 +27,7 @@ OBMC_IMAGE_EXTRA_INSTALL:append = " \
OBMC_IMAGE_EXTRA_INSTALL:append = " \
phosphor-sel-logger \
"
+
+OBMC_IMAGE_EXTRA_INSTALL:append = " \
+ phosphor-state-manager \
+"
diff --git a/meta-facebook/meta-minerva/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle b/meta-facebook/meta-minerva/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle
new file mode 100644
index 0000000000..deaa7afe5a
--- /dev/null
+++ b/meta-facebook/meta-minerva/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+# shellcheck source=meta-facebook/meta-minerva/recipes-minerva/plat-tool/files/minerva-common-functions
+source /usr/libexec/minerva-common-functions
+
+# Minerva CMM Sled Power Cycle and Chassis Power Cycle
+
+cmm-hsc-power-cycle() {
+ #TBD: Since there has a 2nd HSC, it is necessary to determine which HSC it is now.
+
+ # LTC4287 MFR_REBOOT_CONTROL (FDh) Read/Write
+ # [3]:
+ # REBOOT 0 Write a 1 to reboot.
+ # [2:0]
+ # RBT_DL 100 Configures Auto-Reboot turn-on Delay (tDL(RBT)) after the REBOOT bit is set to 1
+ # RBT_DL[2:0] DELAY
+ # 000 0.580 s
+ # 001 1.16 s
+ # 010 2.32 s
+ # 011 4.64 s
+ # 100 9.28 s
+ # 101 18.6 s
+ # 110 37.1 s
+ # 111 74.2 s
+ i2cset -y -f 0 0x44 0xfd 0x00
+ i2cset -y -f 0 0x44 0xfd 0x0b
+}
+
+compute-blade-hsc-power-off() {
+ for i in {0..15}
+ do
+ set_gpio "PWREN_MTIA_BLADE${i}_HSC_EN_N" 1
+ done
+}
+
+network-blade-hsc-power-off() {
+ for i in {0..15}
+ do
+ set_gpio "PWREN_MTIA_BLADE${i}_HSC_EN_N" 1
+ done
+}
+
+# CMM Sled Power Cycle
+if [ "$1" == 0 ]
+then
+ echo "Staring CMM Sled Power Cycle"
+ cmm-hsc-power-cycle
+# CMM Chassis Power Cycle
+elif [ "$1" == 1 ]
+then
+ echo "Staring CMM Chassis Power Cycle"
+
+ compute-blade-hsc-power-off
+ network-blade-hsc-power-off
+ cmm-hsc-power-cycle
+else
+ echo "Invalid CMM Cycle"
+ exit 1
+fi
diff --git a/meta-facebook/meta-minerva/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle@.service b/meta-facebook/meta-minerva/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle@.service
new file mode 100644
index 0000000000..a8fa1e259c
--- /dev/null
+++ b/meta-facebook/meta-minerva/recipes-phosphor/state/phosphor-state-manager/chassis-powercycle@.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Chassis%i Power Cycle
+
+[Service]
+Type=oneshot
+ExecStart=/usr/libexec/phosphor-state-manager/chassis-powercycle %i
+
+[Install]
+WantedBy=obmc-chassis-powercycle@%i.target
diff --git a/meta-facebook/meta-minerva/recipes-phosphor/state/phosphor-state-manager_%.bbappend b/meta-facebook/meta-minerva/recipes-phosphor/state/phosphor-state-manager_%.bbappend
index ff214fa676..4f8d258055 100644
--- a/meta-facebook/meta-minerva/recipes-phosphor/state/phosphor-state-manager_%.bbappend
+++ b/meta-facebook/meta-minerva/recipes-phosphor/state/phosphor-state-manager_%.bbappend
@@ -6,3 +6,18 @@ CHASSIS_DEFAULT_TARGETS:remove = " \
obmc-chassis-poweroff@{}.target.requires/obmc-power-stop@{}.service \
obmc-chassis-poweron@{}.target.requires/obmc-power-start@{}.service \
"
+
+RDEPENDS:${PN}:append = " bash"
+
+SRC_URI:append:minerva = " \
+ file://chassis-powercycle \
+ file://chassis-powercycle@.service \
+ "
+
+do_install:append:minerva() {
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/*.service ${D}${systemd_system_unitdir}/
+
+ install -d ${D}${libexecdir}/${PN}
+ install -m 0755 ${WORKDIR}/chassis-powercycle ${D}${libexecdir}/${PN}/
+}