summaryrefslogtreecommitdiff
path: root/meta-ampere/meta-jade/recipes-ampere
diff options
context:
space:
mode:
Diffstat (limited to 'meta-ampere/meta-jade/recipes-ampere')
-rwxr-xr-xmeta-ampere/meta-jade/recipes-ampere/flash/ampere-flash-utils/ampere_flash_bios.sh20
-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.bb22
-rw-r--r--meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_host_check.sh45
-rw-r--r--meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_power_util.sh131
-rw-r--r--meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-defs.sh40
-rw-r--r--meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-lib.sh31
10 files changed, 383 insertions, 13 deletions
diff --git a/meta-ampere/meta-jade/recipes-ampere/flash/ampere-flash-utils/ampere_flash_bios.sh b/meta-ampere/meta-jade/recipes-ampere/flash/ampere-flash-utils/ampere_flash_bios.sh
index 876671c1b..7a9ace30e 100755
--- a/meta-ampere/meta-jade/recipes-ampere/flash/ampere-flash-utils/ampere_flash_bios.sh
+++ b/meta-ampere/meta-jade/recipes-ampere/flash/ampere-flash-utils/ampere_flash_bios.sh
@@ -15,6 +15,8 @@
# limitations under the License.
do_flash () {
+ OFFSET=$1
+
# Check the PNOR partition available
HOST_MTD=$(cat /proc/mtd | grep "pnor" | sed -n 's/^\(.*\):.*/\1/p')
if [ -z "$HOST_MTD" ];
@@ -30,18 +32,10 @@ do_flash () {
echo "Fail to probe Host SPI-NOR device"
exit 1
fi
-
- echo "--- Flashing firmware to @/dev/$HOST_MTD"
- flash_eraseall /dev/$HOST_MTD
- flashcp -v $IMAGE /dev/$HOST_MTD
-
- echo "--- Unbind the ASpeed SMC driver"
- echo 1e630000.spi > /sys/bus/platform/drivers/aspeed-smc/unbind
- else
- echo "--- Flashing firmware to @/dev/$HOST_MTD"
- flash_eraseall /dev/$HOST_MTD
- flashcp -v $IMAGE /dev/$HOST_MTD
fi
+
+ echo "--- Flashing firmware to @/dev/$HOST_MTD offset=$OFFSET"
+ flashcp -v $IMAGE /dev/$HOST_MTD $OFFSET
}
@@ -84,7 +78,7 @@ if [[ $? -ne 0 ]]; then
fi
# Flash the firmware
-do_flash
+do_flash 0x400000
# Switch the host SPI bus to HOST."
echo "--- Switch the host SPI bus to HOST."
@@ -99,5 +93,5 @@ if [ "$chassisstate" == 'On' ];
then
sleep 5
echo "Turn on the Host"
- obmcutil chassison
+ obmcutil poweron
fi
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.bb b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils.bb
new file mode 100644
index 000000000..159ccdd64
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Ampere Platform Environment Definitions"
+DESCRIPTION = "Ampere Platform Environment Definitions"
+PR = "r1"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+SRC_URI = " \
+ file://gpio-defs.sh \
+ file://gpio-lib.sh \
+ file://ampere_power_util.sh \
+ file://ampere_host_check.sh \
+ "
+
+RDEPENDS_${PN} = "bash"
+
+do_install() {
+ install -d ${D}/usr/sbin
+ install -m 0755 ${WORKDIR}/gpio-lib.sh ${D}/${sbindir}/
+ install -m 0755 ${WORKDIR}/gpio-defs.sh ${D}/${sbindir}/
+ install -m 0755 ${WORKDIR}/ampere_power_util.sh ${D}/${sbindir}/
+ install -m 0755 ${WORKDIR}/ampere_host_check.sh ${D}/${sbindir}/
+} \ No newline at end of file
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_host_check.sh b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_host_check.sh
new file mode 100644
index 000000000..9eeeeca5a
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_host_check.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+
+source /usr/sbin/gpio-defs.sh
+source /usr/sbin/gpio-lib.sh
+
+host_status() {
+ st=$(busctl get-property xyz.openbmc_project.State.Host /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.Host CurrentHostState | cut -d"." -f6)
+ if [ "$st" == "Running\"" ]; then
+ echo "on"
+ else
+ echo "off"
+ fi
+}
+
+createFile=$1
+setState=$2
+
+if [ $(host_status) == "on" ]; then
+ exit 0
+fi
+
+# Time out to check S0_FW_BOOT_OK is 60 seconds
+cnt=60
+val=0
+while [ $cnt -gt 0 ];
+do
+ val=$(gpio_get_val $S0_CPU_FW_BOOT_OK)
+ cnt=$((cnt - 1))
+ echo "$cnt S0_CPU_FW_BOOT_OK = $val"
+ if [ $val == 1 ]; then
+ # Sleep 5 second before the host is ready
+ sleep 5
+ if [ $createFile == 1 ]; then
+ if [ ! -d "/run/openbmc" ]; then
+ mkdir -p /run/openbmc
+ fi
+ echo "Creating /run/openbmc/host@0-on"
+ touch /run/openbmc/host@0-on
+ fi
+ exit 0
+ fi
+ sleep 1
+done
+
+exit 1
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_power_util.sh b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_power_util.sh
new file mode 100644
index 000000000..2c8ba3d91
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_power_util.sh
@@ -0,0 +1,131 @@
+#!/bin/bash
+#ampere_platform_config.sh is platform configuration file
+source /usr/sbin/gpio-defs.sh
+
+# Usage of this utility
+function usage() {
+ echo "usage: power-util mb [status|shutdown_ack|force_reset|soft_off]";
+}
+
+power_status() {
+ st=$(busctl get-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis CurrentPowerState | cut -d"." -f6)
+ if [ "$st" == "On\"" ]; then
+ echo "on"
+ else
+ echo "off"
+ fi
+}
+
+shutdown_ack() {
+ if [ -f "/run/openbmc/host@0-softpoweroff" ]; then
+ echo "Receive shutdown ACK triggered after softportoff the host."
+ touch /run/openbmc/host@0-softpoweroff-shutdown-ack
+ else
+ echo "Receive shutdown ACK triggered"
+ sleep 3
+ systemctl start obmc-chassis-poweroff@0.target
+ fi
+}
+
+soft_off() {
+ # Trigger shutdown_req
+ touch /run/openbmc/host@0-softpoweroff
+ gpioset -l $GPIO_CHIP0_IDX $S0_SHD_REQ_L=1
+ sleep 1s
+ gpioset -l $GPIO_CHIP0_IDX $S0_SHD_REQ_L=0
+
+ # Wait for shutdown_ack from the host in 30 seconds
+ cnt=30
+ while [ $cnt -gt 0 ];
+ do
+ # Wait for SHUTDOWN_ACK and create the host@0-softpoweroff-shutdown-ack
+ if [ -f "/run/openbmc/host@0-softpoweroff-shutdown-ack" ]; then
+ break
+ fi
+ sleep 1
+ cnt=$((cnt - 1))
+ done
+ # Softpoweroff is successed
+ sleep 2
+ rm -rf /run/openbmc/host@0-softpoweroff
+ if [ -f "/run/openbmc/host@0-softpoweroff-shutdown-ack" ]; then
+ rm -rf /run/openbmc/host@0-softpoweroff-shutdown-ack
+ fi
+ echo 0
+}
+
+force_reset() {
+ if [ -f "/run/openbmc/host@0-softpoweroff" ]; then
+ # In graceful host reset, after trigger os shutdown,
+ # the phosphor-state-manager will call force-warm-reset
+ # in this case the force_reset should wait for shutdown_ack from host
+ cnt=30
+ while [ $cnt -gt 0 ];
+ do
+ if [ -f "/run/openbmc/host@0-softpoweroff-shutdown-ack" ]; then
+ break
+ fi
+ echo "Waiting for shutdown-ack count down $cnt"
+ sleep 1
+ cnt=$((cnt - 1))
+ done
+ # The host OS is failed to shutdown
+ if [ $cnt == 0 ]; then
+ echo "Shutdown-ack time out after 30s."
+ exit 0
+ fi
+ fi
+ echo "Triggering sysreset pin"
+ gpioset -l $GPIO_CHIP0_IDX $S0_SYSRESET_L=1
+ sleep 1
+ gpioset -l $GPIO_CHIP0_IDX $S0_SYSRESET_L=0
+}
+
+if [ $# -lt 2 ]; then
+ echo "Total number of parameter=$#"
+ echo "Insufficient parameter"
+ usage;
+ exit 0;
+fi
+
+if [ $1 != "mb" ]; then
+ echo "Invalid parameter1=$1"
+ usage;
+ exit 0;
+fi
+
+# check if power guard enabled
+dir="/run/systemd/system/"
+file="reboot-guard.conf"
+units=("reboot" "poweroff" "halt")
+for unit in "${units[@]}"; do
+ if [ -f ${dir}${unit}.target.d/${file} ]; then
+ echo "PowerGuard enabled, cannot do power control, exit!!!"
+ exit -1
+ fi
+done
+
+if [ ! -d "/run/openbmc/" ]; then
+ mkdir -p "/run/openbmc/"
+fi
+
+if [ $2 == "shutdown_ack" ]; then
+ shutdown_ack
+elif [ $2 == "status" ]; then
+ power_status
+elif [ $2 == "force_reset" ]; then
+ force_reset
+elif [ $2 == "soft_off" ]; then
+ ret=$(soft_off)
+ if [ $ret == 0 ]; then
+ echo "The host is already softoff"
+ else
+ echo "Failed to softoff the host"
+ fi
+ exit $ret;
+else
+ echo "Invalid parameter2=$2"
+ usage;
+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
new file mode 100644
index 000000000..7c887d409
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-defs.sh
@@ -0,0 +1,40 @@
+# Index of GPIO device in gpioget/gpioset
+GPIO_CHIP0_IDX=0
+GPIO_CHIP1_IDX=1
+
+# Base of GPIO chip in /sys/class/gpio
+GPIO_CHIP0_BASE=792
+GPIO_CHIP1_BASE=780
+
+### Power control configuration
+# Power control gpios
+S0_SHD_REQ_L=49
+S0_SHD_ACK_L=50
+S0_REBOOT_ACK_L=75
+S0_SYSRESET_L=91
+
+
+### Table 1: GPIO Assignments
+S0_CPU_FW_BOOT_OK=48
+CPU_BMC_OVERTEMP_L=51
+CPU_BMC_HIGHTEMP_L=72
+CPU_FAULT_ALERT=73
+S1_CPU_FW_BOOT_OK=202
+
+### Table 2: Alert and Additional Miscellaneous Signals
+S0_SCP_AUTH_FAILURE=74
+S1_SCP_AUTH_FAILURE=205
+BMC_OK=228
+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
new file mode 100644
index 000000000..8d1aa61d7
--- /dev/null
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/gpio-lib.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+source /usr/sbin/gpio-defs.sh
+
+function gpio_number() {
+ GPIO_BASE=$(cat /sys/class/gpio/gpiochip$GPIO_CHIP0_BASE/base)
+ echo $((${GPIO_BASE} + $1))
+}
+
+# Configure GPIO as output and set its value
+function gpio_configure_output() {
+ gpioId=$(gpio_number $1)
+ echo $gpioId > /sys/class/gpio/export
+ echo out > /sys/class/gpio/gpio${gpioId}/direction
+ echo $2 > /sys/class/gpio/gpio${gpioId}/value
+ echo $gpioId > /sys/class/gpio/unexport
+}
+
+function gpio_get_val() {
+ gpioId=$(gpio_number $1)
+ echo $gpioId > /sys/class/gpio/export
+ echo $(cat /sys/class/gpio/gpio$gpioId/value)
+ echo $gpioId > /sys/class/gpio/unexport
+}
+
+# Configure GPIO as input
+function gpio_configure_input() {
+ gpioId=$(gpio_number $1)
+ echo $gpioId > /sys/class/gpio/export
+ echo "in" > /sys/class/gpio/gpio${gpioId}/direction
+ echo $gpioId > /sys/class/gpio/unexport
+}