From 1c51ca54c8206feaeaea61c1e4831b4a68ddb0e5 Mon Sep 17 00:00:00 2001 From: Charles Boyer Date: Tue, 24 Aug 2021 11:25:03 -0500 Subject: meta-fii/meta-kudo: Fix power control states and timing Summary of changes: 1. Adjust start time of xyz.openbmc_project.State.Chassis.service to fix initial chassis state 2. Add shutdown ack service 3. Remove reset ack service 4. Remove heartbeat mode 5. Remove sysreset pin control from power_control.exe 6. Remove all phosphor-fan services that caused power off during a system reset 7. Adjustments to ampere_power_util.sh (See below) ampere_power_util.sh: 1. Use GPIO instead of dbus for host state 2. Wait 3 seconds before checking power status for power on 3. Wait 6 seconds before checking power status for power off 4. Have force_off act GPIO while power_off sets Chassis state 5. Graceful shutdown acts GPIO 6. Check host status before issuing system reset 7. Set Watchdog Expire Action to None before power off and reset Signed-off-by: Charles Boyer Change-Id: Ie2720ee60d489c4160165c6827a78a400ae4d30b --- .../meta-kudo/recipes-kudo/host/ampere-hostctrl.bb | 4 +- .../ampere-hostctrl/ampere-host-reset-ack.service | 11 --- .../ampere-host-shutdown-ack.service | 12 +++ .../recipes-kudo/host/files/ampere_power_util.sh | 110 +++++++++++---------- 4 files changed, 74 insertions(+), 63 deletions(-) delete mode 100644 meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-host-reset-ack.service create mode 100644 meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-host-shutdown-ack.service (limited to 'meta-fii/meta-kudo/recipes-kudo/host') diff --git a/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl.bb b/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl.bb index f7daa94a8..77ad9d5a1 100644 --- a/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl.bb +++ b/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl.bb @@ -14,7 +14,7 @@ SRC_URI = "file://ampere-host-shutdown.service \ file://ampere_power_util.sh \ file://ampere-chassis-poweroff.service \ file://ampere-chassis-poweron.service \ - file://ampere-host-reset-ack.service \ + file://ampere-host-shutdown-ack.service \ file://ampere-host-force-reset.service \ file://ampere-host-power-cycle.service \ " @@ -28,7 +28,7 @@ SYSTEMD_SERVICE:${PN} = " \ ampere-host-reset.service \ ampere-chassis-poweroff.service \ ampere-chassis-poweron.service \ - ampere-host-reset-ack.service \ + ampere-host-shutdown-ack.service \ ampere-host-force-reset.service \ ampere-host-power-cycle.service \ " diff --git a/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-host-reset-ack.service b/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-host-reset-ack.service deleted file mode 100644 index a5338797a..000000000 --- a/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-host-reset-ack.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Ampere Computing LLC triggering reset ACK -Conflicts=obmc-host-start@0.target -OnFailure=obmc-chassis-powerreset@0.target - -[Service] -RemainAfterExit=no -Type=oneshot -ExecStart=/usr/bin/env ampere_power_util.sh mb force_reset -SyslogIdentifier=ampere_power_util.sh - diff --git a/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-host-shutdown-ack.service b/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-host-shutdown-ack.service new file mode 100644 index 000000000..fe05915ac --- /dev/null +++ b/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-host-shutdown-ack.service @@ -0,0 +1,12 @@ +[Unit] +Description=Ampere Computing LLC host shutdown ACK +Requires=op-wait-power-off@%i.service +Before=op-wait-power-off@%i.service +Conflicts=obmc-chassis-poweron@0.target + +[Service] +RemainAfterExit=no +Type=oneshot +ExecStart=/usr/bin/env ampere_power_util.sh mb shutdown_ack +SyslogIdentifier=ampere_power_util.sh + diff --git a/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh b/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh index 420abfb8c..8d58a0827 100644 --- a/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh +++ b/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh @@ -1,24 +1,36 @@ #!/bin/bash + +source /usr/sbin/kudo-lib.sh + # Usage of this utility function usage() { - echo "usage: power-util mb [on|off|status|cycle|reset|graceful_shutdown|graceful_reset|force_reset]"; + echo "usage: power-util mb [on|off|graceful_shutdown|force_reset|shutdown_ack]"; +} + +force_off() { + echo "Powering down Server" + + set_gpio_ctrl 203 out 1 + sleep 6 + set_gpio_ctrl 203 out 0 } power_off() { - echo "Shutting down Server $2" + busctl set-property xyz.openbmc_project.Watchdog /xyz/openbmc_project/watchdog/host0 xyz.openbmc_project.State.Watchdog ExpireAction s xyz.openbmc_project.State.Watchdog.Action.None busctl set-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.Off } power_on() { - echo "Powering on Server $2" - gpioset 6 11=1 + echo "Powering on Server" + + set_gpio_ctrl 203 out 1 sleep 1 - gpioset 6 11=0 + set_gpio_ctrl 203 out 0 busctl set-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.On } power_status() { - st=$(busctl get-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis CurrentPowerState | cut -d"." -f6) + st=$(busctl get-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis CurrentPowerState | cut -d "." -f6) if [ "$st" == "On\"" ]; then echo "on" else @@ -26,33 +38,53 @@ power_status() { fi } -power_reset() { - echo "Reset on server $2" - busctl set-property xyz.openbmc_project.State.Host /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.Host RequestedHostTransition s xyz.openbmc_project.State.Host.Transition.Reboot +host_status() { + BOOT_OK=$(get_gpio_ctrl 194) + S5_N=$(get_gpio_ctrl 204) + if [ $S5_N == 1 ] || [ $BOOT_OK == 1 ]; then + echo "on" + else + echo "off" + fi +} + +timestamp() { + date +"%s" # current time } graceful_shutdown() { if [ -f "/run/openbmc/host@0-request" ]; then - echo "shutdown host immediately" - gpioset 6 11=1 - sleep 6 - gpioset 6 11=0 + echo "Shutdown host immediately" power_off else echo "Triggering graceful shutdown" - gpioset -l 2 6=0 + mkdir /run/openbmc + echo "$(timestamp)" > "/run/openbmc/host@0-shutdown-req-time" + set_gpio_ctrl 70 out 0 sleep 3 - gpioset -l 2 6=1 - sleep 30s - power_off + set_gpio_ctrl 70 out 1 fi } force_reset() { - echo "Triggering sysreset pin" - gpioset -l 2 1=0 - sleep 1 - gpioset -l 2 1=1 + if [ $(host_status) == "on" ]; then + echo "Triggering sysreset pin" + busctl set-property xyz.openbmc_project.Watchdog /xyz/openbmc_project/watchdog/host0 xyz.openbmc_project.State.Watchdog ExpireAction s xyz.openbmc_project.State.Watchdog.Action.None + set_gpio_ctrl 65 out 0 + sleep 1 + set_gpio_ctrl 65 out 1 + else + echo "Host is off, cannot reset." + fi +} + +shutdown_ack() { + echo "Receive shutdown ACK triggered" + power_off + + if [ -f "/run/openbmc/host@0-shutdown-req-time" ]; then + rm -rf "/run/openbmc/host@0-shutdown-req-time" + fi } if [ $# -lt 2 ]; then @@ -69,49 +101,27 @@ if [ $1 != "mb" ]; then fi if [ $2 = "on" ]; then + sleep 3 if [ $(power_status) == "off" ]; then power_on fi elif [ $2 = "off" ]; then if [ $(power_status) == "on" ]; then power_off - fi - # If any request of graceful reset, need to power on - if [ -f "/run/openbmc/host@0-graceful-reset" ]; then - sleep 20s - power_on - rm -f "/run/openbmc/host@0-graceful-reset" - fi -elif [ $2 == "cycle" ]; then - if [ $(power_status) == "on" ]; then - echo "Power cycling server" - power_off - sleep 20s - power_on - else - echo "Host is already off, do nothing" - fi -elif [ $2 == "reset" ]; then - if [ $(power_status) == "on" ]; then - power_reset - else - echo "ERROR: Server not powered on" + sleep 6 + if [ $(host_status) == "on" ]; then + force_off + fi fi elif [[ $2 == "graceful_shutdown" ]]; then graceful_shutdown -elif [ $2 == "graceful_reset" ]; then - mkdir -p "/run/openbmc/" - touch "/run/openbmc/host@0-graceful-reset" - graceful_shutdown - sleep 20s -elif [ $2 == "status" ]; then - power_status elif [ $2 == "force_reset" ]; then force_reset +elif [ $2 == "shutdown_ack" ]; then + shutdown_ack else echo "Invalid parameter2=$2" usage; fi exit 0; - -- cgit v1.2.3 From 17b216ac6c9762ea781786787c1ccc9199e291c3 Mon Sep 17 00:00:00 2001 From: Charles Boyer Date: Fri, 27 Aug 2021 16:09:03 -0500 Subject: meta-fii/meta-kudo: Customize chassis power cycle action Instead of a host or chassis restart for a Chassis PowerCycle, have both the BMC and host perform a hard reset. This requires changes to phosphor-state-manager to add the handling of xyz.openbmc_project.State.Chassis.Transition.PowerCycle. Currently, there is handling for On and Off, but not PowerCycle. Signed-off-by: Charles Boyer Change-Id: I3d934c47a68899b2fd8fcba966f8d92c97554a77 --- meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl.bb | 7 +++++++ .../host/ampere-hostctrl/ampere-chassis-powercycle.service | 8 ++++++++ meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh | 8 +++++++- .../recipes-phosphor/state/phosphor-state-manager_%.bbappend | 2 ++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-chassis-powercycle.service (limited to 'meta-fii/meta-kudo/recipes-kudo/host') diff --git a/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl.bb b/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl.bb index 77ad9d5a1..327053cc9 100644 --- a/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl.bb +++ b/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl.bb @@ -14,6 +14,7 @@ SRC_URI = "file://ampere-host-shutdown.service \ file://ampere_power_util.sh \ file://ampere-chassis-poweroff.service \ file://ampere-chassis-poweron.service \ + file://ampere-chassis-powercycle.service \ file://ampere-host-shutdown-ack.service \ file://ampere-host-force-reset.service \ file://ampere-host-power-cycle.service \ @@ -28,6 +29,7 @@ SYSTEMD_SERVICE:${PN} = " \ ampere-host-reset.service \ ampere-chassis-poweroff.service \ ampere-chassis-poweron.service \ + ampere-chassis-powercycle.service \ ampere-host-shutdown-ack.service \ ampere-host-force-reset.service \ ampere-host-power-cycle.service \ @@ -68,6 +70,11 @@ CHASSIS_POWEROFF_TGTFMT = "obmc-chassis-poweroff@{0}.target" CHASSIS_POWEROFF_FMT = "../${CHASSIS_POWEROFF_SVC}:${CHASSIS_POWEROFF_TGTFMT}.requires/${CHASSIS_POWEROFF_SVC}" SYSTEMD_LINK:${PN} += "${@compose_list_zip(d, 'CHASSIS_POWEROFF_FMT', 'OBMC_CHASSIS_INSTANCES')}" +CHASSIS_POWERCYCLE_SVC = "ampere-chassis-powercycle.service" +CHASSIS_POWERCYCLE_TGTFMT = "obmc-chassis-powercycle@{0}.target" +CHASSIS_POWERCYCLE_FMT = "../${CHASSIS_POWERCYCLE_SVC}:${CHASSIS_POWERCYCLE_TGTFMT}.requires/${CHASSIS_POWERCYCLE_SVC}" +SYSTEMD_LINK_${PN} += "${@compose_list_zip(d, 'CHASSIS_POWERCYCLE_FMT', 'OBMC_CHASSIS_INSTANCES')}" + TMPL = "phosphor-gpio-monitor@.service" INSTFMT = "phosphor-gpio-monitor@{0}.service" TGT = "multi-user.target" diff --git a/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-chassis-powercycle.service b/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-chassis-powercycle.service new file mode 100644 index 000000000..c55fcd3db --- /dev/null +++ b/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-chassis-powercycle.service @@ -0,0 +1,8 @@ +[Unit] +Description=Ampere Computing LLC Power OFF Chassis + +[Service] +RemainAfterExit=no +Type=oneshot +ExecStart=/usr/bin/env ampere_power_util.sh mb hotswap +SyslogIdentifier=ampere_power_util.sh diff --git a/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh b/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh index 8d58a0827..905c7f23a 100644 --- a/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh +++ b/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh @@ -4,7 +4,11 @@ source /usr/sbin/kudo-lib.sh # Usage of this utility function usage() { - echo "usage: power-util mb [on|off|graceful_shutdown|force_reset|shutdown_ack]"; + echo "usage: power-util mb [on|off|graceful_shutdown|force_reset|shutdown_ack|hotswap]"; +} + +hotswap() { + kudo.sh rst hotswap } force_off() { @@ -113,6 +117,8 @@ elif [ $2 = "off" ]; then force_off fi fi +elif [[ $2 == "hotswap" ]]; then + hotswap elif [[ $2 == "graceful_shutdown" ]]; then graceful_shutdown elif [ $2 == "force_reset" ]; then diff --git a/meta-fii/meta-kudo/recipes-phosphor/state/phosphor-state-manager_%.bbappend b/meta-fii/meta-kudo/recipes-phosphor/state/phosphor-state-manager_%.bbappend index 57e3aa6c8..bbd60bb3f 100644 --- a/meta-fii/meta-kudo/recipes-phosphor/state/phosphor-state-manager_%.bbappend +++ b/meta-fii/meta-kudo/recipes-phosphor/state/phosphor-state-manager_%.bbappend @@ -1,5 +1,7 @@ FILESEXTRAPATHS:prepend:kudo := "${THISDIR}/${PN}:" +CHASSIS_ACTION_TARGETS:append:kudo = " powercycle" + SRC_URI:append:kudo = " \ file://xyz.openbmc_project.State.Chassis.service \ " -- cgit v1.2.3 From a3dc550e57470746a049356c99e3d6df0ed096c7 Mon Sep 17 00:00:00 2001 From: Charles Boyer Date: Fri, 29 Oct 2021 16:39:16 -0500 Subject: meta-fii/meta-kudo: Add power button support Adds support for Power On for power button press and Power Off when holding the power button. This is a temporary and rudimentary method to handle button presses. The intention is to eventually use phosphor-buttons with Nuvoton support. Signed-off-by: Charles Boyer Change-Id: Iede64f89c716102a688880280c11ff7f3068021b --- .../recipes-kudo/host/files/ampere_power_util.sh | 24 +++++++++++++++++++++- .../kudo-sys-utility/kudo-boot/init_once.sh | 3 +++ 2 files changed, 26 insertions(+), 1 deletion(-) (limited to 'meta-fii/meta-kudo/recipes-kudo/host') diff --git a/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh b/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh index 905c7f23a..511c1217e 100644 --- a/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh +++ b/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh @@ -4,7 +4,7 @@ source /usr/sbin/kudo-lib.sh # Usage of this utility function usage() { - echo "usage: power-util mb [on|off|graceful_shutdown|force_reset|shutdown_ack|hotswap]"; + echo "usage: power-util mb [on|off|graceful_shutdown|force_reset|shutdown_ack|hotswap|power_button]"; } hotswap() { @@ -91,6 +91,26 @@ shutdown_ack() { fi } +power_button() { + echo "Power button trigger event." + current_time="$(timestamp)" + if [ -f "/run/openbmc/power-button" ]; then + echo "Power button released" + press_time="$(cat /run/openbmc/power-button)" + if [[ "$current_time" -le "(($press_time + 1))" ]]; then + power_on + elif [[ "$current_time" -ge "(($press_time + 5))" ]]; then + power_off + else + echo "Button press did not match interval. + fi + rm "/run/openbmc/power-button" + else + echo "Power button pressed" + echo "$(timestamp)" > "/run/openbmc/power-button" + fi +} + if [ $# -lt 2 ]; then echo "Total number of parameter=$#" echo "Insufficient parameter" @@ -125,6 +145,8 @@ elif [ $2 == "force_reset" ]; then force_reset elif [ $2 == "shutdown_ack" ]; then shutdown_ack +elif [ $2 == "power_button" ]; then + power_button else echo "Invalid parameter2=$2" usage; diff --git a/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-boot/init_once.sh b/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-boot/init_once.sh index b87f12d0a..55661df80 100644 --- a/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-boot/init_once.sh +++ b/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-boot/init_once.sh @@ -64,3 +64,6 @@ if [[ $CPU1_STATUS_N == 1 ]]; then i2cset -y -a -f 16 0x6a 11 1 0x01 i i2cset -y -a -f 17 0x67 1 2 0x3f 0x0c i fi + +# Create /run/openbmc for system power files +mkdir "/run/openbmc" -- cgit v1.2.3 From b4e4716b712ed12612b85493a3a964e02a8c9b81 Mon Sep 17 00:00:00 2001 From: Charles Boyer Date: Thu, 4 Nov 2021 11:04:09 -0500 Subject: meta-fii/meta-kudo: Support bios verify Adds support for BIOS verification process to execute before issuing a host reset and boot from AC power. Signed-off-by: Charles Boyer Change-Id: I31c019a5ea8cb296749f671df15c658a7e2a3b9f --- .../recipes-kudo/host/ampere-hostctrl/ampere-host-power-cycle.service | 2 ++ .../recipes-kudo/kudo-sys-utility/kudo-boot/host-powerctrl.service | 2 ++ 2 files changed, 4 insertions(+) (limited to 'meta-fii/meta-kudo/recipes-kudo/host') diff --git a/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-host-power-cycle.service b/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-host-power-cycle.service index 0b32aa158..3e03e07df 100644 --- a/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-host-power-cycle.service +++ b/meta-fii/meta-kudo/recipes-kudo/host/ampere-hostctrl/ampere-host-power-cycle.service @@ -2,6 +2,8 @@ Description=Ampere Computing LLC power cycle service Conflicts=obmc-host-start@0.target OnFailure=obmc-chassis-powerreset@0.target +Wants=kudo-bios-verify.service +After=kudo-bios-verify.service [Service] RemainAfterExit=no diff --git a/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-boot/host-powerctrl.service b/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-boot/host-powerctrl.service index 54c7c7aa1..8a8d46f14 100644 --- a/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-boot/host-powerctrl.service +++ b/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-boot/host-powerctrl.service @@ -2,6 +2,8 @@ Description = Host Power Control Sequence Wants=ssifbridge.service After=ssifbridge.service +Wants=kudo-bios-verify.service +After=kudo-bios-verify.service [Service] Restart=no -- cgit v1.2.3 From 92d0d57948a9b19b1db1bd730dbc17f42bd1c318 Mon Sep 17 00:00:00 2001 From: "avenash.thambi" Date: Fri, 12 Nov 2021 19:22:47 -0600 Subject: meta-fii/meta-kudo: Fix syntax error ampere_power_util.sh file The ampere_power_util.sh file has a syntax error of missing double quotes in a echo print. This is a follow up to the gerrit commit https://gerrit.openbmc-project.xyz/c/openbmc/openbmc/+/48477 Signed-off-by: Mustafa Shehabi Signed-off-by: avenash.thambi Change-Id: Iff734c390507201c2d539dc6468de09a888623c7 --- meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'meta-fii/meta-kudo/recipes-kudo/host') diff --git a/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh b/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh index 511c1217e..19ccc0e8e 100644 --- a/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh +++ b/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh @@ -102,7 +102,7 @@ power_button() { elif [[ "$current_time" -ge "(($press_time + 5))" ]]; then power_off else - echo "Button press did not match interval. + echo "Button press did not match interval." fi rm "/run/openbmc/power-button" else -- cgit v1.2.3