diff options
47 files changed, 308 insertions, 695 deletions
diff --git a/meta-facebook/meta-bletchley/recipes-bletchley/detect-gpio-present/files/detect-sled-present b/meta-facebook/meta-bletchley/recipes-bletchley/detect-gpio-present/files/detect-sled-present index 2483736880..b57bf6326c 100644 --- a/meta-facebook/meta-bletchley/recipes-bletchley/detect-gpio-present/files/detect-sled-present +++ b/meta-facebook/meta-bletchley/recipes-bletchley/detect-gpio-present/files/detect-sled-present @@ -33,9 +33,6 @@ sled_insert_action() local I2C_BUS_NUM I2C_BUS_NUM=$(get_bus_num "$SLED_ID") - # 0022: fusb302 - bind_i2c_driver "${I2C_BUS_NUM}-0022" "typec_fusb302" - # 0045: ina230 bind_i2c_driver "${I2C_BUS_NUM}-0045" "ina2xx" @@ -45,7 +42,7 @@ sled_insert_action() # 0041: pca9536 bind_i2c_driver "${I2C_BUS_NUM}-0041" "pca953x" - # 0076: pca9539 + # 0076: pca9539. provides FUSB302 VBUS‑enable GPIO; fusb302 auto-binds after it probes bind_i2c_driver "${I2C_BUS_NUM}-0076" "pca953x" # 004f: tmp421 @@ -79,8 +76,8 @@ sled_remove_action() # # 0041: pca9536 # unbind_i2c_driver "${I2C_BUS_NUM}-0041" "pca953x" - # # 0076: pca9539 - # unbind_i2c_driver "${I2C_BUS_NUM}-0076" "pca953x" + # 0076: pca9539 + unbind_i2c_driver "${I2C_BUS_NUM}-0076" "pca953x" # # 004f: tmp421 # unbind_i2c_driver "${I2C_BUS_NUM}-004f" "tmp421" @@ -96,14 +93,14 @@ sled_remove_action() } -dbus-monitor --system "type=signal,interface=${DBUS_PROPERTY_INTF},sender=${SERVICE_NAME},path=${PRESENT_OBJPATH}" | +busctl monitor --system --match "type=signal,interface=${DBUS_PROPERTY_INTF},sender=${SERVICE_NAME},path=${PRESENT_OBJPATH}" | while read -r line; do case "$line" in - *"boolean false"*) + *"BOOLEAN false"*) echo "SLED${SLED_ID} Removal" sled_remove_action "$SLED_ID" ;; - *"boolean true"*) + *"BOOLEAN true"*) echo "SLED${SLED_ID} Insertion" sled_insert_action "$SLED_ID" ;; diff --git a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB0.conf b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB0.conf index 48d63a5dce..8a6f86f83b 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB0.conf +++ b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB0.conf @@ -1,4 +1,4 @@ baud = 57600 console-id = ath_uart0 -logfile = /var/log/obmc-console-ath-uart0.log +logfile = /var/log/obmc-console-ath_uart0.log logsize = 256k diff --git a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB1.conf b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB1.conf index 440b9c29d9..3f2e6a0f06 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB1.conf +++ b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB1.conf @@ -1,4 +1,4 @@ baud = 57600 console-id = ath_uart1 -logfile = /var/log/obmc-console-ath-uart1.log +logfile = /var/log/obmc-console-ath_uart1.log logsize = 256k diff --git a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB2.conf b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB2.conf index 232f3a9bfe..f8731b0791 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB2.conf +++ b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB2.conf @@ -1,4 +1,4 @@ baud = 57600 console-id = ath_uart_ccp0 -logfile = /var/log/obmc-console-ath-uart-ccp0.log +logfile = /var/log/obmc-console-ath_uart_ccp0.log logsize = 256k diff --git a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB3.conf b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB3.conf index 352164d2ee..64339db6c9 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB3.conf +++ b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB3.conf @@ -1,4 +1,4 @@ baud = 57600 console-id = ath_uart_ccp1 -logfile = /var/log/obmc-console-ath-uart-ccp1.log +logfile = /var/log/obmc-console-ath_uart_ccp1.log logsize = 256k diff --git a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB4.conf b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB4.conf index 2761c5de1c..e9ff3d30b7 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB4.conf +++ b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB4.conf @@ -1,4 +1,4 @@ baud = 57600 console-id = nowl_uart -logfile = /var/log/obmc-console-nowl-uart.log +logfile = /var/log/obmc-console-nowl_uart.log logsize = 256k diff --git a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB5.conf b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB5.conf index 4d14d935c1..59cf91258a 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB5.conf +++ b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB5.conf @@ -1,4 +1,4 @@ baud = 57600 console-id = sowl_uart -logfile = /var/log/obmc-console-sowl-uart.log +logfile = /var/log/obmc-console-sowl_uart.log logsize = 256k diff --git a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB6.conf b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB6.conf index 4b9045384c..47c4d6dcf6 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB6.conf +++ b/meta-facebook/meta-harma/recipes-phosphor/console/obmc-console/server.ttyUSB6.conf @@ -1,4 +1,4 @@ baud = 57600 console-id = mmc_uart -logfile = /var/log/obmc-console-mmc-uart.log +logfile = /var/log/obmc-console-mmc_uart.log logsize = 256k diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good index 84d745817b..72c8127858 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good @@ -3,47 +3,42 @@ # shellcheck source=meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd source /usr/libexec/phosphor-state-manager/power-cmd -# Sync Led status to off +# Check SGPIO validity +if ! check_valid_sgpio; then + exit 0 +fi + +# Sync Led status to on systemctl start obmc-led-group-stop@power_on.service -currentstate=$(busctl get-property \ +# Get current host state +current_state=$(busctl get-property \ xyz.openbmc_project.State.Host0 \ /xyz/openbmc_project/state/host0 \ xyz.openbmc_project.State.Host \ CurrentHostState | awk '{print $2}' | tr -d '"') -if [ "$currentstate" == "xyz.openbmc_project.State.Host.HostState.TransitioningToOff" ]; then +# Exit if host is already transitioning off +if [ "$current_state" = "xyz.openbmc_project.State.Host.HostState.TransitioningToOff" ]; then exit 0 fi -active=$(systemctl is-active host-graceful-poweroff@0.service) -if [ -z "$active" ] || [ "$active" != "inactive" ]; then - exit 0 -fi +# List of services that block power_off_sync +block_services=( + host-graceful-poweroff@0.service + host-force-poweroff@0.service + host-powerreset@0.service +) -active=$(systemctl is-active host-force-poweroff@0.service) -if [ -z "$active" ] || [ "$active" != "inactive" ]; then - exit 0 -fi +# Exit if any blocking service is not inactive +for svc in "${block_services[@]}"; do + if [ "$(systemctl is-active "$svc")" != "inactive" ]; then + exit 0 + fi +done -active=$(systemctl is-active host-powerreset@0.service) -if [ -z "$active" ] || [ "$active" != "inactive" ]; then - exit 0 -fi +# Safe to power off +# Wait 8 seconds, checking every second +power_off_sync 8 1 -sleep 3 -# Sync power state to "off" for abnormal power lose. -transition=$(busctl get-property \ - xyz.openbmc_project.State.Host0 \ - /xyz/openbmc_project/state/host0 \ - xyz.openbmc_project.State.Host \ - RequestedHostTransition | awk '{print $2}' | tr -d '"') - -if [ "$transition" != "xyz.openbmc_project.State.Host.Transition.Off" ] && [ "$(power_status)" == "off" ]; then - busctl set-property xyz.openbmc_project.State.Host0 \ - /xyz/openbmc_project/state/host0 \ - xyz.openbmc_project.State.Host \ - RequestedHostTransition s \ - xyz.openbmc_project.State.Host.Transition.Off -fi exit 0 diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good index 8fb9aca337..1dfee3cd48 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good @@ -1,63 +1,45 @@ #!/bin/bash -# shellcheck source=meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions -source /usr/libexec/fb-common-functions # shellcheck source=meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd source /usr/libexec/phosphor-state-manager/power-cmd -# shellcheck source=meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/device-util -source /usr/libexec/phosphor-gpio-monitor/device-util - -# The hardware disables the multiplexer in standby -# to prevent sending a command by mistake to the retimer when it boots up. -# Therefore, we need to rebind it when powered on. -if [ ! -e "/sys/bus/i2c/drivers/pca954x/3-0070" ]; then - sleep 6 - rebind_i2c_dev 3 70 "pca954x" -fi -check_valid_sgpio -valid_sgpio=$? +# Check SGPIO validity +if ! check_valid_sgpio; then + exit 0 +fi -if [ "$valid_sgpio" -eq 0 ]; then - # Sync Led status to on - systemctl start obmc-led-group-start@power_on.service +# Sync Led status to on +systemctl start obmc-led-group-start@power_on.service - currentstate=$(busctl get-property \ - xyz.openbmc_project.State.Host0 \ - /xyz/openbmc_project/state/host0 \ - xyz.openbmc_project.State.Host \ - CurrentHostState | awk '{print $2}' | tr -d '"') - if [ "$currentstate" == "xyz.openbmc_project.State.Host.HostState.TransitioningToRunning" ]; then - exit 0 - fi -fi +# Checking and Syncing power policy. +# Get current host state +current_state=$(busctl get-property \ + xyz.openbmc_project.State.Host0 \ + /xyz/openbmc_project/state/host0 \ + xyz.openbmc_project.State.Host \ + CurrentHostState | awk '{print $2}' | tr -d '"') -active=$(systemctl is-active host-poweron@0.service) -if [ -z "$active" ] || [ "$active" != "inactive" ]; then +# Exit if host is already transitioning to running +if [ "$current_state" = "xyz.openbmc_project.State.Host.HostState.TransitioningToRunning" ]; then exit 0 fi -active=$(systemctl is-active host-powerreset@0.service) -if [ -z "$active" ] || [ "$active" != "inactive" ]; then - exit 0 -fi +# List of services that block power_on_sync +block_services=( + host-poweron@0.service + host-powerreset@0.service +) -# Sync power status to "On" for abnormal power-on scenarios. -if [ "$valid_sgpio" -eq 0 ]; then - transition=$(busctl get-property \ - xyz.openbmc_project.State.Host0 \ - /xyz/openbmc_project/state/host0 \ - xyz.openbmc_project.State.Host \ - RequestedHostTransition | awk '{print $2}' | tr -d '"') - - if [ "$transition" != "xyz.openbmc_project.State.Host.Transition.On" ] && [ "$(power_status)" == "on" ]; then - busctl set-property xyz.openbmc_project.State.Host0 \ - /xyz/openbmc_project/state/host0 \ - xyz.openbmc_project.State.Host \ - RequestedHostTransition s \ - xyz.openbmc_project.State.Host.Transition.On +# Exit if any blocking service is not inactive +for svc in "${block_services[@]}"; do + if [ "$(systemctl is-active "$svc")" != "inactive" ]; then + exit 0 fi -fi +done + +# Safe to power on +# Wait 3 seconds, checking every second +power_on_sync 3 1 exit 0 diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/initial-poweron-device b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/initial-poweron-device new file mode 100644 index 0000000000..0f93066c56 --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/initial-poweron-device @@ -0,0 +1,14 @@ +#!/bin/bash + +# shellcheck source=meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/device-util +source /usr/libexec/phosphor-gpio-monitor/device-util + +# The hardware disables the multiplexer in standby +# to prevent sending a command by mistake to the retimer when it boots up. +# Therefore, we need to rebind it when powered on. +if [ ! -e "/sys/bus/i2c/drivers/pca954x/3-0070" ]; then + sleep 6 + rebind_i2c_dev 3 70 "pca954x" +fi + +exit 0 diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/initial-poweron-device.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/initial-poweron-device.service new file mode 100644 index 0000000000..1ad1f43103 --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/initial-poweron-device.service @@ -0,0 +1,8 @@ +[Unit] +Description=Initial Power On Device + +[Service] +Type=oneshot +ExecStart=/usr/libexec/phosphor-gpio-monitor/initial-poweron-device + +SyslogIdentifier=initial-poweron-device diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/plat-phosphor-multi-gpio-monitor.json b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/plat-phosphor-multi-gpio-monitor.json index 3ae18801e9..ee49ab09e4 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/plat-phosphor-multi-gpio-monitor.json +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/plat-phosphor-multi-gpio-monitor.json @@ -98,7 +98,8 @@ "Targets": { "RISING": [ "deassert-power-good.service", - "power-rail-deassert-log@2_power-host-good.service" + "initial-poweron-device.service", + "power-rail-deassert-log@2_power-host-good.service" ], "FALLING": [ "assert-power-good.service", diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend index b2d5d490bb..ae82d20f37 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend @@ -29,6 +29,8 @@ SRC_URI += "file://assert-post-end \ file://gpios-assert-log@.service \ file://gpios-deassert-log@.service \ file://gpios-event-logger \ + file://initial-poweron-device \ + file://initial-poweron-device.service \ file://logging-util \ file://mmc-recovery.service \ file://multi-gpios-sys-init \ @@ -66,6 +68,7 @@ SYSTEMD_SERVICE:${PN} += " \ deassert-uart-switch-button.service \ device-reinitial@.service \ fan-reload.service \ + initial-poweron-device.service \ mmc-recovery.service \ multi-gpios-sys-init.service \ prochot-assert-log.service \ @@ -120,6 +123,7 @@ do_install:append() { install -m 0755 ${UNPACKDIR}/auto-poweron ${D}${libexecdir}/${PN}/ install -m 0755 ${UNPACKDIR}/fan-reload ${D}${libexecdir}/${PN}/ + install -m 0755 ${UNPACKDIR}/initial-poweron-device ${D}${libexecdir}/${PN}/ } SYSTEMD_OVERRIDE:${PN}-monitor += "phosphor-multi-gpio-monitor.conf:phosphor-multi-gpio-monitor.service.d/phosphor-multi-gpio-monitor.conf" diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-force-poweroff@.service b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-force-poweroff@.service index 062d4f2098..fcb1da5d52 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-force-poweroff@.service +++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-force-poweroff@.service @@ -9,6 +9,7 @@ Restart=no Type=oneshot RemainAfterExit=yes ExecStart=/usr/libexec/phosphor-state-manager/host-force-poweroff %i +ExecStop=/usr/libexec/fb-common-functions set_gpio power-host-control 1 [Install] RequiredBy=obmc-host-stop@%i.target diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-graceful-poweroff@.service b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-graceful-poweroff@.service index c8af4ee700..ec5f5db76a 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-graceful-poweroff@.service +++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-graceful-poweroff@.service @@ -10,6 +10,7 @@ Restart=no Type=oneshot RemainAfterExit=yes ExecStart=/usr/libexec/phosphor-state-manager/host-graceful-poweroff %i +ExecStop=/usr/libexec/fb-common-functions set_gpio power-host-control 1 [Install] WantedBy=obmc-host-shutdown@%i.target diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweron@.service b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweron@.service index 050c5c9b4c..fb814c5d79 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweron@.service +++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/host-poweron@.service @@ -7,6 +7,7 @@ Before=obmc-host-starting@%i.target Before=obmc-host-started@%i.target Wants=obmc-power-on@%i.target After=obmc-power-on@%i.target +Conflicts=obmc-host-shutdown@%i.target Conflicts=obmc-host-stop@%i.target Wants=phosphor-set-host-transition-to-running@service Before=phosphor-set-host-transition-to-running@service @@ -17,7 +18,6 @@ Restart=no Type=oneshot RemainAfterExit=yes ExecStart=/usr/libexec/phosphor-state-manager/host-poweron %i -ExecStartPost=/bin/systemctl stop host-graceful-poweroff@%i.service [Install] RequiredBy=obmc-host-startmin@%i.target diff --git a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd index 849b0419ca..87c3f67408 100644 --- a/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd +++ b/meta-facebook/meta-harma/recipes-phosphor/state/phosphor-state-manager/power-cmd @@ -84,6 +84,8 @@ graceful_power_off() { # DC on power_on() { + set_gpio power-host-control 1 + sleep 1 if [ "$(power_status)" == "off" ]; then set_gpio power-host-control 0 sleep 1 @@ -113,3 +115,95 @@ power_reset() { sleep 1 return 0 } + +# Sync power state to "off" for abnormal power loss. +power_off_sync() { + local timeout=${1:-8} # default 8 seconds if not provided + local delay=${2:-1} # default 1 second interval if not provided + + for ((i=0; i<timeout; i++)); do + local status + status=$(power_status) + if [ "$status" != "off" ]; then + return + fi + sleep "$delay" + done + + local transition + transition=$(busctl get-property \ + xyz.openbmc_project.State.Host0 \ + /xyz/openbmc_project/state/host0 \ + xyz.openbmc_project.State.Host \ + RequestedHostTransition | awk '{print $2}' | tr -d '"') + + if [ "$transition" != "xyz.openbmc_project.State.Host.Transition.Off" ] && [ "$(power_status)" == "off" ]; then + busctl set-property xyz.openbmc_project.State.Host0 \ + /xyz/openbmc_project/state/host0 \ + xyz.openbmc_project.State.Host \ + RequestedHostTransition s \ + xyz.openbmc_project.State.Host.Transition.Off + fi +} + +# Sync power status to "On" for abnormal power-on scenarios. +power_on_sync() { + local timeout=${1:-3} # default 3 seconds if not provided + local delay=${2:-1} # default 1 second interval if not provided + + for ((i=0; i<timeout; i++)); do + local status + status=$(power_status) + if [ "$status" != "on" ]; then + return + fi + sleep "$delay" + done + + local transition + transition=$(busctl get-property \ + xyz.openbmc_project.State.Host0 \ + /xyz/openbmc_project/state/host0 \ + xyz.openbmc_project.State.Host \ + RequestedHostTransition | awk '{print $2}' | tr -d '"') + + if [ "$transition" != "xyz.openbmc_project.State.Host.Transition.On" ] && [ "$(power_status)" == "on" ]; then + busctl set-property xyz.openbmc_project.State.Host0 \ + /xyz/openbmc_project/state/host0 \ + xyz.openbmc_project.State.Host \ + RequestedHostTransition s \ + xyz.openbmc_project.State.Host.Transition.On + fi +} + +# Main execution +if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then + case "$1" in + force_off) + force_power_off + ;; + graceful_off) + graceful_power_off + ;; + power_on) + power_on + ;; + power_reset) + power_reset + ;; + off_sync) + power_off_sync "$2" "$3" + ;; + on_sync) + power_on_sync "$2" "$3" + ;; + status) + power_status + ;; + *) + echo "Usage: $0 {force_off|graceful_off|power_on|power_reset|off_sync|on_sync|status}" + exit 0 + ;; + esac +fi + diff --git a/meta-facebook/meta-minerva/recipes-phosphor/gpio/phosphor-gpio-monitor/minerva-phosphor-multi-gpio-presence.json b/meta-facebook/meta-minerva/recipes-phosphor/gpio/phosphor-gpio-monitor/minerva-phosphor-multi-gpio-presence.json deleted file mode 100644 index 5c6d3c33ef..0000000000 --- a/meta-facebook/meta-minerva/recipes-phosphor/gpio/phosphor-gpio-monitor/minerva-phosphor-multi-gpio-presence.json +++ /dev/null @@ -1,146 +0,0 @@ -[ - { - "Name": "FAN1", - "LineName": "FAN1_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN1" - }, - { - "Name": "FAN2", - "LineName": "FAN2_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN2" - }, - { - "Name": "FAN3", - "LineName": "FAN3_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN3" - }, - { - "Name": "FAN4", - "LineName": "FAN4_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN4" - }, - { - "Name": "FAN5", - "LineName": "FAN5_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN5" - }, - { - "Name": "FAN6", - "LineName": "FAN6_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN6" - }, - { - "Name": "FAN7", - "LineName": "FAN7_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN7" - }, - { - "Name": "FAN8", - "LineName": "FAN8_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN8" - }, - { - "Name": "FAN9", - "LineName": "FAN9_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN9" - }, - { - "Name": "FAN10", - "LineName": "FAN10_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN10" - }, - { - "Name": "FAN11", - "LineName": "FAN11_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN11" - }, - { - "Name": "FAN12", - "LineName": "FAN12_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN12" - }, - { - "Name": "FAN13", - "LineName": "FAN13_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN13" - }, - { - "Name": "FAN14", - "LineName": "FAN14_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN14" - }, - { - "Name": "FAN15", - "LineName": "FAN15_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN15" - }, - { - "Name": "FAN16", - "LineName": "FAN16_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN16" - }, - { - "Name": "FAN17", - "LineName": "FAN17_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN17" - }, - { - "Name": "FAN18", - "LineName": "FAN18_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN18" - }, - { - "Name": "FAN19", - "LineName": "FAN19_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN19" - }, - { - "Name": "FAN20", - "LineName": "FAN20_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN20" - }, - { - "Name": "FAN21", - "LineName": "FAN21_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN21" - }, - { - "Name": "FAN22", - "LineName": "FAN22_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN22" - }, - { - "Name": "FAN23", - "LineName": "FAN23_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN23" - }, - { - "Name": "FAN24", - "LineName": "FAN24_PRSNT", - "Bias": "DISABLE", - "Inventory": "/system/board/Minerva_Fan_Board/FAN24" - } -] diff --git a/meta-facebook/meta-minerva/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend b/meta-facebook/meta-minerva/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend index 855c004b2c..d3217bf262 100644 --- a/meta-facebook/meta-minerva/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend +++ b/meta-facebook/meta-minerva/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend @@ -17,7 +17,6 @@ SERVICE_LIST = "rpu-ready-assert@.service \ SERVICE_FILE_FMT = "file://{0}" SRC_URI += "file://minerva-phosphor-multi-gpio-monitor.json \ - file://minerva-phosphor-multi-gpio-presence.json \ file://logging \ file://fan-reload \ file://cr-toggle-boot-logger \ @@ -36,8 +35,6 @@ do_install:append() { install -d ${D}${datadir}/phosphor-gpio-monitor install -m 0644 ${UNPACKDIR}/minerva-phosphor-multi-gpio-monitor.json \ ${D}${datadir}/phosphor-gpio-monitor/phosphor-multi-gpio-monitor.json - install -m 0644 ${UNPACKDIR}/minerva-phosphor-multi-gpio-presence.json \ - ${D}${datadir}/phosphor-gpio-monitor/phosphor-multi-gpio-presence.json for s in ${SERVICE_LIST} do diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/fans/phosphor-pid-control/monitor-pldm-sensor b/meta-facebook/meta-yosemite4/recipes-phosphor/fans/phosphor-pid-control/monitor-pldm-sensor index 74f9b2c827..e7d5a46597 100644 --- a/meta-facebook/meta-yosemite4/recipes-phosphor/fans/phosphor-pid-control/monitor-pldm-sensor +++ b/meta-facebook/meta-yosemite4/recipes-phosphor/fans/phosphor-pid-control/monitor-pldm-sensor @@ -13,12 +13,14 @@ PLDM_SERVICE="xyz.openbmc_project.PLDM" PLDM_PATH="/xyz/openbmc_project/inventory" # Slot path prefixes for T2 +ENTITY_MANAGER_SENTINEL_T2_WITH_RETIMER_PREFIX="/xyz/openbmc_project/inventory/system/board/Yosemite_4_Sentinel_Dome_T2_with_Retimer_Slot_" ENTITY_MANAGER_SENTINEL_T2_PREFIX="/xyz/openbmc_project/inventory/system/board/Yosemite_4_Sentinel_Dome_T2_Slot_" ENTITY_MANAGER_WAILUA_T2_PREFIX="/xyz/openbmc_project/inventory/system/board/Yosemite_4_Wailua_Falls_Slot_" PLDM_SENTINEL_T2_PREFIX="/xyz/openbmc_project/inventory/system/board/SENTINEL_DOME_SLOT_" PLDM_WAILUA_T2_PREFIX="/xyz/openbmc_project/inventory/system/board/WAILUA_FALLS_SLOT_" # Slot path prefixes for T1 +ENTITY_MANAGER_SENTINEL_T1_WITH_RETIMER_PREFIX="/xyz/openbmc_project/inventory/system/board/Yosemite_4_Sentinel_Dome_T1_with_Retimer_Slot_" ENTITY_MANAGER_SENTINEL_T1_PREFIX="/xyz/openbmc_project/inventory/system/board/Yosemite_4_Sentinel_Dome_T1_Slot_" PLDM_SENTINEL_T1_PREFIX="/xyz/openbmc_project/inventory/system/board/SENTINEL_DOME_SLOT_" @@ -49,12 +51,20 @@ detect_slot_configuration() { local slot=$2 # Check for T2 slot prefix + if check_object_path "$entity_manager_data" "${ENTITY_MANAGER_SENTINEL_T2_WITH_RETIMER_PREFIX}${slot}"; then + echo "T2_RETIMER" + return 0 + fi if check_object_path "$entity_manager_data" "${ENTITY_MANAGER_SENTINEL_T2_PREFIX}${slot}"; then echo "T2" return 0 fi # Check for T1 slot prefix + if check_object_path "$entity_manager_data" "${ENTITY_MANAGER_SENTINEL_T1_WITH_RETIMER_PREFIX}${slot}"; then + echo "T1_RETIMER" + return 0 + fi if check_object_path "$entity_manager_data" "${ENTITY_MANAGER_SENTINEL_T1_PREFIX}${slot}"; then echo "T1" return 0 @@ -73,31 +83,58 @@ check_slot() { # Detect the configuration for the current slot configuration=$(detect_slot_configuration "$entity_manager_data" "$slot") - if [ "$configuration" == "T2" ]; then - echo "Checking Sentinel Dome T2 slot $slot..." - entity_path="${ENTITY_MANAGER_SENTINEL_T2_PREFIX}${slot}" - pldm_path="${PLDM_SENTINEL_T2_PREFIX}${slot}" - if ! check_single_slot "$slot" "$entity_manager_data" "$pldm_data" "$entity_path" "$pldm_path"; then - return 1 - fi - - echo "Checking Wailua Falls T2 slot $slot..." - entity_path="${ENTITY_MANAGER_WAILUA_T2_PREFIX}${slot}" - pldm_path="${PLDM_WAILUA_T2_PREFIX}${slot}" - if ! check_single_slot "$slot" "$entity_manager_data" "$pldm_data" "$entity_path" "$pldm_path"; then - return 1 - fi - elif [ "$configuration" == "T1" ]; then - echo "Checking Sentinel Dome T1 slot $slot..." - entity_path="${ENTITY_MANAGER_SENTINEL_T1_PREFIX}${slot}" - pldm_path="${PLDM_SENTINEL_T1_PREFIX}${slot}" - if ! check_single_slot "$slot" "$entity_manager_data" "$pldm_data" "$entity_path" "$pldm_path"; then - return 1 - fi - else - echo "Unknown configuration for slot $slot. Skipping..." - return 0 - fi + case "$configuration" in + T2_RETIMER) + echo "Checking Sentinel Dome T2(with retimer) slot $slot..." + entity_path="${ENTITY_MANAGER_SENTINEL_T2_WITH_RETIMER_PREFIX}${slot}" + pldm_path="${PLDM_SENTINEL_T2_PREFIX}${slot}" + if ! check_single_slot "$slot" "$entity_manager_data" "$pldm_data" "$entity_path" "$pldm_path"; then + return 1 + fi + + echo "Checking Wailua Falls T2 slot $slot..." + entity_path="${ENTITY_MANAGER_WAILUA_T2_PREFIX}${slot}" + pldm_path="${PLDM_WAILUA_T2_PREFIX}${slot}" + if ! check_single_slot "$slot" "$entity_manager_data" "$pldm_data" "$entity_path" "$pldm_path"; then + return 1 + fi + ;; + T2) + echo "Checking Sentinel Dome T2 slot $slot..." + entity_path="${ENTITY_MANAGER_SENTINEL_T2_PREFIX}${slot}" + pldm_path="${PLDM_SENTINEL_T2_PREFIX}${slot}" + if ! check_single_slot "$slot" "$entity_manager_data" "$pldm_data" "$entity_path" "$pldm_path"; then + return 1 + fi + + echo "Checking Wailua Falls T2 slot $slot..." + entity_path="${ENTITY_MANAGER_WAILUA_T2_PREFIX}${slot}" + pldm_path="${PLDM_WAILUA_T2_PREFIX}${slot}" + if ! check_single_slot "$slot" "$entity_manager_data" "$pldm_data" "$entity_path" "$pldm_path"; then + return 1 + fi + ;; + T1_RETIMER) + echo "Checking Sentinel Dome T1(with retimer) slot $slot..." + entity_path="${ENTITY_MANAGER_SENTINEL_T1_WITH_RETIMER_PREFIX}${slot}" + pldm_path="${PLDM_SENTINEL_T1_PREFIX}${slot}" + if ! check_single_slot "$slot" "$entity_manager_data" "$pldm_data" "$entity_path" "$pldm_path"; then + return 1 + fi + ;; + T1) + echo "Checking Sentinel Dome T1 slot $slot..." + entity_path="${ENTITY_MANAGER_SENTINEL_T1_PREFIX}${slot}" + pldm_path="${PLDM_SENTINEL_T1_PREFIX}${slot}" + if ! check_single_slot "$slot" "$entity_manager_data" "$pldm_data" "$entity_path" "$pldm_path"; then + return 1 + fi + ;; + *) + echo "Unknown configuration for slot $slot. Skipping..." + return 0 + ;; + esac return 0 } 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 29ce9330d1..985d5874f5 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 @@ -13,6 +13,8 @@ HOST_DEFAULT_TARGETS:remove = " \ obmc-host-reboot@{}.target.requires/phosphor-reboot-host@{}.service \ " +SYSTEMD_SERVICE:${PN}-host:remove = "phosphor-reboot-host@.service" + CHASSIS_DEFAULT_TARGETS:remove = " \ obmc-chassis-powerreset@{}.target.requires/phosphor-reset-chassis-on@{}.service \ obmc-chassis-powerreset@{}.target.requires/phosphor-reset-chassis-running@{}.service \ diff --git a/meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions b/meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions index 7dd92ac7b1..2da67ef522 100644 --- a/meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions +++ b/meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions @@ -76,3 +76,23 @@ bind_i2c_device() return 1 } + +if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then + CMD=$1 + shift + case "$CMD" in + get_gpio) + get_gpio "$@" + ;; + set_gpio) + set_gpio "$@" + ;; + bind_i2c_device) + bind_i2c_device "$@" + ;; + *) + echo "Usage: $0 {get_gpio|set_gpio|bind_i2c_device} args..." + exit 1 + ;; + esac +fi diff --git a/meta-google/recipes-google/networking/gbmc-bridge.bb b/meta-google/recipes-google/networking/gbmc-bridge.bb index c4243f3e34..e23931df07 100644 --- a/meta-google/recipes-google/networking/gbmc-bridge.bb +++ b/meta-google/recipes-google/networking/gbmc-bridge.bb @@ -53,6 +53,7 @@ FILES:${PN}:append = " \ RDEPENDS:${PN}:append = " \ bash \ + ${@'' if d.getVar('GBMC_DHCP_RELAY') != '1' else 'dhcp-relay'} \ dhcp-done \ gbmc-ip-monitor \ gbmc-net-common \ diff --git a/meta-google/recipes-google/networking/gbmc-nic-config.bb b/meta-google/recipes-google/networking/gbmc-nic-config.bb index 4e0a41495f..5cc4b89a35 100644 --- a/meta-google/recipes-google/networking/gbmc-nic-config.bb +++ b/meta-google/recipes-google/networking/gbmc-nic-config.bb @@ -31,7 +31,6 @@ FILES:${PN} += " \ RDEPENDS:${PN}:append = " \ bash \ - ${@'' if d.getVar('GBMC_DHCP_RELAY') != '1' else 'dhcp-relay'} \ gbmc-ip-monitor \ gbmc-net-common \ nftables-systemd \ diff --git a/meta-google/recipes-google/networking/google-usb-network/usb_network.sh b/meta-google/recipes-google/networking/google-usb-network/usb_network.sh index 6b5f505e00..46956eeb25 100755 --- a/meta-google/recipes-google/networking/google-usb-network/usb_network.sh +++ b/meta-google/recipes-google/networking/google-usb-network/usb_network.sh @@ -64,6 +64,16 @@ Cost=85 EOF fi + # Add standard l2 bridge configuration if this is a relevant device + if (( ID_VENDOR == 0x18d1 && ID_PRODUCT == 0x22c )); then + cat >>/run/systemd/network/+-bmc-"${IFACE_NAME}".network <<EOF +[Network] +Bridge=l2br +[Bridge] +Cost=85 +EOF + fi + # Ignore any failures due to systemd being unavailable at boot # shellcheck disable=SC2119 gbmc_net_networkd_reload || true diff --git a/meta-ieisystem/recipes-ieisystem/ipmi/iei-ipmi-oem_git.bb b/meta-ieisystem/recipes-ieisystem/ipmi/iei-ipmi-oem_git.bb index a1d3331ee4..f85da8ad30 100644 --- a/meta-ieisystem/recipes-ieisystem/ipmi/iei-ipmi-oem_git.bb +++ b/meta-ieisystem/recipes-ieisystem/ipmi/iei-ipmi-oem_git.bb @@ -5,7 +5,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" SRC_URI = "git://github.com/openbmc/iei-ipmi-oem;branch=master;protocol=https" -SRCREV = "4f81ab752c5feb4cf5c7ac3ed87e13dacb22d89d" +SRCREV = "f68342cf921f9364e638de278772f7ff941dd6d8" S = "${WORKDIR}/git" PV = "0.1+git${SRCPV}" diff --git a/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/files/meson.build b/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/files/meson.build deleted file mode 100644 index a95af4605f..0000000000 --- a/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/files/meson.build +++ /dev/null @@ -1,34 +0,0 @@ -project( - 'platform-init', - 'cpp', - version: '0.1', - default_options: [ - 'warning_level=3', - 'cpp_std=c++23', - ], -) - -gpiodcxx = dependency('libgpiodcxx', default_options: ['bindings=cxx']) -systemd = dependency('systemd') -libsystemd = dependency('libsystemd') -libexec = get_option('prefix') + '/' + get_option('libexecdir') - -conf = configuration_data() -conf.set10('INIT_CARD', get_option('init-p2020').allowed()) -configure_file(output: 'config.h', configuration: conf) -configuration_inc = include_directories('.') - -exe = executable( - 'platform-init', - 'platform_init.cpp', - dependencies: [ - gpiodcxx, - libsystemd, - ], - include_directories: configuration_inc, - install: true, - install_dir: libexec, -) - -systemd_system_unit_dir = systemd.get_variable('systemdsystemunitdir') -install_data('platform_init.service', install_dir: systemd_system_unit_dir) diff --git a/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/files/meson.options b/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/files/meson.options deleted file mode 100644 index f6543a683d..0000000000 --- a/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/files/meson.options +++ /dev/null @@ -1,5 +0,0 @@ -option('init-p2020', - type: 'feature', - value: 'disabled', - description: 'Enable Init of P2020 add in card on gb200') - diff --git a/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/files/platform_init.cpp b/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/files/platform_init.cpp deleted file mode 100644 index 17cb731041..0000000000 --- a/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/files/platform_init.cpp +++ /dev/null @@ -1,350 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// SPDX-FileCopyrightText: 2025 NVIDIA - -#include <fcntl.h> -#include <gpiod.hpp> -#include <systemd/sd-daemon.h> - -#include <chrono> -#include <cstdint> -#include <cstdlib> -#include <cstring> -#include <filesystem> -#include <format> -#include <fstream> -#include <iostream> -#include <thread> -#include <unordered_map> - -#include <config.h> - -using namespace std::chrono_literals; - -constexpr static const char *app_name = "platform_init"; - -// Map of GPIO name to line. Holds lines open for the duration of the program -static std::unordered_map<std::string, gpiod::line> io; - -void sleep_milliseconds(std::chrono::milliseconds milliseconds) { - std::cerr << std::format("Sleeping for {} milliseconds\n", - milliseconds.count()); - std::this_thread::sleep_for(milliseconds); -} - -void set_gpio(const char *line_name, int value, - std::chrono::milliseconds find_timeout = 0ms) { - std::cerr << std::format("{} Request to set to {}\n", line_name, value); - std::chrono::milliseconds polling_time = 10ms; - gpiod::line &line = io[line_name]; - if (!line) { - do { - line = gpiod::find_line(line_name); - if (!line) { - std::cerr << std::format("{} not found yet, waiting and retrying\n", - line_name); - - sleep_milliseconds(polling_time); - find_timeout -= polling_time; - } - } while (!line && find_timeout > 0s); - if (!line && find_timeout <= 0s) { - std::cerr << std::format("{} Unable to find\n", line_name); - return; - } - try { - line.request({app_name, gpiod::line_request::DIRECTION_OUTPUT, 0}, value); - } catch (const std::system_error &e) { - std::cerr << std::format("{} unable to set direction and value {}\n", - line_name, e.what()); - return; - } - // No need to set if the init did it for us - std::cerr << std::format("{} Set to {}\n", line_name, value); - return; - } - std::cerr << std::format("{} Settingto {}\n", line_name, value); - line.set_value(value); -} - -int get_gpio(const char *line_name) { - std::cerr << std::format("{} Request to get\n", line_name); - - gpiod::line line = gpiod::find_line(line_name); - if (!line) { - std::cerr << std::format("{} Set unable to find\n", line_name); - return -1; - } - try { - line.request({app_name, gpiod::line_request::DIRECTION_INPUT, 0}); - } catch (const std::system_error &e) { - std::cerr << std::format("{} unable to set {}\n", line_name, e.what()); - } - - int value = line.get_value(); - std::cerr << std::format("{} was {}\n", line_name, value); - return value; -} - -enum class GpioEventResult { Error, Asserted, Timeout }; - -struct GpioEvent { - GpioEvent(const char *line_name_in, int value_in) - : line_name(line_name_in), value(value_in) { - line = gpiod::find_line(line_name); - if (!line) { - std::cerr << std::format("{} GpioEvent: Unable to find\n", line_name); - return; - } - int edge = value ? ::gpiod::line_request::EVENT_RISING_EDGE - : ::gpiod::line_request::EVENT_FALLING_EDGE; - - line.request({app_name, edge, 0}); - - int val = line.get_value(); - if (val == value) { - std::cerr << std::format("{} GpioEvent is already {}\n", line_name, val); - } else { - std::cerr << std::format("GpioEvent created for {}\n", line_name); - } - } - GpioEventResult wait() { - if (!line) { - std::cerr << std::format("Line {} wasn't initialized\n", line_name); - return GpioEventResult::Error; - } - std::cerr << std::format("{} Waiting to go to {}\n", line_name, - value ? "assert" : "deassert"); - auto events = line.event_wait(std::chrono::seconds(120)); - if (!events) { - std::cerr << std::format("{} Timeout\n", line_name); - return GpioEventResult::Timeout; - } - - std::cerr << std::format("{} Asserted\n", line_name); - - return GpioEventResult::Asserted; - } - - gpiod::line line; - std::string line_name; - int value; -}; - -void rebind_i2c(std::string number) { - std::string bindpath = - std::format("/sys/bus/platform/drivers/aspeed-i2c-bus/unbind", number); - std::ofstream bindofs(bindpath); - if (!bindofs) { - std::cerr << std::format("{} unable to open\n", bindpath); - return; - } - try { - bindofs << std::format("{}.i2c\n", number); - } catch (const std::system_error &e) { - std::cerr << std::format("{} unable to write\n", bindpath); - return; - } - bindofs.close(); - std::cerr << std::format("{} unbound\n", number); - - std::string unbindpath = - std::format("/sys/bus/platform/drivers/aspeed-i2c-bus/bind", number); - std::ofstream unbindofs(unbindpath); - if (!unbindofs) { - std::cerr << std::format("{} unable to open\n", unbindpath); - return; - } - try { - unbindofs << std::format("{}.i2c\n", number); - } catch (const std::system_error &e) { - std::cerr << std::format("{} unable to write\n", unbindpath); - return; - } - std::cerr << std::format("{} bound\n", number); -} - -void set_gpio_raw(int chip_num, int bit_num, int value) { - std::string syspath = std::format("gpiochip{}", chip_num); - std::cerr << std::format("Setting gpiochip{} bit {} to {}\n", chip_num, - bit_num, value); - try { - gpiod::chip chip(syspath); - gpiod::line line = chip.get_line(bit_num); - line.request({app_name, gpiod::line_request::DIRECTION_OUTPUT, 0}, value); - std::cerr << std::format("gpiochip{} bit {} set to {}\n", chip_num, bit_num, - value); - } catch (const std::system_error &e) { - std::cerr << std::format("Error setting gpiochip{} bit {}: {}\n", chip_num, - bit_num, e.what()); - } -} - -void new_device(unsigned int bus, unsigned int address, - std::string_view device_type) { - std::string path = std::format("/sys/bus/i2c/devices/i2c-{}/new_device", bus); - std::cerr << std::format("attempting to open {}", path); - std::ofstream new_device(path); - if (!new_device) { - std::cerr << "Error: Unable to create I2C device\n"; - return; - } - new_device << std::format("{} 0x{:02x}", device_type, address); - new_device.close(); - - std::cerr << std::format("{} device created at bus {}", device_type, bus); -} - -void wait_for_path_to_exist(std::string_view path, - std::chrono::milliseconds timeout) { - - while (true) { - std::error_code ec; - bool exists = std::filesystem::exists(path, ec); - if (exists) { - return; - } - sleep_milliseconds(1ms); - timeout -= 1ms; - } - std::cerr << std::format("Failed to wait for {} to exist", path); -} - -void init_p2020_gpu_card() { - std::cerr << "Initializing GPU card...\n"; - - // Init the P2020 gpio expander - new_device(14, 0x20, "pca6408"); - - // Wait for device to be created - auto device_path = "/sys/bus/i2c/devices/14-0020"; - wait_for_path_to_exist(device_path, 1000ms); - - // Find the GPIO chip number - std::string gpio_chip; - for (const auto &entry : std::filesystem::directory_iterator(device_path)) { - std::string path = entry.path().string(); - if (path.find("gpiochip") != std::string::npos) { - gpio_chip = path.substr(path.find("gpiochip") + std::strlen("gpiochip")); - break; - } - } - if (gpio_chip.empty()) { - std::cerr << "Error: Could not find GPIO chip number\n"; - return; - } - - std::cerr << "Found GPIO chip: gpiochip" << gpio_chip << "\n"; - unsigned int gpiochipint = 0; - try { - gpiochipint = std::stoi(gpio_chip); - } catch (const std::exception &e) { - std::cout << "Failed to convert gpiochip\n"; - return; - } - - // Set MCU in recovery - set_gpio_raw(gpiochipint, 3, 1); - - // Reset MCU - set_gpio_raw(gpiochipint, 4, 0); - set_gpio_raw(gpiochipint, 4, 1); - - // Switch MUX to MCU - set_gpio_raw(gpiochipint, 5, 1); -} - -bool hmc_is_present() { - std::error_code ec; - bool exists = std::filesystem::exists("/sys/bus/i2c/devices/9-0074", ec); - if (ec) { - exists = false; - } - if (exists) { - std::cerr << "HMC present in platform"; - } else { - std::cerr << "HMC not present in platform"; - } - return exists; -} - -int main() { - // Reset USB hubs - set_gpio("USB_HUB_RESET_L-O", 0, 10000ms); - bool hmc_present = hmc_is_present(); - if (!hmc_present) { - set_gpio("SEC_USB2_HUB_RST_L-O", 0, 10000ms); - } - - sleep_milliseconds(100ms); - if (!hmc_present) { - set_gpio("SEC_USB2_HUB_RST_L-O", 1); - } - // Write SGPIO_BMC_EN-O=1 to correctly set mux to send SGPIO signals to FPGA - set_gpio("SGPIO_BMC_EN-O", 1); - - // Write the bit for BMC without HMC - set_gpio("HMC_BMC_DETECT-O", !hmc_present, 30000ms); - - // Set BMC_EROT_FPGA_SPI_MUX_SEL-O = 1 to enable FPGA to access its EROT - set_gpio("BMC_EROT_FPGA_SPI_MUX_SEL-O", 1); - - // Enable 12V - set_gpio("BMC_12V_CTRL-O", 1, 10000ms); - - set_gpio("PWR_BRAKE_L-O", 1); - set_gpio("SHDN_REQ_L-O", 1); - set_gpio("SHDN_FORCE_L-O", 1); - // Hold in reset (asserted) after standby power enabled - set_gpio("SYS_RST_IN_L-O", 0); - - GpioEvent fpga_ready_wait = GpioEvent("FPGA_READY_BMC-I", 1); - GpioEvent sec_erot_fpga_rst = GpioEvent("SEC_FPGA_READY_BMC-I", 1); - - // Release FPGA EROT from reset - set_gpio("EROT_FPGA_RST_L-O", 1); - set_gpio("SEC_EROT_FPGA_RST_L-O", 1); - - sleep_milliseconds(100ms); - - set_gpio("FPGA_RST_L-O", 1); - - if (fpga_ready_wait.wait() != GpioEventResult::Asserted) { - std::cerr << "FPGA_READY_BMC-I failed to assert\n"; - // return EXIT_FAILURE; - } - - if (sec_erot_fpga_rst.wait() != GpioEventResult::Asserted) { - std::cerr << "SEC_FPGA_READY_BMC-I failed to assert\n"; - // return EXIT_FAILURE; - } - - // ReInitialize the FPGA connected I2C buses to unstick them and let FruDevice - // know it can scan for FRUs - // I2c bus 1 - rebind_i2c("1e78a100"); - // I2c bus 2 - rebind_i2c("1e78a180"); - - // Set sgpio signals - set_gpio("RUN_POWER_EN-O", 1); - set_gpio("SYS_RST_IN_L-O", 1); - set_gpio("GLOBAL_WP_BMC-O", 0); - - set_gpio("BMC_READY-O", 1); - - if (INIT_CARD == 1) { - init_p2020_gpu_card(); - } - - set_gpio("USB_HUB_RESET_L-O", 1); - if (!hmc_present) { - set_gpio("SEC_USB2_HUB_RST_L-O", 1); - } - - sd_notify(0, "READY=1"); - std::cerr << "Platform init complete\n"; - pause(); - std::cerr << "Releasing platform\n"; - - return EXIT_SUCCESS; -} diff --git a/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/files/platform_init.service b/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/files/platform_init.service deleted file mode 100644 index c1e5f5a8ba..0000000000 --- a/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/files/platform_init.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=Start up the GB200Nvl hardware -Before=xyz.openbmc_project.FruDevice.service - -[Service] -Type=notify -ExecStart=/usr/libexec/platform-init -SyslogIdentifier=gb200nvl-platform-init -TimeoutStartSec=500 - -[Install] -WantedBy=multi-user.target diff --git a/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init_%.bbappend b/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init_%.bbappend new file mode 100644 index 0000000000..0a4342f4d2 --- /dev/null +++ b/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init_%.bbappend @@ -0,0 +1 @@ +OEEXTRA_MESON::append = "-Dplatform-name=nvidia-gb200" diff --git a/meta-nvidia/recipes-phosphor/platform/platform-init_%.bbappend b/meta-nvidia/recipes-phosphor/platform/platform-init_%.bbappend new file mode 100644 index 0000000000..335abe64a2 --- /dev/null +++ b/meta-nvidia/recipes-phosphor/platform/platform-init_%.bbappend @@ -0,0 +1 @@ +EXTRA_OEMESON:append:nv-gpu-pcie-card = " -Dinit-p2020=enabled" diff --git a/meta-openpower/recipes-phosphor/vpd/openpower-fru-vpd.inc b/meta-openpower/recipes-phosphor/vpd/openpower-fru-vpd.inc index 0ddc27f5a7..17ed5af9c5 100644 --- a/meta-openpower/recipes-phosphor/vpd/openpower-fru-vpd.inc +++ b/meta-openpower/recipes-phosphor/vpd/openpower-fru-vpd.inc @@ -2,7 +2,7 @@ HOMEPAGE = "https://github.com/openbmc/openpower-vpd-parser" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" SRC_URI += "git://github.com/openbmc/openpower-vpd-parser;branch=master;protocol=https" -SRCREV = "9b0b0fd5108ebdfd472feddbac7ba7f52329ce8f" +SRCREV = "af528989ac04c3bc670c893b08aef6e55fe3e794" DEPENDS += "\ nlohmann-json \ cli11 \ diff --git a/meta-phosphor/recipes-extended/sdbusplus/python3-sdbus++_git.bb b/meta-phosphor/recipes-extended/sdbusplus/python3-sdbus++_git.bb index c87b258ed2..57db211196 100644 --- a/meta-phosphor/recipes-extended/sdbusplus/python3-sdbus++_git.bb +++ b/meta-phosphor/recipes-extended/sdbusplus/python3-sdbus++_git.bb @@ -19,7 +19,7 @@ PYPI_PACKAGE = "sdbusplus" S = "${WORKDIR}/git/tools" -inherit setuptools3 +inherit python_setuptools_build_meta RDEPENDS:${PN} += " \ ${PYTHON_PN}-inflection \ diff --git a/meta-phosphor/recipes-extended/sdbusplus/sdbusplus-rev.inc b/meta-phosphor/recipes-extended/sdbusplus/sdbusplus-rev.inc index a2bd881229..da785d6902 100644 --- a/meta-phosphor/recipes-extended/sdbusplus/sdbusplus-rev.inc +++ b/meta-phosphor/recipes-extended/sdbusplus/sdbusplus-rev.inc @@ -3,4 +3,4 @@ PR = "r1" PV ?= "1.0+git${SRCPV}" SRC_URI += "git://github.com/openbmc/sdbusplus;branch=master;protocol=https" -SRCREV = "63190dde0d374ab4d0f0bf8ce8a02543b5c2ce18" +SRCREV = "ed24aa516d98adb46947c3218fa94c876242e049" diff --git a/meta-phosphor/recipes-phosphor/chassis/obmc-phosphor-buttons_git.bb b/meta-phosphor/recipes-phosphor/chassis/obmc-phosphor-buttons_git.bb index 5cc1ce7767..ee6de6810c 100644 --- a/meta-phosphor/recipes-phosphor/chassis/obmc-phosphor-buttons_git.bb +++ b/meta-phosphor/recipes-phosphor/chassis/obmc-phosphor-buttons_git.bb @@ -9,7 +9,7 @@ DEPENDS += " \ phosphor-dbus-interfaces \ phosphor-logging \ " -SRCREV = "5f3c2e5b1115d0b532c8dc5330009fea42d4f15b" +SRCREV = "ea47dd49799e74f082a0a1386efac9bdfd6aaba4" PACKAGECONFIG ??= "signals handler" PACKAGECONFIG[signals] = ",,gpioplus nlohmann-json," PACKAGECONFIG[handler] = ",,,${VIRTUAL-RUNTIME_obmc-host-state-manager} ${VIRTUAL-RUNTIME_obmc-chassis-state-manager}" diff --git a/meta-phosphor/recipes-phosphor/configuration/entity-manager_git.bb b/meta-phosphor/recipes-phosphor/configuration/entity-manager_git.bb index e8911b1196..2a414f65ea 100644 --- a/meta-phosphor/recipes-phosphor/configuration/entity-manager_git.bb +++ b/meta-phosphor/recipes-phosphor/configuration/entity-manager_git.bb @@ -11,7 +11,7 @@ DEPENDS = "boost \ valijson \ phosphor-dbus-interfaces \ " -SRCREV = "bb029e49747115dfdc613d5a7ca05b1ee657e28c" +SRCREV = "8f7e3c09cd623cc458f9b4ee83aae3c94a2b5dc2" PACKAGECONFIG ??= "ipmi-fru gpio-presence" PACKAGECONFIG[dts-vpd] = "-Ddevicetree-vpd=true, -Ddevicetree-vpd=false" diff --git a/meta-phosphor/recipes-phosphor/dbus/phosphor-dbus-interfaces_git.bb b/meta-phosphor/recipes-phosphor/dbus/phosphor-dbus-interfaces_git.bb index 092f3707ff..f10ecb01e4 100644 --- a/meta-phosphor/recipes-phosphor/dbus/phosphor-dbus-interfaces_git.bb +++ b/meta-phosphor/recipes-phosphor/dbus/phosphor-dbus-interfaces_git.bb @@ -7,7 +7,7 @@ DEPENDS += " \ sdbusplus \ systemd \ " -SRCREV = "509b2e527564afbf9d905ba14430cea1dbea46ef" +SRCREV = "3ea5c2f28f576068b7e0135507ad809bdeb1cd9b" PV = "1.0+git${SRCPV}" PR = "r1" diff --git a/meta-phosphor/recipes-phosphor/fans/phosphor-fan.inc b/meta-phosphor/recipes-phosphor/fans/phosphor-fan.inc index ed738dfda3..04aa882d46 100644 --- a/meta-phosphor/recipes-phosphor/fans/phosphor-fan.inc +++ b/meta-phosphor/recipes-phosphor/fans/phosphor-fan.inc @@ -2,4 +2,4 @@ HOMEPAGE = "https://github.com/openbmc/phosphor-fan-presence" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" SRC_URI += "git://github.com/openbmc/phosphor-fan-presence;branch=master;protocol=https" -SRCREV = "5ba9169f36e4f590894758da9bf17d76d5f39910" +SRCREV = "f27192e92b24e370d7a00f29236337bc7d80c4af" diff --git a/meta-phosphor/recipes-phosphor/interfaces/bmcweb_git.bb b/meta-phosphor/recipes-phosphor/interfaces/bmcweb_git.bb index 7dacfae9b2..1a99554080 100644 --- a/meta-phosphor/recipes-phosphor/interfaces/bmcweb_git.bb +++ b/meta-phosphor/recipes-phosphor/interfaces/bmcweb_git.bb @@ -14,7 +14,7 @@ DEPENDS = " \ ${@bb.utils.contains('PTEST_ENABLED', '1', 'gtest', '', d)} \ ${@bb.utils.contains('PTEST_ENABLED', '1', 'gmock', '', d)} \ " -SRCREV = "55dabd74e4d96b78aa1804003062bec66cb5baa7" +SRCREV = "8d26c0d3a9bf14f5ad36b89db3fd3ce0d428655c" PV = "1.0+git${SRCPV}" SRC_URI = "git://github.com/openbmc/bmcweb.git;branch=master;protocol=https" diff --git a/meta-phosphor/recipes-phosphor/ipmi/phosphor-ipmi-host.inc b/meta-phosphor/recipes-phosphor/ipmi/phosphor-ipmi-host.inc index 81ad773e3b..1c20b6c698 100644 --- a/meta-phosphor/recipes-phosphor/ipmi/phosphor-ipmi-host.inc +++ b/meta-phosphor/recipes-phosphor/ipmi/phosphor-ipmi-host.inc @@ -2,4 +2,4 @@ HOMEPAGE = "http://github.com/openbmc/phosphor-host-ipmid" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=fa818a259cbed7ce8bc2a22d35a464fc" SRC_URI += "git://github.com/openbmc/phosphor-host-ipmid;branch=master;protocol=https" -SRCREV = "529d31c7b9ce70a1747b1f50b24b7ddcfaf8bc25" +SRCREV = "5659dda70999bc6ca9fb52fb22dac1f2fb6c47a7" diff --git a/meta-phosphor/recipes-phosphor/logging/phosphor-logging_git.bb b/meta-phosphor/recipes-phosphor/logging/phosphor-logging_git.bb index ea62fe1721..42bb179d88 100644 --- a/meta-phosphor/recipes-phosphor/logging/phosphor-logging_git.bb +++ b/meta-phosphor/recipes-phosphor/logging/phosphor-logging_git.bb @@ -20,7 +20,7 @@ DEPENDS += " \ systemd \ virtual/phosphor-logging-callouts \ " -SRCREV = "412ff862a4832d25c73c02caf6e3af5c550ec529" +SRCREV = "3dcf730d26e1f70144f2300b820d95a14e4f0cf1" PACKAGECONFIG ??= "" PACKAGECONFIG[openpower-pels] = " \ -Dopenpower-pel-extension=enabled, \ diff --git a/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/platform-init.bb b/meta-phosphor/recipes-phosphor/platform/platform-init_git.bb index 9f05dc9e12..abebb88db5 100644 --- a/meta-nvidia/meta-gb200nvl-obmc/recipes-nvidia/platform-init/platform-init.bb +++ b/meta-phosphor/recipes-phosphor/platform/platform-init_git.bb @@ -1,24 +1,19 @@ -SUMMARY = "Platform init for GB200NVL" +SUMMARY = "OpenBMC Platform init" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" DEPENDS = " \ + cli11 \ libgpiod \ systemd \ " -S = "${WORKDIR}/sources" -UNPACKDIR = "${S}" +S = "${WORKDIR}/git" -SRC_URI += "\ - file://meson.options \ - file://meson.build \ - file://platform_init.cpp \ - file://platform_init.service \ -" +SRCREV = "2b314e48381304ed5e5723076bfa9f1cd1f563bf" -EXTRA_OEMESON:append:nv-gpu-pcie-card = " -Dinit-p2020=enabled" +SRC_URI += "git://github.com/openbmc/platform-init.git;branch=master;protocol=https;branch=main" SYSTEMD_PACKAGES = "${PN}" SYSTEMD_SERVICE:${PN}:append = " platform_init.service " diff --git a/meta-phosphor/recipes-phosphor/pldm/pldm_git.bb b/meta-phosphor/recipes-phosphor/pldm/pldm_git.bb index c087b8f8da..9965baa69b 100644 --- a/meta-phosphor/recipes-phosphor/pldm/pldm_git.bb +++ b/meta-phosphor/recipes-phosphor/pldm/pldm_git.bb @@ -2,7 +2,7 @@ HOMEPAGE = "https://github.com/openbmc/pldm" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" SRC_URI = "git://github.com/openbmc/pldm;branch=master;protocol=https" -SRCREV = "10c6400f22a8af35c853f5acc01c0798666acd40" +SRCREV = "a206b6043a3599303d30652bf9f57b5417c1a01a" SUMMARY = "PLDM Stack" DESCRIPTION = "Implementation of the PLDM specifications" diff --git a/meta-phosphor/recipes-phosphor/state/phosphor-post-code-manager_git.bb b/meta-phosphor/recipes-phosphor/state/phosphor-post-code-manager_git.bb index b05d501748..8052321654 100644 --- a/meta-phosphor/recipes-phosphor/state/phosphor-post-code-manager_git.bb +++ b/meta-phosphor/recipes-phosphor/state/phosphor-post-code-manager_git.bb @@ -4,7 +4,7 @@ interface /xyz/openbmc_project/state/boot/raw by snoopd daemon and save them \ in a file under /var/lib for history." LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" -SRCREV = "0cbdb6e74472c0461a465bb2ceb8242e6343c578" +SRCREV = "20297dfbd96709af18b6046db76c99c79c149d59" PV = "1.0+git${SRCPV}" SRC_URI = "git://github.com/openbmc/phosphor-post-code-manager.git;branch=master;protocol=https" diff --git a/meta-phosphor/recipes-x86/chassis/x86-power-control_git.bb b/meta-phosphor/recipes-x86/chassis/x86-power-control_git.bb index 9803efe44d..29a061fc59 100755 --- a/meta-phosphor/recipes-x86/chassis/x86-power-control_git.bb +++ b/meta-phosphor/recipes-x86/chassis/x86-power-control_git.bb @@ -2,7 +2,7 @@ SUMMARY = "Chassis Power Control service for Intel based platforms" DESCRIPTION = "Chassis Power Control service for Intel based platforms" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" -SRCREV = "10557bae6ca71d18aa48d5b9fc84af6345de58ef" +SRCREV = "4d684117da08fd48c61655bb9afbc0510be42917" PV = "1.0+git${SRCPV}" SRC_URI = "git://github.com/openbmc/x86-power-control.git;protocol=https;branch=master" |