diff options
17 files changed, 356 insertions, 0 deletions
diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-post-end b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-post-end new file mode 100644 index 0000000000..8c96ccd932 --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-post-end @@ -0,0 +1,5 @@ +#!/bin/bash + +busctl set-property xyz.openbmc_project.State.Host0 /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.OperatingSystem.Status OperatingSystemState s xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Standby + +exit 0 diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-post-end.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-post-end.service new file mode 100644 index 0000000000..7c22069ddd --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-post-end.service @@ -0,0 +1,8 @@ +[Unit] +Description=Assert Post Complete Status + +[Service] +Type=oneshot +ExecStart=/usr/libexec/phosphor-gpio-monitor/assert-post-end + +SyslogIdentifier=assert-post-end 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 new file mode 100644 index 0000000000..595725dea1 --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good @@ -0,0 +1,5 @@ +#!/bin/bash + +busctl set-property xyz.openbmc_project.State.Host0 /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.Host CurrentHostState s xyz.openbmc_project.State.Host.HostState.Off + +exit 0 diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good.service new file mode 100644 index 0000000000..12c568663f --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-power-good.service @@ -0,0 +1,8 @@ +[Unit] +Description=Assert Power Good Status + +[Service] +Type=oneshot +ExecStart=/usr/libexec/phosphor-gpio-monitor/assert-power-good + +SyslogIdentifier=assert-power-good diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button new file mode 100644 index 0000000000..150e3d7d5b --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button @@ -0,0 +1,8 @@ +#!/bin/bash + +# shellcheck source=meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions +source /usr/libexec/fb-common-functions + +set_gpio reset-control 0 + +exit 0 diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button.service new file mode 100644 index 0000000000..47e2b2a138 --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/assert-reset-button.service @@ -0,0 +1,8 @@ +[Unit] +Description=Assert Reset Button + +[Service] +Type=oneshot +ExecStart=/usr/libexec/phosphor-gpio-monitor/assert-reset-button + +SyslogIdentifier=assert-reset-button diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-post-end b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-post-end new file mode 100644 index 0000000000..b9e8a2e760 --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-post-end @@ -0,0 +1,5 @@ +#!/bin/bash + +busctl set-property xyz.openbmc_project.State.Host0 /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.OperatingSystem.Status OperatingSystemState s xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Inactive + +exit 0 diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-post-end.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-post-end.service new file mode 100644 index 0000000000..74eb955e18 --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-post-end.service @@ -0,0 +1,8 @@ +[Unit] +Description=Deassert Post Complete Status + +[Service] +Type=oneshot +ExecStart=/usr/libexec/phosphor-gpio-monitor/deassert-post-end + +SyslogIdentifier=deassert-post-end 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 new file mode 100644 index 0000000000..9cc75c4b1a --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good @@ -0,0 +1,15 @@ +#!/bin/bash + +busctl set-property xyz.openbmc_project.State.Host0 /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.Host CurrentHostState s xyz.openbmc_project.State.Host.HostState.Running + + +# 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 + /usr/bin/echo 3-0070 > /sys/bus/i2c/drivers/pca954x/bind +fi + +exit 0 diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good.service new file mode 100644 index 0000000000..acd7486cec --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-power-good.service @@ -0,0 +1,8 @@ +[Unit] +Description=Deassert Power Good Status + +[Service] +Type=oneshot +ExecStart=/usr/libexec/phosphor-gpio-monitor/deassert-power-good + +SyslogIdentifier=deassert-power-good diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button new file mode 100644 index 0000000000..b9c2f00f53 --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button @@ -0,0 +1,8 @@ +#!/bin/bash + +# shellcheck source=meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions +source /usr/libexec/fb-common-functions + +set_gpio reset-control 1 + +exit 0 diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button.service new file mode 100644 index 0000000000..66da79b677 --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/deassert-reset-button.service @@ -0,0 +1,8 @@ +[Unit] +Description=Deassert Reset Button + +[Service] +Type=oneshot +ExecStart=/usr/libexec/phosphor-gpio-monitor/deassert-reset-button + +SyslogIdentifier=deassert-reset-button diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/multi-gpios-sys-init b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/multi-gpios-sys-init new file mode 100644 index 0000000000..05bc10393d --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/multi-gpios-sys-init @@ -0,0 +1,151 @@ +#!/bin/bash + +# shellcheck source=meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions +source /usr/libexec/fb-common-functions + +power_good_init() { + if [ "$(get_gpio power-host-good)" -eq 1 ]; then + busctl set-property xyz.openbmc_project.State.Host0 /xyz/openbmc_project/state/host0 \ + xyz.openbmc_project.State.Host CurrentHostState s xyz.openbmc_project.State.Host.HostState.Running; + else + busctl set-property xyz.openbmc_project.State.Host0 /xyz/openbmc_project/state/host0 \ + xyz.openbmc_project.State.Host CurrentHostState s xyz.openbmc_project.State.Host.HostState.Off; + fi +} + +post_end_init() { + if [ "$(get_gpio host-ready-n)" -eq 0 ]; then + busctl set-property xyz.openbmc_project.State.Host0 /xyz/openbmc_project/state/host0 \ + xyz.openbmc_project.State.OperatingSystem.Status OperatingSystemState s \ + xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Standby; + else + busctl set-property xyz.openbmc_project.State.Host0 \ + /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.OperatingSystem.Status OperatingSystemState s \ + xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Inactive; + fi +} + +# Set Post Led out GPIO N0-N7 +set_gpio led-postcode-0 1 +set_gpio led-postcode-1 1 +set_gpio led-postcode-2 1 +set_gpio led-postcode-3 1 +set_gpio led-postcode-4 1 +set_gpio led-postcode-5 1 +set_gpio led-postcode-6 1 +set_gpio led-postcode-7 1 + +# gpiochip0 166 +set_gpio led-identify-gate 0 + +# Set SGPIO Initial Value +# SGPIO Out Bit-01 +set_gpio power-config-disable-e1s-0 0 +# SGPIO Out Bit-05 +set_gpio power-config-disable-e1s-1 0 +# SGPIO Out Bit-09 +set_gpio power-config-asic-module-enable 1 + +# SGPIO Out Bit-11 +set_gpio power-config-asic-power-good 1 +# SGPIO Out Bit-13 +set_gpio power-config-pdb-power-good 1 +# SGPIO Out Bit-15 +set_gpio smi-control-n 1 +# SGPIO Out Bit-17 +set_gpio nmi-control-n 1 +# SGPIO Out Bit-19 +set_gpio nmi-control-sync-flood-n 1 + +# SGPIO Out Bit-25 +set_gpio FM_CPU_SP5R1 0 +# SGPIO Out Bit-27 +set_gpio FM_CPU_SP5R2 0 +# SGPIO Out Bit-29 +set_gpio FM_CPU_SP5R3 0 + +# SGPIO Out Bit-31 +set_gpio FM_CPU_SP5R4 0 +# SGPIO Out Bit-33 +set_gpio FM_CPU0_SA0 0 +# SGPIO Out Bit-35 +set_gpio FM_CPU0_SA1 0 +# SGPIO Out Bit-37 +set_gpio rt-cpu0-p0-enable 1 +# SGPIO Out Bit-39 +set_gpio rt-cpu0-p1-enable 1 + +# SGPIO Out Bit-41 +set_gpio smb-rt-rom-p0-select 0 +# SGPIO Out Bit-43 +set_gpio smb-rt-rom-p1-select 0 +# SGPIO Out Bit-45 +set_gpio i3c-cpu-mux0-oe-n 0 +# SGPIO Out Bit-47 +set_gpio i3c-cpu-mux0-select 0 +# SGPIO Out Bit-49 +set_gpio i3c-cpu-mux1-oe-n 0 + +# SGPIO Out Bit-51 +set_gpio i3c-cpu-mux1-select 0 +# SGPIO Out Bit-53 +set_gpio reset-control-bmc 1 +# SGPIO Out Bit-55 +set_gpio reset-control-cpu0-p0-mux 1 +# SGPIO Out Bit-57 +set_gpio reset-control-cpu0-p1-mux 1 +# SGPIO Out Bit-59 +set_gpio reset-control-e1s-mux 1 + +# SGPIO Out Bit-61 +set_gpio reset-control-mb-mux 1 +# SGPIO Out Bit-63 +set_gpio reset-control-smb-e1s-0 1 +# SGPIO Out Bit-65 +set_gpio reset-control-smb-e1s-1 1 +# SGPIO Out Bit-67 +set_gpio reset-control-srst 1 +# SGPIO Out Bit-69 +set_gpio reset-control-usb-hub 1 + +# SGPIO Out Bit-71 +set_gpio reset-control 1 +# SGPIO Out Bit-73 +set_gpio reset-control-cpu-kbrst 1 +# SGPIO Out Bit-75 +set_gpio reset-control-platrst 1 +# SGPIO Out Bit-77 +set_gpio bmc-jtag-mux-select-0 0 +# SGPIO Out Bit-79 +set_gpio bmc-jtag-mux-select-1 0 +# SGPIO Out Bit-81 +set_gpio bmc-jtag-select 1 +# SGPIO Out Bit-87 +set_gpio rt-cpu0-p0-force-enable 0 +# SGPIO Out Bit-89 +set_gpio rt-cpu0-p1-force-enable 0 +# SGPIO Out Bit-91 +set_gpio bios-debug-msg-disable 1 +# SGPIO Out Bit-93 +set_gpio uart-control-buffer-select 0 +# SGPIO Out Bit-95 +set_gpio ac-control-n 0 +# SGPIO Out Bit-83 +set_gpio bmc-ready-n 0 +# SGPIO Out Bit-85 +set_gpio bmc-ready-sgpio 1 + +# Create /dev/mem +if [ ! -c /dev/mem ]; then + /bin/mknod /dev/mem c 1 1 +fi + +# The workaround is to disable GPIO passthrough, +# which is enabled by a hardware strap pin that is active high. +# This design is intended for a debug presence pin, +# so the default value is pulled high. +devmem 0x1e6e251c 32 0 + +# Initial Power status. +power_good_init +post_end_init diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/multi-gpios-sys-init.service b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/multi-gpios-sys-init.service new file mode 100644 index 0000000000..1ee870bd36 --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/multi-gpios-sys-init.service @@ -0,0 +1,11 @@ +[Unit] +Wants=xyz.openbmc_project.State.Host@0.service +After=xyz.openbmc_project.State.Host@0.service + +[Service] +Type=oneshot +ExecStart=/usr/libexec/phosphor-gpio-monitor/multi-gpios-sys-init +SyslogIdentifier=Power Good Status Init + +[Install] +WantedBy=multi-user.target diff --git a/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-multi-gpio-monitor.conf b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-multi-gpio-monitor.conf new file mode 100644 index 0000000000..f70d5f54ec --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-multi-gpio-monitor.conf @@ -0,0 +1,3 @@ +[Unit] +Wants=multi-gpios-sys-init.service +After=multi-gpios-sys-init.service 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 new file mode 100644 index 0000000000..8cab74b66c --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/plat-phosphor-multi-gpio-monitor.json @@ -0,0 +1,38 @@ +[ + { + "Name": "reset-button", + "ChipId": "0", + "GpioNum": 122, + "EventMon": "BOTH", + "Targets": { + "RISING": ["deassert-reset-button.service"], + "FALLING": ["assert-reset-button.service"] + + }, + "Continue": true + }, + { + "Name": "power-host-good", + "ChipId": "2", + "GpioNum": 60, + "EventMon": "BOTH", + "Targets": { + "RISING": ["deassert-power-good.service"], + "FALLING": ["assert-power-good.service"] + + }, + "Continue": true + }, + { + "Name": "host-ready-n", + "ChipId": "2", + "GpioNum": 66, + "EventMon": "BOTH", + "Targets": { + "RISING": ["deassert-post-end.service"], + "FALLING": ["assert-post-end.service"] + + }, + "Continue": true + } +] 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 new file mode 100644 index 0000000000..8ab2deb3b0 --- /dev/null +++ b/meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor_%.bbappend @@ -0,0 +1,59 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" + +inherit obmc-phosphor-systemd systemd + +SRC_URI += "file://plat-phosphor-multi-gpio-monitor.json \ + file://assert-reset-button.service \ + file://assert-power-good.service \ + file://assert-post-end.service \ + file://deassert-reset-button.service \ + file://deassert-power-good.service \ + file://deassert-post-end.service \ + file://multi-gpios-sys-init.service \ + file://multi-gpios-sys-init \ + file://assert-power-good \ + file://deassert-power-good \ + file://assert-post-end \ + file://deassert-post-end \ + file://assert-reset-button \ + file://deassert-reset-button \ + " + +RDEPENDS:${PN}:append:harma = " bash" + +FILES:${PN} += "${systemd_system_unitdir}/*" + +SYSTEMD_SERVICE:${PN} += " \ + assert-reset-button.service \ + assert-power-good.service \ + assert-post-end.service \ + deassert-reset-button.service \ + deassert-power-good.service \ + deassert-post-end.service \ + multi-gpios-sys-init.service \ + " + +SYSTEMD_AUTO_ENABLE = "enable" + +do_install:append:() { + install -d ${D}${datadir}/phosphor-gpio-monitor + install -m 0644 ${WORKDIR}/plat-phosphor-multi-gpio-monitor.json \ + ${D}${datadir}/phosphor-gpio-monitor/phosphor-multi-gpio-monitor.json + + install -d ${D}${systemd_system_unitdir}/ + install -m 0644 ${WORKDIR}/*.service ${D}${systemd_system_unitdir}/ + + install -d ${D}${libexecdir}/${PN} + install -m 0777 ${WORKDIR}/multi-gpios-sys-init ${D}${libexecdir}/${PN}/ + + install -m 0777 ${WORKDIR}/assert-reset-button ${D}${libexecdir}/${PN}/ + install -m 0777 ${WORKDIR}/deassert-reset-button ${D}${libexecdir}/${PN}/ + + install -m 0777 ${WORKDIR}/assert-post-end ${D}${libexecdir}/${PN}/ + install -m 0777 ${WORKDIR}/deassert-post-end ${D}${libexecdir}/${PN}/ + + install -m 0777 ${WORKDIR}/assert-power-good ${D}${libexecdir}/${PN}/ + install -m 0777 ${WORKDIR}/deassert-power-good ${D}${libexecdir}/${PN}/ +} + +SYSTEMD_OVERRIDE:${PN}-monitor:harma += "phosphor-multi-gpio-monitor.conf:phosphor-multi-gpio-monitor.service.d/phosphor-multi-gpio-monitor.conf" |