summaryrefslogtreecommitdiff
path: root/meta-ampere
diff options
context:
space:
mode:
authorThuBaNguyen <thu@os.amperecomputing.com>2021-07-02 11:39:57 +0300
committerThuBaNguyen <thu@os.amperecomputing.com>2021-08-04 17:05:59 +0300
commit33109174ab92b491001a95d5e51ec7f04e7e8e6c (patch)
treec6060e503af7ce4c190762d96e82b81acb51d59e /meta-ampere
parent9dccc52b92ae7a112469112029be7f08d55517b5 (diff)
downloadopenbmc-33109174ab92b491001a95d5e51ec7f04e7e8e6c.tar.xz
meta-ampere: mtjade: add mtjade-gpio-config package
The OCP module in Mt.Jade platform supports the GPIO pins to set the power state. The SPI0 module also supports the GPIO pins to config SPI mode. These gpio pins have to be set to the right states before power off/on. The mtjade-gpio-config package will support that. Tested: 1. Power off/on the host. 2. The OCP and SPI0 gpio pins should be in the corrected states. Signed-off-by: ThuBaNguyen <thu@os.amperecomputing.com> Change-Id: I46bca50222b0428f73aa9c05003f650f6ec0cc0b
Diffstat (limited to 'meta-ampere')
-rw-r--r--meta-ampere/meta-jade/conf/machine/mtjade.conf1
-rw-r--r--meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config.bb44
-rw-r--r--meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config/ampere-gpio-poweroff@.service10
-rw-r--r--meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config/ampere-gpio-poweron@.service10
-rw-r--r--meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config/ampere_gpio_utils.sh43
-rw-r--r--meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-defs.sh8
-rw-r--r--meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-lib.sh3
7 files changed, 118 insertions, 1 deletions
diff --git a/meta-ampere/meta-jade/conf/machine/mtjade.conf b/meta-ampere/meta-jade/conf/machine/mtjade.conf
index 558a6f404..8c43cbd60 100644
--- a/meta-ampere/meta-jade/conf/machine/mtjade.conf
+++ b/meta-ampere/meta-jade/conf/machine/mtjade.conf
@@ -33,6 +33,7 @@ OBMC_IMAGE_EXTRA_INSTALL_append = "\
ampere-usbnet \
ampere-flash-utils \
ampere-mac-update \
+ mtjade-gpio-config \
"
PREFERRED_PROVIDER_virtual/obmc-chassis-mgmt = "packagegroup-ampere-apps"
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config.bb b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config.bb
new file mode 100644
index 000000000..69fedd67a
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config.bb
@@ -0,0 +1,44 @@
+SUMMARY = "Ampere Computing LLC Utilities"
+DESCRIPTION = "Ampere Utilities for Mt.Jade systems"
+PR = "r1"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+inherit systemd
+inherit obmc-phosphor-systemd
+
+S = "${WORKDIR}"
+
+SRC_URI = " \
+ file://ampere_gpio_utils.sh \
+ "
+
+DEPENDS = "systemd"
+RDEPENDS_${PN} = "bash"
+
+SYSTEMD_PACKAGES = "${PN}"
+
+SYSTEMD_SERVICE_${PN} = " \
+ ampere-gpio-poweroff@.service \
+ ampere-gpio-poweron@.service \
+ "
+
+# chassis power on
+CHASSIS_POWERON_SVC = "ampere-gpio-poweron@.service"
+CHASSIS_POWERON_INSTMPL = "ampere-gpio-poweron@{0}.service"
+CHASSIS_POWERON_TGTFMT = "obmc-chassis-poweron@{0}.target"
+CHASSIS_POWERON_FMT = "../${CHASSIS_POWERON_SVC}:${CHASSIS_POWERON_TGTFMT}.requires/${CHASSIS_POWERON_INSTMPL}"
+SYSTEMD_LINK_${PN} += "${@compose_list_zip(d, 'CHASSIS_POWERON_FMT', 'OBMC_CHASSIS_INSTANCES')}"
+
+# chassis power off
+CHASSIS_POWEROFF_SVC = "ampere-gpio-poweroff@.service"
+CHASSIS_POWEROFF_INSTMPL = "ampere-gpio-poweroff@{0}.service"
+CHASSIS_POWEROFF_TGTFMT = "obmc-chassis-poweroff@{0}.target"
+CHASSIS_POWEROFF_FMT = "../${CHASSIS_POWEROFF_SVC}:${CHASSIS_POWEROFF_TGTFMT}.requires/${CHASSIS_POWEROFF_INSTMPL}"
+SYSTEMD_LINK_${PN} += "${@compose_list_zip(d, 'CHASSIS_POWEROFF_FMT', 'OBMC_CHASSIS_INSTANCES')}"
+
+do_install() {
+ install -d ${D}/usr/sbin
+ install -m 0755 ${WORKDIR}/ampere_gpio_utils.sh ${D}/${sbindir}/
+}
+
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config/ampere-gpio-poweroff@.service b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config/ampere-gpio-poweroff@.service
new file mode 100644
index 000000000..78862eb32
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config/ampere-gpio-poweroff@.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Ampere set GPIOs before power off
+Requires=op-wait-power-off@%i.service
+Before=op-wait-power-off@%i.service
+Conflicts=obmc-chassis-poweron@%i.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/env ampere_gpio_utils.sh power off
+SyslogIdentifier=ampere_gpio_utils \ No newline at end of file
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config/ampere-gpio-poweron@.service b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config/ampere-gpio-poweron@.service
new file mode 100644
index 000000000..09aa58826
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config/ampere-gpio-poweron@.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Ampere set GPIOs before power on
+Requires=op-wait-power-on@%i.service
+Before=op-wait-power-on@%i.service
+Conflicts=obmc-chassis-poweroff@%i.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/env ampere_gpio_utils.sh power on
+SyslogIdentifier=ampere_gpio_utils
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config/ampere_gpio_utils.sh b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config/ampere_gpio_utils.sh
new file mode 100644
index 000000000..8e4f455bf
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-gpio-config/ampere_gpio_utils.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+source /usr/sbin/gpio-defs.sh
+source /usr/sbin/gpio-lib.sh
+
+function usage() {
+ echo "usage: ampere_gpio_utils.sh [power] [on|off]";
+}
+
+set_gpio_power_off() {
+ echo "Setting GPIO before Power off"
+ gpio_configure_output $OCP_AUX_PWREN 1
+ gpio_configure_output $OCP_MAIN_PWREN 0
+ gpio_configure_output $SPI0_PROGRAM_SEL 0
+}
+
+set_gpio_power_on() {
+ echo "Setting GPIO before Power on"
+ gpio_configure_output $OCP_AUX_PWREN 1
+ gpio_configure_output $OCP_MAIN_PWREN 1
+ gpio_configure_output $SPI0_PROGRAM_SEL 1
+ gpio_configure_output $SPI0_BACKUP_SEL 0
+}
+
+if [ $# -lt 2 ]; then
+ echo "Total number of parameter=$#"
+ echo "Insufficient parameter"
+ usage;
+ exit 0;
+fi
+
+if [ $1 == "power" ]; then
+ if [ $2 == "on" ]; then
+ set_gpio_power_on
+ elif [ $2 == "off" ]; then
+ set_gpio_power_off
+ fi
+ exit 0;
+else
+ echo "Invalid parameter1=$1"
+ usage;
+ exit 0;
+fi
+exit 0;
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-defs.sh b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-defs.sh
index fce59d581..7c887d409 100644
--- a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-defs.sh
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-defs.sh
@@ -30,3 +30,11 @@ SLAVE_PRESENT_L=230
### Common GPIOs
SYS_PSON_L=42
BMC_READY=229
+
+### OCP power selection
+OCP_AUX_PWREN=139
+OCP_MAIN_PWREN=140
+
+### SPI0 Mode selection
+SPI0_PROGRAM_SEL=226
+SPI0_BACKUP_SEL=227
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-lib.sh b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-lib.sh
index fcc2d5411..8d1aa61d7 100644
--- a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-lib.sh
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-lib.sh
@@ -1,7 +1,8 @@
#!/bin/bash
+source /usr/sbin/gpio-defs.sh
function gpio_number() {
- GPIO_BASE=$(cat /sys/class/gpio/gpio*/base)
+ GPIO_BASE=$(cat /sys/class/gpio/gpiochip$GPIO_CHIP0_BASE/base)
echo $((${GPIO_BASE} + $1))
}