diff options
author | Chanh Nguyen <chanh@os.amperecomputing.com> | 2022-04-28 12:11:28 +0300 |
---|---|---|
committer | Thang Q. Nguyen <thang@os.amperecomputing.com> | 2022-10-15 02:04:30 +0300 |
commit | 2fc68eb6724541610fbae14c356b857fc529dd71 (patch) | |
tree | 3a1988c96eff73023d1aff3f7e713d53015bc06b /meta-ampere/meta-mitchell/recipes-ampere | |
parent | 9f71c1e71d618145d7bf82ee0d71ea06c3680a30 (diff) | |
download | openbmc-2fc68eb6724541610fbae14c356b857fc529dd71.tar.xz |
meta-ampere: Initial AmpereOne(TM) Mt. Mitchell's non-DC-SCM BMC support
Add new Mt.Mitchell platform with basic features so that it can be
compiled and works.
Tested:
1. Compile for Mt.Mitchell successful.
2. Flash and check for the firmware can boot on the Mt.Mitchell
non-DC-SCM system without issue
Signed-off-by: Chanh Nguyen <chanh@os.amperecomputing.com>
Change-Id: I8dc9db9029b27c0c6325c31d368cdbb614a3c8b6
Diffstat (limited to 'meta-ampere/meta-mitchell/recipes-ampere')
8 files changed, 359 insertions, 0 deletions
diff --git a/meta-ampere/meta-mitchell/recipes-ampere/packagegroups/packagegroup-obmc-ampere-apps.bb b/meta-ampere/meta-mitchell/recipes-ampere/packagegroups/packagegroup-obmc-ampere-apps.bb new file mode 100644 index 0000000000..d1c7e7e7b9 --- /dev/null +++ b/meta-ampere/meta-mitchell/recipes-ampere/packagegroups/packagegroup-obmc-ampere-apps.bb @@ -0,0 +1,53 @@ +SUMMARY = "OpenBMC for Ampere - Applications" +PR = "r1" + +inherit packagegroup + +PROVIDES = "${PACKAGES}" +PACKAGES = " \ + ${PN}-chassis \ + ${PN}-flash \ + ${PN}-system \ + " + +PROVIDES += "virtual/obmc-chassis-mgmt" +PROVIDES += "virtual/obmc-flash-mgmt" +PROVIDES += "virtual/obmc-system-mgmt" + +RPROVIDES:${PN}-chassis += "virtual-obmc-chassis-mgmt" +RPROVIDES:${PN}-flash += "virtual-obmc-flash-mgmt" +RPROVIDES:${PN}-system += "virtual-obmc-system-mgmt" + +SUMMARY:${PN}-chassis = "Ampere Chassis" +RDEPENDS:${PN}-chassis = " \ + obmc-phosphor-buttons-signals \ + obmc-phosphor-buttons-handler \ + obmc-op-control-power \ + ampere-hostctrl \ + phosphor-hostlogger \ + phosphor-sel-logger \ + phosphor-logging \ + " + +SUMMARY:${PN}-system = "Ampere System" +RDEPENDS:${PN}-system = " \ + smbios-mdr \ + " + +SUMMARY:${PN}-flash = "Ampere Flash" +RDEPENDS:${PN}-flash = " \ + phosphor-software-manager \ + " + +RDEPENDS:${PN}-inventory:append = " \ + dbus-sensors \ + entity-manager \ + " + +RDEPENDS:${PN}-extras:append = " \ + webui-vue \ + phosphor-virtual-sensor \ + " +RDEPENDS:${PN}-extras:remove = " phosphor-hwmon" + +VIRTUAL-RUNTIME_obmc-sensors-hwmon ?= "dbus-sensors" diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init.bb b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init.bb new file mode 100644 index 0000000000..dd5f599d4b --- /dev/null +++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init.bb @@ -0,0 +1,35 @@ +SUMMARY = "Phosphor OpenBMC Platform Init Service" +DESCRIPTION = "Phosphor OpenBMC Platform Init Daemon" + +PR = "r1" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +inherit systemd +inherit obmc-phosphor-systemd + +DEPENDS += "systemd" +RDEPENDS:${PN} += "libsystemd" +RDEPENDS:${PN} += "bash" + +SRC_URI = " \ + file://ampere-platform-init.service \ + file://ampere-bmc-heartbeat.service \ + file://ampere_platform_init.sh \ + file://ampere_bmc_heartbeat.sh \ + file://${MACHINE}_platform_gpios_init.sh \ + file://gpio-lib.sh \ + " +SYSTEMD_PACKAGES = "${PN}" +SYSTEMD_SERVICE:${PN} = "ampere-platform-init.service ampere-bmc-heartbeat.service" + +do_install () { + install -d ${D}${sbindir} + install -m 0755 ${WORKDIR}/gpio-lib.sh ${D}${sbindir}/ + install -m 0755 ${WORKDIR}/ampere_platform_init.sh ${D}${sbindir}/ + install -m 0755 ${WORKDIR}/ampere_bmc_heartbeat.sh ${D}${sbindir}/ + install -m 0755 ${WORKDIR}/${MACHINE}_platform_gpios_init.sh ${D}${sbindir}/platform_gpios_init.sh + install -d ${D}${systemd_unitdir}/system/ + install -m 0644 ${WORKDIR}/ampere-platform-init.service ${D}${systemd_unitdir}/system +} + diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/ampere-bmc-heartbeat.service b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/ampere-bmc-heartbeat.service new file mode 100644 index 0000000000..d491fd9c6e --- /dev/null +++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/ampere-bmc-heartbeat.service @@ -0,0 +1,14 @@ +[Unit] +Description=Ampere BMC heartbeat service +Wants=obmc-mapper.target +After=obmc-mapper.target + +[Service] +Type=simple +Restart=always +ExecStart=/usr/bin/env ampere_bmc_heartbeat.sh +SyslogIdentifier = "ampere-bmc-heartbeat" + +[Install] +WantedBy=multi-user.target + diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/ampere-platform-init.service b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/ampere-platform-init.service new file mode 100644 index 0000000000..72a34cba64 --- /dev/null +++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/ampere-platform-init.service @@ -0,0 +1,11 @@ +[Unit] +Description = Ampere Platform Initialization + +[Service] +Restart=no +RemainAfterExit=true +Type=oneshot +ExecStart=/usr/sbin/ampere_platform_init.sh + +[Install] +WantedBy=sysinit.target diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/ampere_bmc_heartbeat.sh b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/ampere_bmc_heartbeat.sh new file mode 100644 index 0000000000..5ecea31e6c --- /dev/null +++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/ampere_bmc_heartbeat.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# shellcheck disable=SC2154 +# shellcheck source=/dev/null + +source /usr/sbin/gpio-lib.sh + +value=0 +while true; +do + if [[ $value -eq 0 ]]; then + value=1 + gpio_name_set led-sw-hb 1 + gpio_name_set led-bmc-hb 0 + else + value=0 + gpio_name_set led-sw-hb 0 + gpio_name_set led-bmc-hb 1 + fi + sleep 1s +done diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/ampere_platform_init.sh b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/ampere_platform_init.sh new file mode 100644 index 0000000000..33dc7ea16a --- /dev/null +++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/ampere_platform_init.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +# shellcheck disable=SC2154 +# shellcheck source=/dev/null + +source /usr/sbin/gpio-lib.sh +source /usr/sbin/platform_gpios_init.sh + +#pre platform init function. implemented in platform_gpios_init.sh +pre-platform-init + +# ======================================================= +# Setting default value for device sel and mux +bootstatus=$(cat /sys/class/watchdog/watchdog0/bootstatus) +if [ "$bootstatus" == '32' ]; then + echo "CONFIGURE: gpio pins to output high after AC power" + for gpioName in "${output_high_gpios_in_ac[@]}"; do + gpio_name_set "$gpioName" 1 + done + echo "CONFIGURE: gpio pins to output low after AC power" + for gpioName in "${output_low_gpios_in_ac[@]}"; do + gpio_name_set "$gpioName" 0 + done + echo "CONFIGURE: gpio pins to input after AC power" + for gpioName in "${input_gpios_in_ac[@]}"; do + gpio_name_input "$gpioName" + done +fi + +# ======================================================= +# Setting default value for others gpio pins +echo "CONFIGURE: gpio pins to output high" +for gpioName in "${output_high_gpios_in_bmc_reboot[@]}"; do + gpio_name_set "$gpioName" 1 +done +echo "CONFIGURE: gpio pins to output low" +for gpioName in "${output_low_gpios_in_bmc_reboot[@]}"; do + gpio_name_set "$gpioName" 0 +done +echo "CONFIGURE: gpio pins to input" +for gpioName in "${input_gpios_in_bmc_reboot[@]}"; do + gpio_name_input "$gpioName" +done + +#post platform init function. implemented in platform_gpios_init.sh +post-platform-init + +exit 0 diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/gpio-lib.sh b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/gpio-lib.sh new file mode 100644 index 0000000000..3e503c4909 --- /dev/null +++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/gpio-lib.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +# shellcheck disable=SC2154 +# shellcheck source=/dev/null + +# Configure GPIO as output and set its value +AST2600_GPIO_BASE=( + 816 + 780 +) + +function gpio_configure_output() { + echo "$1" > /sys/class/gpio/export + echo out > /sys/class/gpio/gpio"$1"/direction + echo "$2" > /sys/class/gpio/gpio"$1"/value + echo "$1" > /sys/class/gpio/unexport +} + +function gpio_get_val() { + echo "$1" > /sys/class/gpio/export + cat /sys/class/gpio/gpio"$1"/value + echo "$1" > /sys/class/gpio/unexport +} + +# Configure GPIO as input +function gpio_configure_input() { + echo "$1" > /sys/class/gpio/export + echo "in" > /sys/class/gpio/gpio"$1"/direction + echo "$1" > /sys/class/gpio/unexport +} + +function gpio_name_set() +{ + str=$(gpiofind "$1") + #Verify error code when run gpiofind + if [ "$?" == '1' ]; then + echo "Invalid gpio name $1" + else + gpioid=$(echo "$str"|cut -c 9) + offset=$(echo "$str"|cut -d " " -f 2) + gpioPin=$(("$offset" + ${AST2600_GPIO_BASE[$gpioid]})) + gpio_configure_output "$gpioPin" "$2" + fi +} + +function gpio_name_get() +{ + str=$(gpiofind "$1") + #Verify error code when run gpiofind + if [ "$?" == '1' ]; then + echo "Invalid gpio name $1" + else + offset=$(echo "$str"|cut -d " " -f 2) + gpioid=$(echo "$str"|cut -c 9) + gpioPin=$(("$offset" + ${AST2600_GPIO_BASE[$gpioid]})) + gpio_get_val "$gpioPin" + fi +} + +function gpio_name_input() +{ + str=$(gpiofind "$1") + #Verify error code when run gpiofind + if [ "$?" == '1' ]; then + echo "Invalid gpio name $1" + else + gpioid=$(echo "$str"|cut -c 9) + offset=$(echo "$str"|cut -d " " -f 2) + gpioPin=$(("$offset" + ${AST2600_GPIO_BASE[$gpioid]})) + gpio_configure_input "$gpioPin" + fi +}
\ No newline at end of file diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/mtmitchell_platform_gpios_init.sh b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/mtmitchell_platform_gpios_init.sh new file mode 100644 index 0000000000..4c304668eb --- /dev/null +++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/mtmitchell_platform_gpios_init.sh @@ -0,0 +1,105 @@ +#!/bin/bash + +# shellcheck disable=SC2154 +# shellcheck source=/dev/null + +source /usr/sbin/gpio-lib.sh + +function bind_rtc_driver() { + # If rtc device can not present, bind the device + if [[ ! -e /dev/rtc0 ]]; then + echo "Bind rtc driver" + echo 6-0051 > /sys/bus/i2c/drivers/rtc-pcf85063/bind + fi +} + +function pre-platform-init() { + echo "Do pre platform init" +} + +function post-platform-init() { + # gpio-leds is controlling bmc-ready, not by gpio + echo 1 > /sys/class/leds/bmc-ready/brightness + + # Bind rtc driver + bind_rtc_driver +} + +export output_high_gpios_in_ac=( + # add device enable, mux setting, device select gpios + "spi0-backup-sel" + "i2c-backup-sel" +) + +export output_low_gpios_in_ac=( + # add device enable, mux setting, device select gpios + "spi0-program-sel" + "ocp-main-pwren" +) + +export input_gpios_in_ac=( + # add device enable, mux setting, device select gpios +) + +export output_high_gpios_in_bmc_reboot=( + "host0-sysreset-n" + "host0-pmin-n" + "vrd-sel" + "spd-sel" + "ext-high-temp-n" + "wd-disable-n" + "hpm-stby-rst-n" + "jtag-sel-s0" + "cpld-user-mode" + "jtag-srst-n" + "host0-shd-req-n" +) + +export output_low_gpios_in_bmc_reboot=( + "rtc-battery-voltage-read-enable" + "s0-rtc-lock" + "hpm-fw-recovery" + "led-fault" + "spi-nor-access" + "host0-special-boot" +) + +export input_gpios_in_bmc_reboot=( + "s0-vrd-fault-n" + "s1-vrd-fault-n" + "irq-n" + "presence-ps0" + "presence-ps1" + "hsc-12vmain-alt2-n" + "s0-pcp-oc-warn-n" + "s1-pcp-oc-warn-n" + "cpu-bios-recover" + "s0-heartbeat" + "hs-scout-proc-hot" + "s0-vr-hot-n" + "s1-vr-hot-n" + "hsc-12vmain-alt1-n" + "power-chassis-good" + "power-button" + "s0-ddr-save" + "soc-spi-nor-access" + "presence-cpu0" + "jtag-dbgr-prsnt-n" + "ps0-ac-loss-n" + "ps1-ac-loss-n" + "s1-ddr-save" + "sys-pgood" + "presence-cpu1" + "s0-fault-alert" + "s0-sys-auth-failure-n" + "host0-ready" + "ocp-pgood" + "s1-fault-alert" + "s1-fw-boot-ok" + "s0-spi-auth-fail-n" + "s1-sys-auth-failure-n" + "reset-button" + "ps0-pgood" + "ps1-pgood" + "s0-soc-pgood" +) |