summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common/recipes-core
diff options
context:
space:
mode:
authorJason M. Bills <jason.m.bills@linux.intel.com>2020-02-28 02:57:13 +0300
committerJason M. Bills <jason.m.bills@linux.intel.com>2020-03-02 22:06:57 +0300
commit6c1caca70063aa707ba809a6b4695d0f0c5646f1 (patch)
tree84da2f29a60cb571686d3a4fb93f9d1f1189d989 /meta-openbmc-mods/meta-common/recipes-core
parent9600a7403ba2848c8751280077503a3e0f2f3481 (diff)
downloadopenbmc-6c1caca70063aa707ba809a6b4695d0f0c5646f1.tar.xz
Update to internal 2020-02-27
Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-core')
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/at-scale-debug/files/com.intel.AtScaleDebug.service3
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/crashdump/crashdump_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/fw-update/files/fwupd.sh550
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/fw-update/intel-fw-update.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/host-error-monitor/host-error-monitor_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/0001-Smbus-changes-for-libmctp.patch28
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/libmctp-smbus.h4
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/smbus.c13
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/ipmi/intel-ipmi-oem_%.bbappend3
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/ipmi/ipmi-providers.bb32
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/libpeci/libpeci_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/safec/safec_3.4.bb2
13 files changed, 354 insertions, 291 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-core/at-scale-debug/files/com.intel.AtScaleDebug.service b/meta-openbmc-mods/meta-common/recipes-core/at-scale-debug/files/com.intel.AtScaleDebug.service
index a7c238ffe..4411de11c 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/at-scale-debug/files/com.intel.AtScaleDebug.service
+++ b/meta-openbmc-mods/meta-common/recipes-core/at-scale-debug/files/com.intel.AtScaleDebug.service
@@ -9,5 +9,4 @@ ExecStart={bindir}/asd
Type=simple
SyslogIdentifier=asd
-[Install]
-WantedBy=multi-user.target
+
diff --git a/meta-openbmc-mods/meta-common/recipes-core/crashdump/crashdump_git.bb b/meta-openbmc-mods/meta-common/recipes-core/crashdump/crashdump_git.bb
index 9d3883d3a..6d2bfa88e 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/crashdump/crashdump_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-core/crashdump/crashdump_git.bb
@@ -13,7 +13,7 @@ LICENSE = "Proprietary"
LIC_FILES_CHKSUM = "file://LICENSE;md5=26bb6d0733830e7bab774914a8f8f20a"
SRC_URI = "git://github.com/Intel-BMC/crashdump;protocol=git"
-SRCREV = "0.4"
+SRCREV = "0.5"
S = "${WORKDIR}/git"
diff --git a/meta-openbmc-mods/meta-common/recipes-core/fw-update/files/fwupd.sh b/meta-openbmc-mods/meta-common/recipes-core/fw-update/files/fwupd.sh
index 03dac7582..17923b84d 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/fw-update/files/fwupd.sh
+++ b/meta-openbmc-mods/meta-common/recipes-core/fw-update/files/fwupd.sh
@@ -1,263 +1,355 @@
#!/bin/sh
-SSH_ID=$HOME/.ssh/id_rsa.db
-[ -e $HOME/.fwupd.defaults ] && source $HOME/.fwupd.defaults
+log() {
+ echo "$@"
+}
-usage() {
- echo "usage: $(basename $0) uri"
- echo " uri is something like: file:///path/to/fw"
- echo " tftp://tftp.server.ip.addr/path/to/fw"
- echo " scp://[user@]scp.server.ip.addr:/path/to/fw"
- echo " http[s]://web.server.ip.addr/path/to/fw"
- echo " ftp://[user@]ftp.server.ip.addr/path/to/fw"
- exit 1
+FWTYPE=""
+FWVER=""
+redfish_log_fw_evt() {
+ local evt=$1
+ local sev=""
+ local msg=""
+ [ -z "$FWTYPE" ] && return
+ [ -z "$FWVER" ] && return
+ case "$evt" in
+ start)
+ evt=OpenBMC.0.1.FirmwareUpdateStarted
+ msg="${FWTYPE} firmware update to version ${FWVER} started."
+ sev=OK
+ ;;
+ success)
+ evt=OpenBMC.0.1.FirmwareUpdateCompleted
+ msg="${FWTYPE} firmware update to version ${FWVER} completed successfully."
+ sev=OK
+ ;;
+ abort)
+ evt=OpenBMC.0.1.FirmwareUpdateFailed
+ msg="${FWTYPE} firmware update to version ${FWVER} failed."
+ sev=Warning
+ ;;
+ *) return ;;
+ esac
+ logger-systemd --journald <<-EOF
+ MESSAGE=$msg
+ PRIORITY=2
+ SEVERITY=${sev}
+ REDFISH_MESSAGE_ID=${evt}
+ REDFISH_MESSAGE_ARGS=${FWTYPE},${FWVER}
+ EOF
}
-logevent_update_started() {
-echo
-cat <<EOF | logger-systemd --journald
-REDFISH_MESSAGE_ID=OpenBMC.0.1.FirmwareUpdateStarted
-PRIORITY=2
-MESSAGE=$1 firmware update to version $2 started.
-REDFISH_MESSAGE_ARGS=$1,$2
-EOF
+wait_for_log_sync()
+{
+ sync
+ sleep 5
}
-logevent_update_completed() {
-echo
-cat <<EOF | logger-systemd --journald
-REDFISH_MESSAGE_ID=OpenBMC.0.1.FirmwareUpdateCompleted
-PRIORITY=2
-MESSAGE=$1 firmware update to version $2 completed.
-REDFISH_MESSAGE_ARGS=$1,$2
-EOF
+PFR_BUS=4
+PFR_ADDR=0x38
+PFR_ID_REG=0x00
+PFR_STATE_REG=0x03
+PFR_PROV_REG=0x0a
+PFR_INTENT_REG=0x13
+pfr_read() {
+ [ $# -ne 1 ] && return 1
+ local reg=$1
+ i2cget -y $PFR_BUS $PFR_ADDR $reg 2>/dev/null
}
-logevent_update_failed() {
-echo
-cat <<EOF | logger-systemd --journald
-REDFISH_MESSAGE_ID=OpenBMC.0.1.FirmwareUpdateFailed
-PRIORITY=4
-MESSAGE=$1 firmware update to version $2 failed.
-REDFISH_MESSAGE_ARGS=$1,$2
-EOF
+pfr_write() {
+ [ $# -ne 2 ] && return 1
+ local reg=$1
+ local val=$2
+ i2cset -y $PFR_BUS $PFR_ADDR $reg $val >&/dev/null
}
-if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then usage; fi
-if [ $# -eq 0 ]; then
- # set DEFURI in $HOME/.fwupd.defaults
- URI="$DEFURI"
-else
- if [[ "$1" == *"/"* ]]; then
- URI=$1 # local file
- local_file=1 ;
+pfr_active_update() {
+ local factory_reset=""
+ systemctl stop nv-sync.service || \
+ log "BMC NV sync failed to stop"
+ # transition from non-PFR to PFR image requires factory reset
+ [ ! -e /usr/share/pfr ] && factory_reset="-r"
+ mtd-util $factory_reset pfr write $LOCAL_PATH
+ redfish_log_fw_evt success
+ # only wait for logging if not transitioning from non-PFR to PFR
+ if [ -e /usr/share/pfr ]; then
+ # exit bmc no nv mode
+ systemctl start nv-sync.service || log "failed to start nv-sync"
+ wait_for_log_sync
+ fi
+ reboot
+}
+
+pfr_staging_update() {
+ log "Updating $(basename $TGT)"
+ flash_erase $TGT $erase_offset $blk_cnt
+ log "Writing $(stat -c "%s" "$LOCAL_PATH") bytes"
+ # cat "$LOCAL_PATH" > "$TGT"
+ dd bs=4k seek=$(($erase_offset / 0x1000)) if=$LOCAL_PATH of=$TGT 2>/dev/null
+
+ # remove the updated image from /tmp
+ rm -f $LOCAL_PATH
+ redfish_log_fw_evt success
+ log "Setting update intent in PFR CPLD"
+ wait_for_log_sync
+
+ # write to PFRCPLD about BMC update intent.
+ pfr_write 0x13 $upd_intent_val
+}
+
+pfr_active_mode() {
+ # check for 0xde in register file 0
+ local id=$(pfr_read $PFR_ID_REG) || return 1
+ [ "$id" == "0xde" ] || return 1
+ local state=$(pfr_read $PFR_STATE_REG) || return 1
+ local prov=$(pfr_read $PFR_PROV_REG) || return 1
+ prov=$((prov & 0x20))
+ [ "$prov" == "32" ] && return 0
+ return 1
+}
+
+blk0blk1_update() {
+ # PFR-style image update section
+ # read the image type from the uploaded image
+ # Byte at location 0x8 gives image type
+ TGT="/dev/mtd/image-stg"
+ img_type=$(hexdump -s 8 -n 1 -e '/1 "%02x\n"' $LOCAL_PATH)
+ log "image-type=$img_type"
+
+ if [ $local_file -eq 0 ]; then
+ img_type_str=$(busctl get-property xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software/$img_obj xyz.openbmc_project.Software.Version Purpose | cut -d " " -f 2 | cut -d "." -f 6 | sed 's/.\{1\}$//')
+ img_target=$(busctl get-property xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software/$img_obj xyz.openbmc_project.Software.Activation RequestedActivation | cut -d " " -f 2| cut -d "." -f 6 | sed 's/.\{1\}$//')
else
- URI="file:////tmp/images/$1/image-runtime"
- local_file=0 ;
+ img_type_str='BMC'
+ img_target='Active'
fi
-fi
-PROTO=$(echo "$URI" | sed 's,\([a-z]*\)://.*$,\1,')
-REMOTE=$(echo "$URI" | sed 's,.*://\(.*\)$,\1,')
-REMOTE_HOST=$(echo "$REMOTE" | sed 's,\([^/]*\)/.*$,\1,')
-if [ "$PROTO" = 'scp' ]; then
- REMOTE_PATH=$(echo "$REMOTE" | cut -d':' -f2)
-else
- REMOTE_PATH=$(echo "$REMOTE" | sed 's,[^/]*/\(.*\)$,\1,')
-fi
-LOCAL_PATH="/tmp/$(basename $REMOTE_PATH)"
-echo "URI=$URI"
-echo "PROTO=$PROTO"
-echo "REMOTE=$REMOTE"
-echo "REMOTE_HOST=$REMOTE_HOST"
-echo "REMOTE_PATH=$REMOTE_PATH"
-echo "LOCAL_PATH=$LOCAL_PATH"
-if [ ! -e $LOCAL_PATH ] || [ $(stat -c %s $LOCAL_PATH) -eq 0 ]; then
- echo "Download '$REMOTE_PATH' from $PROTO $REMOTE_HOST $REMOTE_PATH"
- case "$PROTO" in
- scp)
- mkdir -p $HOME/.ssh
- if [ -e "$SSH_ID" ]; then
- ARG_ID="-i $SSH_ID"
- fi
- scp $ARG_ID $REMOTE_HOST$REMOTE_PATH $LOCAL_PATH
- if [ $? -ne 0 ]; then
- echo "scp $REMOTE $LOCAL_PATH failed!"
- exit 255
+ apply_time=$(busctl get-property xyz.openbmc_project.Settings /xyz/openbmc_project/software/apply_time xyz.openbmc_project.Software.ApplyTime RequestedApplyTime | cut -d " " -f 2 | cut -d "." -f 6 | sed 's/.\{1\}$//')
+ log "image-name=$img_type_str"
+ log "image-target=$img_target"
+ log "apply_time=$apply_time"
+
+ case "$img_type" in
+ 04)
+ if [ "$img_type_str" == 'BMC' ]; then
+ # BMC image - max size 32MB
+ log "BMC firmware image"
+ img_size=33554432
+ if [ "$img_target" == 'StandbySpare' ]; then
+ upd_intent_val=0x10
+ else
+ upd_intent_val=0x08
fi
- ;;
- tftp)
- cd /tmp
- tftp -g -r "$REMOTE_PATH" "$REMOTE_HOST"
- if [ $? -ne 0 ]; then
- echo "tftp -g -r \"$REMOTE_PATH\" \"$REMOTE_HOST\" failed!"
- exit 255
+ erase_offset=0
+ FWTYPE="BMC"
+ FWVER="${RANDOM}-fixme"
+ else
+ # log error the image selected for update is not same as downloaded.
+ log "Mismatch: image selected for update and image parsed are different"
+ redfish_log_fw_evt abort
+ return 1
+ fi
+ ;;
+ 00)
+ if [ "$img_type_str" == 'Other' ]; then
+ log "CPLD firmware image"
+ # CPLD image- max size 1MB
+ img_size=1048576
+ if [ "$img_target" == 'StandbySpare' ]; then
+ upd_intent_val=0x20
+ else
+ upd_intent_val=0x04
fi
- ;;
- http|https|ftp)
- wget --no-check-certificate "$URI" -O "$LOCAL_PATH"
- if [ $? -ne 0 ]; then
- echo "wget $URI failed!"
- exit 255
+ erase_offset=0x3000000
+ FWTYPE="CPLD"
+ FWVER="${RANDOM}-fixme"
+ else
+ # log error the image selected for update is not same as downloaded.
+ log "Mismatch: image selected for update and image parsed are different"
+ redfish_log_fw_evt abort
+ return 1
+ fi
+ ;;
+ 02)
+ if [ "$img_type_str" = 'Host' ]; then
+ # BIOS image- max size 16MB
+ log "BIOS firmware image"
+ img_size=16777216
+ if [ "$img_target" == 'StandbySpare' ]; then
+ upd_intent_val=0x02
+ else
+ upd_intent_val=0x41
fi
- ;;
- file)
- cp "$REMOTE_PATH" "$LOCAL_PATH"
- ;;
- *)
- echo "Invalid URI $URI"
- exit 1;
- ;;
+ erase_offset=0x2000000
+ # TODO: parse out the fwtype and fwver once that is specified
+ FWTYPE="BIOS"
+ FWVER="${RANDOM}-fixme"
+ else
+ # log error the image selected for update is not same as downloaded.
+ log "Mismatch: image selected for update and image parsed are different"
+ redfish_log_fw_evt abort
+ return 1
+ fi
+ ;;
+ *)
+ log "Unknown image type ${img_type}"
+ return 1
+ ;;
esac
-fi
-# PFR image update section
-# this file being created at build time for PFR images
-if [ -e /usr/share/pfr ] && [ $local_file -eq 0 ]; then
- if [ -e /tmp/fwupd_progress ]; then
- echo "Firmware update already in progress"
- exit 1
+ # For deferred updates
+ if [ "$apply_time" == 'OnReset' ]; then
+ upd_intent_val=$(( "$upd_intent_val"|0x80 ))
fi
-touch /tmp/fwupd_progress
-
-# read the image type from the uploaded image
-# Byte at location 0x8 gives image type
-img_type=$(busctl get-property xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software/$1 xyz.openbmc_project.Software.Version Purpose | cut -d " " -f 2 | cut -d "." -f 6 | sed 's/.\{1\}$//')
-img_target=$(busctl get-property xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software/$1 xyz.openbmc_project.Software.Activation RequestedActivation | cut -d " " -f 2| cut -d "." -f 6 | sed 's/.\{1\}$//')
-apply_time=$(busctl get-property xyz.openbmc_project.Settings /xyz/openbmc_project/software/apply_time xyz.openbmc_project.Software.ApplyTime RequestedApplyTime | cut -d " " -f 2 | cut -d "." -f 6 | sed 's/.\{1\}$//')
-echo "image-type=$img_type"
-echo "image-target=$img_target"
-echo "apply_time=$apply_time"
-# BMC image - max size 32MB
-if [ "$img_type" = 'BMC' ]; then
- echo "BMC firmware image"
- # 32MB - 33554432
- img_size=33554432
- if [ "$img_target" = 'StandbySpare' ]; then
- upd_intent_val=0x10
- else
- upd_intent_val=0x08
+ # do a quick sanity check on the image
+ if [ $(stat -c "%s" "$LOCAL_PATH") -gt $img_size ]; then
+ log "Update file "$LOCAL_PATH" is bigger than the supported image size"
+ redfish_log_fw_evt abort
+ return 1
fi
- # page is at 4KB boundary
- img_page_offset=0
- erase_offset=0
- blk_cnt=0x200
-# CPLD image- max size 4MB
-elif [ "$img_type" = 'Other' ]; then
- echo "CPLD firmware image"
- # 4MB - 4194304
- img_size=4194304
- upd_intent_val=0x04
- # dd command accepts the offset in decimal
- # below is the page offset in 4KB boundary
- img_page_offset=12288
- erase_offset=0x3000000
- blk_cnt=0x40
-# BIOS image- max size 16MB
-elif [ "$img_type" = 'Host' ]; then
- echo "BIOS firmware image"
- # 16MB- 16777216
- img_size=16777216
- if [ "$img_target" = 'StandbySpare' ]; then
- upd_intent_val=0x02
+ blk_cnt=$((img_size / 0x10000))
+
+ if pfr_active_mode; then
+ # pfr enforcing mode; any b0b1 image type
+ pfr_staging_update
+ elif [ "$img_type" == '04' ]; then
+ # legacy mode; pfr is not present but we got a pfr image
+ log "Updating BMC active firmware- PFR unprovisioned mode"
+ pfr_active_update
else
- upd_intent_val=0x01
+ # error; pfr is not present but we got a pfr image,
+ # an invalid image, or nonBMC image
+ log "PFR inactive or invalid image type:${img_type}, cowardly refusing to process image"
+ redfish_log_fw_evt abort
+ return 1
fi
- # dd command accepts the offset in decimal
- # below is the page offset in 4KB boundary
- img_page_offset=8192
- erase_offset=0x2000000
- blk_cnt=0x100
-else
- echo "${img_type}:Unknown image type, exiting the firmware update script"
- rm -rf /tmp/fwupd_progress
- exit 1
-fi
-
-if [ "$apply_time" == 'OnReset' ]; then
- upd_intent_val=$(( "$upd_intent_val"|0x80 ))
-fi
-
-# do a size check on the image
-if [ $(stat -c "%s" "$LOCAL_PATH") -gt $img_size ]; then
- echo "Update file "$LOCAL_PATH" is bigger than the supported image size"
- rm -rf /tmp/fwupd_progress
- exit 1
-fi
-
-TGT="/dev/mtd/image-stg"
-echo "Update $(basename $TGT)"
-flash_erase $TGT $erase_offset $blk_cnt
-sync
-echo "Writing $(stat -c "%s" "$LOCAL_PATH") bytes"
-# cat "$LOCAL_PATH" > "$TGT"
-dd bs=4k seek=$img_page_offset if=$LOCAL_PATH of=$TGT
-sync
-echo "Written $(stat -c "%s" "$LOCAL_PATH") bytes"
-# remove the updated image from /tmp
-rm -f $LOCAL_PATH
-echo "Writing $upd_intent_val to update intent register in PFR RoT"
-sleep 5 # delay for sync and to get the above echo messages
-
-# remove the file which used as lock
-rm -rf /tmp/fwupd_progress
-
-# write to PFRCPLD about BMC update intent.
-i2cset -y 4 0x38 0x13 $upd_intent_val
-
-else # Non-PFR image update section
-version="unknown"
-component="BMC"
-manifest_file=$(dirname "${REMOTE_PATH}")"/MANIFEST"
-if [ -e $manifest_file ]; then
- version=`awk -F= -v key="version" '$1==key {print $2}' $manifest_file`
-fi
-
-logevent_update_started $component $version
-
-# do a quick sanity check on the image
-if [ $(stat -c "%s" "$LOCAL_PATH") -lt 10000000 ]; then
- echo "Update file "$LOCAL_PATH" seems to be too small"
- logevent_update_failed $component $version
- exit 1
-fi
-dtc -I dtb -O dtb "$LOCAL_PATH" > /dev/null 2>&1
-if [ $? -ne 0 ]; then
- echo "Update file $LOCAL_PATH doesn't seem to be in the proper format"
- logevent_update_failed $component $version
- exit 1
-fi
+}
-# guess based on fw_env which partition we booted from
-BOOTADDR=$(fw_printenv bootcmd | awk '{print $2}')
+ping_pong_update() {
+ # do a quick sanity check on the image
+ if [ $(stat -c "%s" "$LOCAL_PATH") -lt 10000000 ]; then
+ log "Update file "$LOCAL_PATH" seems to be too small"
+ redfish_log_fw_evt abort
+ return 1
+ fi
+ dtc -I dtb -O dtb "$LOCAL_PATH" > /dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ log "Update file $LOCAL_PATH doesn't seem to be in the proper format"
+ redfish_log_fw_evt abort
+ return 1
+ fi
-TGT="/dev/mtd/image-a"
-if [ ! -e /usr/share/pfr ]; then
+ # guess based on fw_env which partition we booted from
+ local BOOTADDR=$(fw_printenv bootcmd | awk '{print $2}')
+ local TGT="/dev/mtd/image-a"
case "$BOOTADDR" in
20080000) TGT="/dev/mtd/image-b"; BOOTADDR="22480000" ;;
22480000) TGT="/dev/mtd/image-a"; BOOTADDR="20080000" ;;
*) TGT="/dev/mtd/image-a"; BOOTADDR="20080000" ;;
esac
-fi
-echo "Updating $(basename $TGT) (use bootm $BOOTADDR)"
-flash_erase $TGT 0 0
-if [ $? -ne 0 ]; then
- echo "Erasing the flash failed"
- logevent_update_failed $component $version
- exit 1
-fi
-echo "Writing $(stat -c "%s" "$LOCAL_PATH") bytes"
-cat "$LOCAL_PATH" > "$TGT"
-if [ $? -ne 0 ]; then
- echo "Writing to flash failed"
- logevent_update_failed $component $version
- exit 1
-fi
-fw_setenv "bootcmd" "bootm ${BOOTADDR}"
+ log "Updating $(basename $TGT) (use bootm $BOOTADDR)"
+ flash_erase $TGT 0 0
+ log "Writing $(stat -c "%s" "$LOCAL_PATH") bytes"
+ cat "$LOCAL_PATH" > "$TGT"
+ fw_setenv "bootcmd" "bootm ${BOOTADDR}"
+ redfish_log_fw_evt success
+ wait_for_log_sync
+ # reboot
+ reboot
+}
-logevent_update_completed $component $version
+fetch_fw() {
+ PROTO=$(echo "$URI" | sed 's,\([a-z]*\)://.*$,\1,')
+ REMOTE=$(echo "$URI" | sed 's,.*://\(.*\)$,\1,')
+ REMOTE_HOST=$(echo "$REMOTE" | sed 's,\([^/]*\)/.*$,\1,')
+ if [ "$PROTO" = 'scp' ]; then
+ REMOTE_PATH=$(echo "$REMOTE" | cut -d':' -f2)
+ else
+ REMOTE_PATH=$(echo "$REMOTE" | sed 's,[^/]*/\(.*\)$,\1,')
+ fi
+ LOCAL_PATH="/tmp/$(basename $REMOTE_PATH)"
+ log "PROTO=$PROTO"
+ log "REMOTE=$REMOTE"
+ log "REMOTE_HOST=$REMOTE_HOST"
+ log "REMOTE_PATH=$REMOTE_PATH"
+ if [ ! -e $LOCAL_PATH ] || [ $(stat -c %s $LOCAL_PATH) -eq 0 ]; then
+ log "Download '$REMOTE_PATH' from $PROTO $REMOTE_HOST $REMOTE_PATH"
+ case "$PROTO" in
+ scp)
+ mkdir -p $HOME/.ssh
+ if [ -e "$SSH_ID" ]; then
+ ARG_ID="-i $SSH_ID"
+ fi
+ scp $ARG_ID $REMOTE_HOST$REMOTE_PATH $LOCAL_PATH
+ if [ $? -ne 0 ]; then
+ log "scp $REMOTE $LOCAL_PATH failed!"
+ return 1
+ fi
+ ;;
+ tftp)
+ cd /tmp
+ tftp -g -r "$REMOTE_PATH" "$REMOTE_HOST"
+ if [ $? -ne 0 ]; then
+ log "tftp -g -r \"$REMOTE_PATH\" \"$REMOTE_HOST\" failed!"
+ return 1
+ fi
+ ;;
+ http|https|ftp)
+ wget --no-check-certificate "$URI" -O "$LOCAL_PATH"
+ if [ $? -ne 0 ]; then
+ log "wget $URI failed!"
+ return 1
+ fi
+ ;;
+ file)
+ LOCAL_PATH=$(echo $URI | sed 's,^file://,,')
+ ;;
+ *)
+ log "Invalid URI $URI"
+ return 1
+ ;;
+ esac
+ fi
+}
-# reboot
-reboot
+update_fw() {
+ redfish_log_fw_evt start
+ # determine firmware file type
+ local magic=$(hexdump -n 4 -v -e '/1 "%02x"' "$LOCAL_PATH")
+ case "$magic" in
+ d00dfeed) ping_pong_update ;;
+ 19fdeab6) blk0blk1_update ;;
+ *) log "Uknown file type ${magic}"
+ esac
+}
+
+# if this script was sourced, just return without executing anything
+[ "$_" != "$0" ] && return 0 >&/dev/null
+
+usage() {
+ echo "usage: $(basename $0) uri"
+ echo " uri is something like: file:///path/to/fw"
+ echo " tftp://tftp.server.ip.addr/path/to/fw"
+ echo " scp://[user@]scp.server.ip.addr:/path/to/fw"
+ echo " http[s]://web.server.ip.addr/path/to/fw"
+ echo " ftp://[user@]ftp.server.ip.addr/path/to/fw"
+ exit 1
+}
+
+if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then usage; fi
+if [ $# -eq 0 ]; then
+ # set DEFURI in $HOME/.fwupd.defaults
+ URI="$DEFURI"
+else
+ if [[ "$1" == *"/"* ]]; then
+ URI=$1 # local file
+ local_file=1 ;
+ else
+ URI="file:////tmp/images/$1/image-runtime"
+ img_obj=$1
+ local_file=0 ;
+ fi
fi
+fetch_fw && update_fw
diff --git a/meta-openbmc-mods/meta-common/recipes-core/fw-update/intel-fw-update.bb b/meta-openbmc-mods/meta-common/recipes-core/fw-update/intel-fw-update.bb
index 7c994053e..007a4aece 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/fw-update/intel-fw-update.bb
+++ b/meta-openbmc-mods/meta-common/recipes-core/fw-update/intel-fw-update.bb
@@ -7,7 +7,7 @@ RDEPENDS_intel-fw-update += "mtd-utils"
# wget tftp scp
RDEPENDS_intel-fw-update += "busybox dropbear"
# mkfs.vfat, parted
-RDEPENDS_intel-fw-update += "dosfstools"
+RDEPENDS_intel-fw-update += "dosfstools dtc"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${INTELBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
diff --git a/meta-openbmc-mods/meta-common/recipes-core/host-error-monitor/host-error-monitor_git.bb b/meta-openbmc-mods/meta-common/recipes-core/host-error-monitor/host-error-monitor_git.bb
index faa08a58c..6b6d58bfc 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/host-error-monitor/host-error-monitor_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-core/host-error-monitor/host-error-monitor_git.bb
@@ -7,7 +7,7 @@ SRC_URI = "git://github.com/Intel-BMC/host-error-monitor.git;protocol=ssh"
DEPENDS = "boost sdbusplus libgpiod libpeci"
PV = "0.1+git${SRCPV}"
-SRCREV = "ba7c4e08b423dc71bb8dcb963942cba860cdf7d4"
+SRCREV = "4215c9de1b5fc3f86f2a2538f04675fc0ee12086"
S = "${WORKDIR}/git"
diff --git a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/0001-Smbus-changes-for-libmctp.patch b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/0001-Smbus-changes-for-libmctp.patch
index 88da437fc..7bba22ede 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/0001-Smbus-changes-for-libmctp.patch
+++ b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/0001-Smbus-changes-for-libmctp.patch
@@ -1,31 +1,29 @@
-From 40303196d9f07b71042cd7ba87dcab6fdad29422 Mon Sep 17 00:00:00 2001
+From ab1634441f4dd218486f6bb3b94e90e2110ccc2a Mon Sep 17 00:00:00 2001
From: Nikhil Potade <nikhil.potade@linux.intel.com>
Date: Tue, 19 Feb 2019 14:16:20 +0800
Subject: [PATCH 1/1] Smbus changes for libmctp
Signed-off-by: James Feist <james.feist@linux.intel.com>
---
- CMakeLists.txt | 6 ++++--
+ CMakeLists.txt | 5 +++--
core.c | 2 ++
libmctp.h | 40 ++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 46 insertions(+), 2 deletions(-)
+ 3 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
-index a5b1042..249b12b 100644
+index f3f05bd..7991b11 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
-@@ -2,8 +2,9 @@ cmake_minimum_required (VERSION 3.5 FATAL_ERROR)
-
- add_definitions (-DMCTP_LOG_STDERR)
- add_definitions (-DMCTP_HAVE_FILEIO)
-+add_definitions (-DMCTP_DEFAULT_ALLOC)
+@@ -5,7 +5,7 @@ add_definitions (-DMCTP_HAVE_FILEIO)
+ add_definitions (-DMCTP_HAVE_STDIO)
+ add_definitions (-DMCTP_DEFAULT_ALLOC)
-add_library (libmctp STATIC alloc.c core.c log.c libmctp.h serial.c)
+add_library (libmctp STATIC alloc.c core.c log.c libmctp.h serial.c smbus.c crc32c.c)
target_include_directories (libmctp PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
-@@ -18,5 +19,6 @@ add_executable (test_seq tests/test_seq.c tests/test-utils.c)
+@@ -20,5 +20,6 @@ add_executable (test_seq tests/test_seq.c tests/test-utils.c)
target_link_libraries (test_seq libmctp)
install (TARGETS libmctp DESTINATION lib)
@@ -34,7 +32,7 @@ index a5b1042..249b12b 100644
+ include)
diff --git a/core.c b/core.c
-index 61356e9..622bc5e 100644
+index f8abbb1..79a681c 100644
--- a/core.c
+++ b/core.c
@@ -17,6 +17,7 @@
@@ -54,7 +52,7 @@ index 61356e9..622bc5e 100644
#ifndef BUILD_ASSERT
#define BUILD_ASSERT(x) \
diff --git a/libmctp.h b/libmctp.h
-index b36a943..4f211f9 100644
+index 69ec46a..b7212be 100644
--- a/libmctp.h
+++ b/libmctp.h
@@ -15,6 +15,7 @@ extern "C" {
@@ -71,9 +69,9 @@ index b36a943..4f211f9 100644
#define MCTP_HDR_TAG_MASK (0x7)
+/* clang-format on */
- /* Baseline maximum size of a MCTP packet */
- #define MCTP_BMTU_PAYLOAD 64
- #define MCTP_BMTU (MCTP_BMTU_PAYLOAD + sizeof(struct mctp_hdr))
+ /* Baseline Transmission Unit and packet size */
+ #define MCTP_BTU 64
+ #define MCTP_PACKET_SIZE(unit) ((unit) + sizeof(struct mctp_hdr))
+#define MCTP_CONTROL_MESSAGE_TYPE 0x00
+
diff --git a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/libmctp-smbus.h b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/libmctp-smbus.h
index 5ecaa6b74..67690bcb3 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/libmctp-smbus.h
+++ b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/libmctp-smbus.h
@@ -20,6 +20,10 @@ int mctp_smbus_read(struct mctp_binding_smbus *smbus);
int mctp_smbus_open_bus(struct mctp_binding_smbus *smbus, int out_bus_num,
int root_bus_num);
void mctp_smbus_free(struct mctp_binding_smbus *smbus);
+int mctp_smbus_open_in_bus(struct mctp_binding_smbus *smbus, int in_bus);
+int mctp_smbus_open_out_bus(struct mctp_binding_smbus *smbus, int out_bus);
+int mctp_smbus_set_in_fd(struct mctp_binding_smbus *smbus, int fd);
+int mctp_smbus_set_out_fd(struct mctp_binding_smbus *smbus, int fd);
#ifdef __cplusplus
}
diff --git a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/smbus.c b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/smbus.c
index bbdfe2aa4..2f099a7e5 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/smbus.c
+++ b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/smbus.c
@@ -52,6 +52,7 @@ struct mctp_binding_smbus {
#define SMBUS_PEC_BYTE_SIZE 1
#define SMBUS_COMMAND_CODE_SIZE 1
#define SMBUS_LENGTH_FIELD_SIZE 1
+#define SMBUS_ADDR_OFFSET_SLAVE 0x1000
struct mctp_smbus_header_tx {
uint8_t source_slave_address;
@@ -312,7 +313,7 @@ int mctp_smbus_open_in_bus(struct mctp_binding_smbus *smbus, int in_bus)
snprintf(filename, size,
"/sys/bus/i2c/devices/i2c-%d/%d-%04x/slave-mqueue", in_bus,
- in_bus, (address_7_bit << 8) + address_7_bit);
+ in_bus, SMBUS_ADDR_OFFSET_SLAVE | address_7_bit);
ret = open(filename, O_RDONLY | O_NONBLOCK | O_CLOEXEC);
if (ret >= 0) {
@@ -333,7 +334,7 @@ int mctp_smbus_open_in_bus(struct mctp_binding_smbus *smbus, int in_bus)
mqueue_size = sizeof(slave_mqueue);
snprintf(slave_mqueue, mqueue_size, "slave-mqueue %#04x",
- (address_7_bit << 8) + address_7_bit);
+ SMBUS_ADDR_OFFSET_SLAVE | address_7_bit);
size = write(fd, slave_mqueue, mqueue_size);
close(fd);
@@ -345,7 +346,7 @@ int mctp_smbus_open_in_bus(struct mctp_binding_smbus *smbus, int in_bus)
size = sizeof(filename);
snprintf(filename, size,
"/sys/bus/i2c/devices/i2c-%d/%d-%04x/slave-mqueue", in_bus,
- in_bus, (address_7_bit << 8) + address_7_bit);
+ in_bus, SMBUS_ADDR_OFFSET_SLAVE | address_7_bit);
return open(filename, O_RDONLY | O_NONBLOCK | O_CLOEXEC);
}
@@ -375,7 +376,7 @@ int mctp_smbus_open_bus(struct mctp_binding_smbus *smbus, int out_bus_num,
snprintf(filename, size,
"/sys/bus/i2c/devices/i2c-%d/%d-%04x/slave-mqueue",
root_bus_num, root_bus_num,
- (address_7_bit << 8) + address_7_bit);
+ SMBUS_ADDR_OFFSET_SLAVE | address_7_bit);
smbus->in_fd = open(filename, O_RDONLY | O_NONBLOCK | O_CLOEXEC);
if (smbus->in_fd < 0) {
@@ -394,7 +395,7 @@ int mctp_smbus_open_bus(struct mctp_binding_smbus *smbus, int out_bus_num,
mqueue_size = sizeof(slave_mqueue);
snprintf(slave_mqueue, mqueue_size, "slave-mqueue %#04x",
- (address_7_bit << 8) + address_7_bit);
+ SMBUS_ADDR_OFFSET_SLAVE | address_7_bit);
size = write(fd, slave_mqueue, mqueue_size);
close(fd);
@@ -408,7 +409,7 @@ int mctp_smbus_open_bus(struct mctp_binding_smbus *smbus, int out_bus_num,
snprintf(filename, size,
"/sys/bus/i2c/devices/i2c-%d/%d-%04x/slave-mqueue",
root_bus_num, root_bus_num,
- (address_7_bit << 8) + address_7_bit);
+ SMBUS_ADDR_OFFSET_SLAVE | address_7_bit);
smbus->in_fd =
open(filename, O_RDONLY | O_NONBLOCK | O_CLOEXEC);
diff --git a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp_git.bb b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp_git.bb
index 132db31c7..97ce1179f 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp_git.bb
@@ -2,7 +2,7 @@ SUMMARY = "libmctp"
DESCRIPTION = "Implementation of MCTP (DTMF DSP0236)"
SRC_URI = "git://github.com/openbmc/libmctp.git"
-SRCREV = "34b9b3d82b049610775aea4460ff0f3bb9f02b1d"
+SRCREV = "b6516a083c622a76e3e485f56b743b2a63171881"
PV = "0.1+git${SRCPV}"
diff --git a/meta-openbmc-mods/meta-common/recipes-core/ipmi/intel-ipmi-oem_%.bbappend b/meta-openbmc-mods/meta-common/recipes-core/ipmi/intel-ipmi-oem_%.bbappend
index 0cb5bd52e..eeafa0222 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/ipmi/intel-ipmi-oem_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-core/ipmi/intel-ipmi-oem_%.bbappend
@@ -1,4 +1,5 @@
EXTRA_OECMAKE += "${@bb.utils.contains('IMAGE_FSTYPES', 'intel-pfr', '-DINTEL_PFR_ENABLED=ON', '', d)}"
EXTRA_OECMAKE += "${@bb.utils.contains('EXTRA_IMAGE_FEATURES', 'validation-unsecure', '-DBMC_VALIDATION_UNSECURE_FEATURE=ON', '', d)}"
+EXTRA_OECMAKE += "-DUSING_ENTITY_MANAGER_DECORATORS=OFF"
SRC_URI = "git://github.com/openbmc/intel-ipmi-oem.git"
-SRCREV = "38b58f5866602906833f7afc864dd2729516dd7f"
+SRCREV = "849c319f95bfc5b76b1731cadbf95c24093aa53c"
diff --git a/meta-openbmc-mods/meta-common/recipes-core/ipmi/ipmi-providers.bb b/meta-openbmc-mods/meta-common/recipes-core/ipmi/ipmi-providers.bb
deleted file mode 100644
index 939efa75f..000000000
--- a/meta-openbmc-mods/meta-common/recipes-core/ipmi/ipmi-providers.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "Intel IPMI Providers"
-DESCRIPTION = "IPMI Provider Libraries"
-
-SRC_URI = "git://github.com/Intel-BMC/intel-ipmi-providers;protocol=ssh"
-SRCREV = "b2c6184269e3bdf601c38f716ac7ee73379af71b"
-
-S = "${WORKDIR}/git"
-PV = "0.1+git${SRCPV}"
-
-DEPENDS = "boost phosphor-ipmi-host intel-ipmi-oem systemd microsoft-gsl"
-
-inherit cmake obmc-phosphor-ipmiprovider-symlink
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=2ee41112a44fe7014dce33e26468ba93"
-
-EXTRA_OECMAKE="-DENABLE_TEST=0 -DYOCTO=1"
-
-LIBRARY_NAMES += "libmtmcmds.so"
-LIBRARY_NAMES += "libsmbioshandler.so"
-LIBRARY_NAMES += "libzbridgecmd.so"
-LIBRARY_NAMES += "libsmbiosmdrv2.so"
-LIBRARY_NAMES += "libfwupdcmds.so"
-
-HOSTIPMI_PROVIDER_LIBRARY += "${LIBRARY_NAMES}"
-NETIPMI_PROVIDER_LIBRARY += "${LIBRARY_NAMES}"
-
-FILES_${PN}_append = " ${libdir}/ipmid-providers/lib*${SOLIBS}"
-FILES_${PN}_append = " ${libdir}/host-ipmid/lib*${SOLIBS}"
-FILES_${PN}_append = " ${libdir}/net-ipmid/lib*${SOLIBS}"
-FILES_${PN}-dev_append = " ${libdir}/ipmid-providers/lib*${SOLIBSDEV}"
-
diff --git a/meta-openbmc-mods/meta-common/recipes-core/libpeci/libpeci_git.bb b/meta-openbmc-mods/meta-common/recipes-core/libpeci/libpeci_git.bb
index 5ec8669e6..5a49156da 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/libpeci/libpeci_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-core/libpeci/libpeci_git.bb
@@ -5,7 +5,7 @@ inherit cmake
SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh"
PV = "0.1+git${SRCPV}"
-SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9"
+SRCREV = "bee56d62b209088454d166d1efae4825a2b175df"
S = "${WORKDIR}/git/libpeci"
diff --git a/meta-openbmc-mods/meta-common/recipes-core/safec/safec_3.4.bb b/meta-openbmc-mods/meta-common/recipes-core/safec/safec_3.4.bb
index a09c8ac2d..449dcf04d 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/safec/safec_3.4.bb
+++ b/meta-openbmc-mods/meta-common/recipes-core/safec/safec_3.4.bb
@@ -7,7 +7,7 @@ SECTION = "lib"
inherit autotools pkgconfig
S = "${WORKDIR}/git"
-SRCREV = "60786283fd61cd621a5d1df00e083a1c1e3cf52a"
+SRCREV = "a7da29dadadde04feec174f595b59d67a64f3956"
SRC_URI = "git://github.com/rurban/safeclib.git"
COMPATIBLE_HOST = '(x86_64|i.86|powerpc|powerpc64|arm|aarch64).*-linux'