Initial commit
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
SUMMARY = "Phosphor OpenBMC Boot Progress Handling Service"
|
||||
DESCRIPTION = "Phosphor OpenBMC Altra Boot Progress Handling 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_boot_progress.sh \
|
||||
file://dimm_train_fail_log.sh \
|
||||
"
|
||||
|
||||
SYSTEMD_PACKAGES = "${PN}"
|
||||
|
||||
HOST_ON_RESET_HOSTTMPL = "ampere-boot-progress.service"
|
||||
HOST_ON_RESET_HOSTINSTMPL = "ampere-boot-progress.service"
|
||||
HOST_ON_RESET_HOSTTGTFMT = "obmc-host-already-on@{0}.target"
|
||||
HOST_ON_RESET_HOSTFMT = "../${HOST_ON_RESET_HOSTTMPL}:${HOST_ON_RESET_HOSTTGTFMT}.requires/${HOST_ON_RESET_HOSTINSTMPL}"
|
||||
SYSTEMD_LINK:${PN} += "${@compose_list_zip(d, 'HOST_ON_RESET_HOSTFMT', 'OBMC_HOST_INSTANCES')}"
|
||||
|
||||
SYSTEMD_SERVICE:${PN} += "${HOST_ON_RESET_HOSTTMPL}"
|
||||
|
||||
do_install () {
|
||||
install -d ${D}${sbindir}
|
||||
install -m 0755 ${WORKDIR}/ampere_boot_progress.sh ${D}${sbindir}/
|
||||
install -m 0755 ${WORKDIR}/dimm_train_fail_log.sh ${D}${sbindir}/
|
||||
}
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
[Unit]
|
||||
Description=Ampere Altra Boot Progress Handling
|
||||
After=obmc-host-already-on@0.target
|
||||
BindTo=obmc-host-already-on@0.target
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/sbin/ampere_boot_progress.sh
|
||||
SyslogIdentifier=ampere-boot-progress
|
||||
+206
@@ -0,0 +1,206 @@
|
||||
#!/bin/bash
|
||||
# Initialize variables
|
||||
boot_stage=00
|
||||
boot_status=00
|
||||
uefi_code=00000000
|
||||
|
||||
function set_postcode()
|
||||
{
|
||||
# shellcheck disable=SC2086
|
||||
busctl set-property xyz.openbmc_project.State.Boot.Raw \
|
||||
/xyz/openbmc_project/state/boot/raw0 \
|
||||
xyz.openbmc_project.State.Boot.Raw Value \(tay\) "$1" 0
|
||||
}
|
||||
|
||||
function update_boot_progress_last_state_time()
|
||||
{
|
||||
# Get BMC current time
|
||||
bp_last_state_time=$(busctl get-property xyz.openbmc_project.Time.Manager \
|
||||
/xyz/openbmc_project/time/bmc \
|
||||
xyz.openbmc_project.Time.EpochTime \
|
||||
Elapsed | cut -d' ' -f2)
|
||||
|
||||
# Update the Boot Progress LastStateTime
|
||||
busctl set-property xyz.openbmc_project.State.Host \
|
||||
/xyz/openbmc_project/state/host0 \
|
||||
xyz.openbmc_project.State.Boot.Progress \
|
||||
BootProgressLastUpdate t \
|
||||
"$bp_last_state_time"
|
||||
}
|
||||
|
||||
function update_boot_progress()
|
||||
{
|
||||
bootprog=$1
|
||||
|
||||
busctl set-property xyz.openbmc_project.State.Host \
|
||||
/xyz/openbmc_project/state/host0 \
|
||||
xyz.openbmc_project.State.Boot.Progress \
|
||||
BootProgress s \
|
||||
"xyz.openbmc_project.State.Boot.Progress.ProgressStages.$bootprog"
|
||||
|
||||
# Update Boot Progress LastStateTime
|
||||
update_boot_progress_last_state_time
|
||||
}
|
||||
|
||||
function get_boot_stage_string()
|
||||
{
|
||||
bootstage=$1
|
||||
ueficode=$2
|
||||
|
||||
case $bootstage in
|
||||
|
||||
00)
|
||||
boot_stage_str="SMpro"
|
||||
;;
|
||||
|
||||
01)
|
||||
boot_stage_str="PMpro"
|
||||
;;
|
||||
|
||||
02)
|
||||
boot_stage_str="ATF BL1 (Code=${ueficode})"
|
||||
;;
|
||||
|
||||
03)
|
||||
boot_stage_str="DDR initialization (Code=${ueficode})"
|
||||
;;
|
||||
|
||||
04)
|
||||
boot_stage_str="DDR training progress (Code=${ueficode})"
|
||||
;;
|
||||
|
||||
05)
|
||||
boot_stage_str="ATF BL2 (Code=${ueficode})"
|
||||
;;
|
||||
|
||||
06)
|
||||
boot_stage_str="ATF BL31 (Code=${ueficode})"
|
||||
;;
|
||||
|
||||
07)
|
||||
boot_stage_str="ATF BL32 (Code=${ueficode})"
|
||||
;;
|
||||
|
||||
08)
|
||||
boot_stage_str="UEFI booting (UEFI Code=${ueficode})"
|
||||
;;
|
||||
09)
|
||||
boot_stage_str="OS booting"
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
echo "$boot_stage_str"
|
||||
}
|
||||
|
||||
function set_boot_progress()
|
||||
{
|
||||
boot_stage=$1
|
||||
uefi_code=$2
|
||||
|
||||
case $boot_stage in
|
||||
|
||||
02)
|
||||
update_boot_progress "PrimaryProcInit"
|
||||
;;
|
||||
|
||||
03)
|
||||
update_boot_progress "MemoryInit"
|
||||
;;
|
||||
|
||||
08)
|
||||
if [[ "$uefi_code" =~ 0201* ]]; then
|
||||
update_boot_progress "PCIInit"
|
||||
fi
|
||||
;;
|
||||
09)
|
||||
update_boot_progress "OSStart"
|
||||
;;
|
||||
|
||||
esac
|
||||
}
|
||||
|
||||
function log_redfish_biosboot_ok_event()
|
||||
{
|
||||
logger-systemd --journald << EOF
|
||||
MESSAGE=
|
||||
PRIORITY=2
|
||||
SEVERITY=
|
||||
REDFISH_MESSAGE_ID=OpenBMC.0.1.BIOSBoot.OK
|
||||
REDFISH_MESSAGE_ARGS="UEFI firmware booting done"
|
||||
EOF
|
||||
}
|
||||
|
||||
function log_redfish_bios_panic_event()
|
||||
{
|
||||
boot_state_str=$(get_boot_stage_string "$1" "$2")
|
||||
|
||||
logger-systemd --journald << EOF
|
||||
MESSAGE=
|
||||
PRIORITY=2
|
||||
SEVERITY=
|
||||
REDFISH_MESSAGE_ID=OpenBMC.0.1.BIOSFirmwarePanicReason.Warning
|
||||
REDFISH_MESSAGE_ARGS=${boot_state_str}
|
||||
EOF
|
||||
}
|
||||
|
||||
cnt=0
|
||||
# If any reason makes SCP fail to access in 6s, break the service.
|
||||
while [ $cnt -lt 30 ];
|
||||
do
|
||||
# Sleep 200ms
|
||||
sleep 1s
|
||||
if ! read -r bg <<< "$(cat /sys/bus/platform/devices/smpro-misc.2.auto/boot_progress)";
|
||||
then
|
||||
cnt=$((cnt + 1))
|
||||
continue
|
||||
fi
|
||||
cnt=0
|
||||
|
||||
# Check if any update from previous check
|
||||
if [ "$last_bg" == "$bg" ]; then
|
||||
continue
|
||||
fi
|
||||
last_bg=$bg
|
||||
|
||||
# Check if the Host is already ON or not. If Host is already boot, update boot progress and break.
|
||||
if [ "${boot_stage}" == "00" ] && [ "${bg[0]}" == "09" ];
|
||||
then
|
||||
update_boot_progress "OSRunning"
|
||||
break
|
||||
fi
|
||||
|
||||
# Update current boot progress
|
||||
boot_stage=${bg:2:2}
|
||||
boot_status=${bg:0:2}
|
||||
uefi_code=${bg:4}
|
||||
echo "Boot Progress = ${boot_stage} ${boot_status} ${uefi_code}"
|
||||
|
||||
# Log Boot Progress to dbus
|
||||
if [ "${boot_status}" == "03" ]; then
|
||||
# Log Redfish Event if failure.
|
||||
log_redfish_bios_panic_event "$boot_stage" "$uefi_code"
|
||||
# Dimm training failed, check errors
|
||||
if [ "${boot_stage}" == "04" ]; then
|
||||
/usr/sbin/dimm_train_fail_log.sh 0
|
||||
/usr/sbin/dimm_train_fail_log.sh 1
|
||||
fi
|
||||
elif [ "${boot_status}" == "01" ]; then
|
||||
# Check and set boot progress to dbus
|
||||
set_boot_progress "$boot_stage" "$uefi_code"
|
||||
fi
|
||||
|
||||
# Log POST Code to dbus.
|
||||
set_postcode "0x$boot_stage$boot_status$uefi_code"
|
||||
|
||||
# Stop the service when booting to OS
|
||||
if [ "${boot_stage}" == "08" ] && [ "${boot_status}" == "02" ]; then
|
||||
update_boot_progress "SystemInitComplete"
|
||||
log_redfish_biosboot_ok_event
|
||||
elif [ "${boot_stage}" == "09" ] && [ "${boot_status}" == "02" ];
|
||||
then
|
||||
update_boot_progress "OSRunning"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
+190
@@ -0,0 +1,190 @@
|
||||
#!/bin/bash
|
||||
smpro_path() {
|
||||
if [ "$1" == 0 ]; then
|
||||
echo "/sys/bus/i2c/drivers/smpro-core/2-004f"
|
||||
else
|
||||
echo "/sys/bus/i2c/drivers/smpro-core/2-004e"
|
||||
fi
|
||||
}
|
||||
|
||||
function log_ampere_oem_redfish_event()
|
||||
{
|
||||
msg=$1
|
||||
priority=$2
|
||||
severity=$3
|
||||
msgID=$4
|
||||
msgArgs1=$5
|
||||
msgArgs2=$6
|
||||
|
||||
logger-systemd --journald << EOF
|
||||
MESSAGE=${msg}
|
||||
PRIORITY=${priority}
|
||||
SEVERITY=${severity}
|
||||
REDFISH_MESSAGE_ID=${msgID}
|
||||
REDFISH_MESSAGE_ARGS=${msgArgs1},${msgArgs2}
|
||||
EOF
|
||||
}
|
||||
|
||||
parse_phy_syndrome_s1_type() {
|
||||
s1=$1
|
||||
slice=$((s1 & 0xf))
|
||||
ubit=$(((s1 & 0x10) >> 4))
|
||||
lbit=$(((s1 & 0x20) >> 5))
|
||||
uMsg="Upper Nibble: No Error"
|
||||
lMsg="Lower Nibble: No Error"
|
||||
if [ $ubit == 1 ]; then
|
||||
uMsg="Upper Nibble: No rising edge error"
|
||||
fi
|
||||
if [ $lbit == 1 ]; then
|
||||
lMsg="Lower Nibble: No rising edge error"
|
||||
fi
|
||||
echo "Slice $slice: $uMsg, $lMsg"
|
||||
}
|
||||
|
||||
parse_phy_syndrome() {
|
||||
s0=$1
|
||||
s1=$2
|
||||
case $s0 in
|
||||
1)
|
||||
echo "PHY Training Setup failure"
|
||||
;;
|
||||
2)
|
||||
s1Msg=$(parse_phy_syndrome_s1_type "$s1")
|
||||
echo "PHY Write Leveling failure: $s1Msg"
|
||||
;;
|
||||
3)
|
||||
echo "PHY Read Gate Leveling failure"
|
||||
;;
|
||||
4)
|
||||
echo "PHY Read Leveling failure"
|
||||
;;
|
||||
5)
|
||||
echo "PHY Software Training failure"
|
||||
;;
|
||||
*)
|
||||
echo "N/A"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
parse_dimm_syndrome() {
|
||||
s0=$1
|
||||
case $s0 in
|
||||
1)
|
||||
echo "DRAM VREFDQ Training failure"
|
||||
;;
|
||||
2)
|
||||
echo "LRDIMM DB Training failure"
|
||||
;;
|
||||
3)
|
||||
echo "LRDIMM DB Software Training failure"
|
||||
;;
|
||||
*)
|
||||
echo "N/A"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
log_err_to_redfish_err() {
|
||||
channel="$(printf '%d' "0x$1" 2>/dev/null)"
|
||||
data="$(printf '%d' "0x$2" 2>/dev/null)"
|
||||
trErrType=$((data & 0x03))
|
||||
rank=$(((data & 0x1C) >> 2))
|
||||
syndrome0=$(((data & 0xE0) >> 5))
|
||||
syndrome1=$(((data & 0xFF00) >> 8))
|
||||
|
||||
# PHY sysdrom errors
|
||||
fType=""
|
||||
redfisComp="DIMM"
|
||||
redfisMsg=""
|
||||
if [ $trErrType == 1 ]; then
|
||||
fType="PHY training failure"
|
||||
redfisMsg=$(parse_phy_syndrome $syndrome0 $syndrome1)
|
||||
# DIMM traning errors
|
||||
elif [ $trErrType == 2 ]; then
|
||||
fType="DIMM training failure"
|
||||
redfisMsg=$(parse_dimm_syndrome $syndrome0)
|
||||
else
|
||||
fType="Invalid DIMM Syndrome error type"
|
||||
redfisMsg="NA"
|
||||
fi
|
||||
|
||||
#smg=$("DDR training: MCU rank $rank: $fType: $redfisMsg")
|
||||
log_ampere_oem_redfish_event \
|
||||
"" 2 "" "OpenBMC.0.1.AmpereCritical.Critical" \
|
||||
$redfisComp "Slot $channel MCU rank $rank: $fType: $redfisMsg"
|
||||
}
|
||||
|
||||
log_err_to_sel_err() {
|
||||
channel="$(printf '%d' "0x$1" 2>/dev/null)"
|
||||
data="$(printf '%d' "0x$2" 2>/dev/null)"
|
||||
byte0=$(((data & 0xff00) >> 8))
|
||||
byte1=$((data & 0xff))
|
||||
evtdata0=$((EVENT_DIR_ASSERTION | OEM_SENSOR_SPECIFIC))
|
||||
evtdata1=$(((channel << 4) | BOOT_SYNDROME_DATA | (socket << 3)))
|
||||
|
||||
# phy sysdrom errors
|
||||
# OEM data bytes
|
||||
# oem id: 3 bytes [0x3a 0xcd 0x00]
|
||||
# sensor num: 1 bytes
|
||||
# sensor type: 1 bytes
|
||||
# data bytes: 4 bytes
|
||||
# sel type: 4 byte [0x00 0x00 0x00 0xC0]
|
||||
busctl call xyz.openbmc_project.Logging.IPMI \
|
||||
/xyz/openbmc_project/Logging/IPMI \
|
||||
xyz.openbmc_project.Logging.IPMI IpmiSelAddOem \
|
||||
sayy "" 12 \
|
||||
0x3a 0xcd 0x00 \
|
||||
"$SENSOR_TYPE_SYSTEM_FW_PROGRESS" "$SENSOR_BOOT_PROGRESS" \
|
||||
"$evtdata0" "$evtdata1" "$byte0" "$byte1" \
|
||||
0x00 0x00 0x00 0xC0
|
||||
}
|
||||
|
||||
BOOT_SYNDROME_DATA=4
|
||||
SENSOR_BOOT_PROGRESS=235
|
||||
EVENT_DIR_ASSERTION=0x00
|
||||
OEM_SENSOR_SPECIFIC=0x70
|
||||
SENSOR_TYPE_SYSTEM_FW_PROGRESS=0x0F
|
||||
|
||||
socket=$1
|
||||
base="$(smpro_path "$socket")"
|
||||
|
||||
# For the second socket, it is required to read out to
|
||||
# clear all old boot progress before query the dimm
|
||||
# training fail info.
|
||||
# Normally, it would take up to 12 times to read them all
|
||||
# Make the value to 16 to make sure it always works.
|
||||
if [ "$socket" == "1" ]; then
|
||||
path=("$base"/smpro-misc.*.auto/boot_progress)
|
||||
filename="${path[0]}"
|
||||
if [ ! -f "$filename" ];
|
||||
then
|
||||
echo "Error: $filename not found"
|
||||
else
|
||||
for ((i=0; i<16; i++))
|
||||
do
|
||||
cat "$filename" > /dev/null 2>&1
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
# Checking for DIMM slot 0-15
|
||||
for ((i=0; i<16; i++))
|
||||
do
|
||||
path=("$base"/smpro-errmon.*.auto/event_dimm"${i}"_syndrome)
|
||||
filename="${path[0]}"
|
||||
if [ ! -f "$filename" ];
|
||||
then
|
||||
echo "Error: $filename not found"
|
||||
continue
|
||||
fi
|
||||
|
||||
line=$(cat "$filename")
|
||||
if [ -n "$line" ];
|
||||
then
|
||||
log_err_to_redfish_err "$i" "$line"
|
||||
log_err_to_sel_err "$i" "$line"
|
||||
fi
|
||||
done
|
||||
|
||||
exit 0;
|
||||
@@ -0,0 +1,63 @@
|
||||
SUMMARY = "Ampere Computing LLC Host Control Implementation"
|
||||
DESCRIPTION = "A host control implementation suitable for Ampere Computing LLC's 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
|
||||
|
||||
RDEPENDS:${PN} = "bash"
|
||||
S = "${WORKDIR}"
|
||||
|
||||
SRC_URI = " \
|
||||
file://ampere-host-force-reset@.service \
|
||||
file://ampere-host-on-host-check@.service \
|
||||
file://ampere_host_check.sh \
|
||||
file://obmc-power-already-on@.target \
|
||||
file://obmc-host-already-on@.target \
|
||||
file://ampere-bmc-reboot-host-check@.service \
|
||||
"
|
||||
|
||||
SYSTEMD_PACKAGES = "${PN}"
|
||||
SYSTEMD_SERVICE:${PN} = " \
|
||||
ampere-host-force-reset@.service \
|
||||
obmc-power-already-on@.target \
|
||||
obmc-host-already-on@.target \
|
||||
ampere-bmc-reboot-host-check@.service \
|
||||
"
|
||||
|
||||
# append force reboot
|
||||
HOST_WARM_REBOOT_FORCE_TGT = "ampere-host-force-reset@.service"
|
||||
HOST_WARM_REBOOT_FORCE_INSTMPL = "ampere-host-force-reset@{0}.service"
|
||||
HOST_WARM_REBOOT_FORCE_TGTFMT = "obmc-host-force-warm-reboot@{0}.target"
|
||||
HOST_WARM_REBOOT_FORCE_TARGET_FMT = "../${HOST_WARM_REBOOT_FORCE_TGT}:${HOST_WARM_REBOOT_FORCE_TGTFMT}.requires/${HOST_WARM_REBOOT_FORCE_INSTMPL}"
|
||||
SYSTEMD_LINK:${PN} += "${@compose_list_zip(d, 'HOST_WARM_REBOOT_FORCE_TARGET_FMT', 'OBMC_HOST_INSTANCES')}"
|
||||
SYSTEMD_SERVICE:${PN} += "${HOST_WARM_REBOOT_FORCE_TGT}"
|
||||
|
||||
HOST_ON_RESET_HOSTTMPL = "ampere-host-on-host-check@.service"
|
||||
HOST_ON_RESET_HOSTINSTMPL = "ampere-host-on-host-check@{0}.service"
|
||||
HOST_ON_RESET_HOSTTGTFMT = "obmc-host-startmin@{0}.target"
|
||||
HOST_ON_RESET_HOSTFMT = "../${HOST_ON_RESET_HOSTTMPL}:${HOST_ON_RESET_HOSTTGTFMT}.requires/${HOST_ON_RESET_HOSTINSTMPL}"
|
||||
SYSTEMD_LINK:${PN} += "${@compose_list_zip(d, 'HOST_ON_RESET_HOSTFMT', 'OBMC_HOST_INSTANCES')}"
|
||||
SYSTEMD_SERVICE:${PN} += "${HOST_ON_RESET_HOSTTMPL}"
|
||||
|
||||
# append on phosphor-wait-power-on
|
||||
AMPERE_POWER_ON_TGT = "obmc-power-already-on@.target"
|
||||
AMPERE_POWER_ON_INSTMPL = "obmc-power-already-on@{0}.target"
|
||||
OP_WAIT_POWER_ON = "phosphor-wait-power-on@{0}.service"
|
||||
AMPERE_POWER_ON_TARGET_FMT = "../${AMPERE_POWER_ON_TGT}:${OP_WAIT_POWER_ON}.wants/${AMPERE_POWER_ON_INSTMPL}"
|
||||
SYSTEMD_LINK:${PN} += "${@compose_list_zip(d, 'AMPERE_POWER_ON_TARGET_FMT', 'OBMC_HOST_INSTANCES')}"
|
||||
|
||||
# append on obmc-chassis-poweron but will start after phosphor-state-manager init
|
||||
# host state as running
|
||||
HOST_CHECK_BMC_REBOOT_HOSTTMPL = "ampere-bmc-reboot-host-check@.service"
|
||||
HOST_CHECK_BMC_REBOOT_HOSTINSTMPL = "ampere-bmc-reboot-host-check@{0}.service"
|
||||
HOST_CHECK_BMC_REBOOT_HOSTTGTFMT = "obmc-chassis-poweron@{0}.target"
|
||||
HOST_CHECK_BMC_REBOOT_HOSTFMT = "../${HOST_CHECK_BMC_REBOOT_HOSTTMPL}:${HOST_CHECK_BMC_REBOOT_HOSTTGTFMT}.requires/${HOST_CHECK_BMC_REBOOT_HOSTINSTMPL}"
|
||||
SYSTEMD_LINK:${PN} += "${@compose_list_zip(d, 'HOST_CHECK_BMC_REBOOT_HOSTFMT', 'OBMC_HOST_INSTANCES')}"
|
||||
|
||||
do_install() {
|
||||
install -d ${D}/usr/sbin
|
||||
install -m 0755 ${WORKDIR}/ampere_host_check.sh ${D}/${sbindir}/
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
[Unit]
|
||||
Description=Check Host%i status after bmc reboot
|
||||
After=obmc-host-reset@%i.target
|
||||
After=obmc-host-reset-running@%i.target
|
||||
After=mapper-wait@-xyz-openbmc_project-state-host%i.service
|
||||
OnSuccess=obmc-host-already-on@%i.target
|
||||
ConditionPathExists=/run/openbmc/chassis@%i-on
|
||||
ConditionPathExists=/run/openbmc/host@%i-on
|
||||
Conflicts=obmc-chassis-poweroff@%i.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/bin/sh -c "if [ $(busctl get-property `mapper get-service /xyz/openbmc_project/state/host0` /xyz/openbmc_project/state/host0 xyz.openbmc_project.State.Host CurrentHostState | grep -i '\.Running' | wc -l) != 0 ]; then exit 0; fi"
|
||||
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=Ampere Computing LLC force reset host%i
|
||||
Wants=phosphor-reboot-host@%i.service
|
||||
Conflicts=obmc-chassis-poweroff@%i.target
|
||||
OnFailure=obmc-chassis-powerreset@%i.target
|
||||
|
||||
[Service]
|
||||
RemainAfterExit=no
|
||||
Type=oneshot
|
||||
ExecStart=/bin/sh -c "sleep 3 && /usr/bin/env ampere_power_util.sh mb force_reset"
|
||||
SyslogIdentifier=ampere_power_util.sh
|
||||
|
||||
[Install]
|
||||
WantedBy=obmc-host-force-warm-reboot@%i.target
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=Check Host%i status before obmc-host-startmin
|
||||
After=obmc-host-started@%i.target
|
||||
After=obmc-power-start-pre@%i.target
|
||||
Conflicts=obmc-host-stop@%i.target
|
||||
Conflicts=phosphor-reset-host-check@%i.service
|
||||
OnFailure=obmc-host-quiesce@%i.target
|
||||
OnSuccess=obmc-host-already-on@%i.target
|
||||
OnFailureJobMode=flush
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/sbin/ampere_host_check.sh
|
||||
@@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Check current Host status. Do nothing when the Host is currently ON
|
||||
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
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Time out checking for Host ON is 60s
|
||||
cnt=60
|
||||
while [ "$cnt" -gt 0 ];
|
||||
do
|
||||
cnt=$((cnt - 1))
|
||||
st=$(busctl call xyz.openbmc_project.State.HostCondition.Gpio \
|
||||
/xyz/openbmc_project/Gpios/host0 org.freedesktop.DBus.Properties \
|
||||
Get ss xyz.openbmc_project.Condition.HostFirmware \
|
||||
CurrentFirmwareCondition | cut -d"." -f6)
|
||||
if [ "$st" == "Running\"" ]; then
|
||||
if command -v ampere_driver_binder.sh;
|
||||
then
|
||||
ampere_driver_binder.sh
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
exit 1
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
[Unit]
|
||||
Description=Ampere Host %i already on target
|
||||
Conflicts=obmc-chassis-poweroff@%i.target
|
||||
Conflicts=obmc-host-quiesce@%i.target
|
||||
Conflicts=ampere-host-force-reset@%i.service
|
||||
Conflicts=ampere-host-shutdown-ack@%i.service
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
[Unit]
|
||||
Description=Ampere power %i already on target
|
||||
After=phosphor-wait-power-on@%i.service
|
||||
Conflicts=obmc-chassis-poweroff@%i.target
|
||||
Conflicts=ampere-host-shutdown-ack@%i.service
|
||||
Reference in New Issue
Block a user