[201911][Mellanox] Place FW binaries under platform directory instead of squashfs (#14270)
202211 and above uses different squashfs compression type that 201911 kernel can not handle. Therefore, we avoid mounting squashfs altogather with this change.
This commit is contained in:
parent
e5c6c2f9b9
commit
16cce80e20
@ -523,20 +523,34 @@ sudo cp {{src}} $FILESYSTEM_ROOT/{{dst}}
|
|||||||
{% if sonic_asic_platform == "mellanox" %}
|
{% if sonic_asic_platform == "mellanox" %}
|
||||||
if [ -n "$MLNX_CPLD_ARCHIVES" ]; then
|
if [ -n "$MLNX_CPLD_ARCHIVES" ]; then
|
||||||
sudo mkdir -p $FILESYSTEM_ROOT/etc/mlnx/cpld/
|
sudo mkdir -p $FILESYSTEM_ROOT/etc/mlnx/cpld/
|
||||||
|
sudo mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR/fw/cpld/
|
||||||
for MLNX_CPLD_ARCHIVE in $MLNX_CPLD_ARCHIVES; do
|
for MLNX_CPLD_ARCHIVE in $MLNX_CPLD_ARCHIVES; do
|
||||||
sudo cp $files_path/$MLNX_CPLD_ARCHIVE $FILESYSTEM_ROOT/etc/mlnx/cpld/
|
sudo cp $files_path/$MLNX_CPLD_ARCHIVE $FILESYSTEM_ROOT/$PLATFORM_DIR/fw/cpld/
|
||||||
|
# Link old BIOS location to not break existing automation/scripts
|
||||||
|
sudo ln -s /host/image-$SONIC_IMAGE_VERSION/$PLATFORM_DIR/fw/cpld/$MLNX_CPLD_ARCHIVE $FILESYSTEM_ROOT/etc/mlnx/cpld/$MLNX_BIOS_ARCHIVE
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
if [ -n "$MLNX_BIOS_ARCHIVES" ]; then
|
if [ -n "$MLNX_BIOS_ARCHIVES" ]; then
|
||||||
sudo mkdir -p $FILESYSTEM_ROOT/etc/mlnx/bios/
|
sudo mkdir -p $FILESYSTEM_ROOT/etc/mlnx/bios/
|
||||||
|
sudo mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR/fw/bios/
|
||||||
for MLNX_BIOS_ARCHIVE in $MLNX_BIOS_ARCHIVES; do
|
for MLNX_BIOS_ARCHIVE in $MLNX_BIOS_ARCHIVES; do
|
||||||
sudo cp $files_path/$MLNX_BIOS_ARCHIVE $FILESYSTEM_ROOT/etc/mlnx/bios/
|
sudo cp $files_path/$MLNX_BIOS_ARCHIVE $FILESYSTEM_ROOT/$PLATFORM_DIR/fw/bios/
|
||||||
|
# Link old BIOS location to not break existing automation/scripts
|
||||||
|
sudo ln -s /host/image-$SONIC_IMAGE_VERSION/$PLATFORM_DIR/fw/bios/$MLNX_BIOS_ARCHIVE $FILESYSTEM_ROOT/etc/mlnx/bios/$MLNX_BIOS_ARCHIVE
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
declare -rA FW_FILE_MAP=( \
|
||||||
|
[$MLNX_SPC_FW_FILE]="fw-SPC.mfa" \
|
||||||
|
[$MLNX_SPC2_FW_FILE]="fw-SPC2.mfa" \
|
||||||
|
[$MLNX_SPC3_FW_FILE]="fw-SPC3.mfa" \
|
||||||
|
)
|
||||||
sudo mkdir -p $FILESYSTEM_ROOT/etc/mlnx/
|
sudo mkdir -p $FILESYSTEM_ROOT/etc/mlnx/
|
||||||
sudo cp $files_path/$MLNX_SPC_FW_FILE $FILESYSTEM_ROOT/etc/mlnx/fw-SPC.mfa
|
sudo mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR/fw/asic/
|
||||||
sudo cp $files_path/$MLNX_SPC2_FW_FILE $FILESYSTEM_ROOT/etc/mlnx/fw-SPC2.mfa
|
for fw_file_name in ${!FW_FILE_MAP[@]}; do
|
||||||
sudo cp $files_path/$MLNX_SPC3_FW_FILE $FILESYSTEM_ROOT/etc/mlnx/fw-SPC3.mfa
|
sudo cp $files_path/$fw_file_name $FILESYSTEM_ROOT/$PLATFORM_DIR/fw/asic/${FW_FILE_MAP[$fw_file_name]}
|
||||||
|
# Link old FW location to not break existing automation/scripts
|
||||||
|
sudo ln -s /host/image-$SONIC_IMAGE_VERSION/$PLATFORM_DIR/fw/asic/${FW_FILE_MAP[$fw_file_name]} $FILESYSTEM_ROOT/etc/mlnx/${FW_FILE_MAP[$fw_file_name]}
|
||||||
|
done
|
||||||
sudo cp $files_path/$ISSU_VERSION_FILE $FILESYSTEM_ROOT/etc/mlnx/issu-version
|
sudo cp $files_path/$ISSU_VERSION_FILE $FILESYSTEM_ROOT/etc/mlnx/issu-version
|
||||||
sudo cp $files_path/$MLNX_FFB_SCRIPT $FILESYSTEM_ROOT/usr/bin/mlnx-ffb.sh
|
sudo cp $files_path/$MLNX_FFB_SCRIPT $FILESYSTEM_ROOT/usr/bin/mlnx-ffb.sh
|
||||||
sudo cp $files_path/$MLNX_ONIE_FW_UPDATE $FILESYSTEM_ROOT/usr/bin/$MLNX_ONIE_FW_UPDATE
|
sudo cp $files_path/$MLNX_ONIE_FW_UPDATE $FILESYSTEM_ROOT/usr/bin/$MLNX_ONIE_FW_UPDATE
|
||||||
|
@ -29,9 +29,9 @@ declare -r SPC3_ASIC="spc3"
|
|||||||
declare -r UNKN_ASIC="unknown"
|
declare -r UNKN_ASIC="unknown"
|
||||||
|
|
||||||
declare -rA FW_FILE_MAP=( \
|
declare -rA FW_FILE_MAP=( \
|
||||||
[$SPC1_ASIC]="/etc/mlnx/fw-SPC.mfa" \
|
[$SPC1_ASIC]="fw-SPC.mfa" \
|
||||||
[$SPC2_ASIC]="/etc/mlnx/fw-SPC2.mfa" \
|
[$SPC2_ASIC]="fw-SPC2.mfa" \
|
||||||
[$SPC3_ASIC]="/etc/mlnx/fw-SPC3.mfa" \
|
[$SPC3_ASIC]="fw-SPC3.mfa" \
|
||||||
)
|
)
|
||||||
declare -rA FW_REQUIRED_MAP=( \
|
declare -rA FW_REQUIRED_MAP=( \
|
||||||
[$SPC1_ASIC]="{{ MLNX_SPC_FW_VERSION }}" \
|
[$SPC1_ASIC]="{{ MLNX_SPC_FW_VERSION }}" \
|
||||||
@ -205,15 +205,15 @@ function RunCmd() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function UpgradeASICFW() {
|
function UpgradeASICFW() {
|
||||||
local -r _FS_MOUNTPOINT="$1"
|
local -r _FW_BIN_PATH="$1"
|
||||||
|
|
||||||
local -r _ASIC_TYPE="$(GetAsicType)"
|
local -r _ASIC_TYPE="$(GetAsicType)"
|
||||||
if [[ "${_ASIC_TYPE}" = "${UNKN_ASIC}" ]]; then
|
if [[ "${_ASIC_TYPE}" = "${UNKN_ASIC}" ]]; then
|
||||||
ExitFailure "failed to detect ASIC type"
|
ExitFailure "failed to detect ASIC type"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -z "${_FS_MOUNTPOINT}" ]; then
|
if [ ! -z "${_FW_BIN_PATH}" ]; then
|
||||||
local -r _FW_FILE="${_FS_MOUNTPOINT}/${FW_FILE_MAP[$_ASIC_TYPE]}"
|
local -r _FW_FILE="${_FW_BIN_PATH}/${FW_FILE_MAP[$_ASIC_TYPE]}"
|
||||||
|
|
||||||
if [ ! -f "${_FW_FILE}" ]; then
|
if [ ! -f "${_FW_FILE}" ]; then
|
||||||
ExitFailure "no such file: ${_FW_FILE}"
|
ExitFailure "no such file: ${_FW_FILE}"
|
||||||
@ -225,7 +225,7 @@ function UpgradeASICFW() {
|
|||||||
local -r _FW_CURRENT="$(echo ${_FW_INFO} | cut -f2 -d' ')"
|
local -r _FW_CURRENT="$(echo ${_FW_INFO} | cut -f2 -d' ')"
|
||||||
local -r _FW_AVAILABLE="$(echo ${_FW_INFO} | cut -f3 -d' ')"
|
local -r _FW_AVAILABLE="$(echo ${_FW_INFO} | cut -f3 -d' ')"
|
||||||
else
|
else
|
||||||
local -r _FW_FILE="${FW_FILE_MAP[$_ASIC_TYPE]}"
|
local -r _FW_FILE="/etc/mlnx/${FW_FILE_MAP[$_ASIC_TYPE]}"
|
||||||
|
|
||||||
RunCmd "${QUERY_CMD} -L ${QUERY_FILE}" &>/dev/null
|
RunCmd "${QUERY_CMD} -L ${QUERY_FILE}" &>/dev/null
|
||||||
|
|
||||||
@ -332,15 +332,27 @@ function UpgradeFWFromImage() {
|
|||||||
ExitSuccess "firmware is up to date"
|
ExitSuccess "firmware is up to date"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
FS_PATH="/host/image-${_NEXT_SONIC_IMAGE#SONiC-OS-}/fs.squashfs"
|
# /host/image-<version>/platform/fw is now the new location for FW binaries.
|
||||||
FS_MOUNTPOINT="/tmp/image-${_NEXT_SONIC_IMAGE#SONiC-OS-}-fs"
|
# Prefere this path and if it does not exist use squashfs as a fallback.
|
||||||
|
local -r _PLATFORM_FW_BIN_PATH="/host/image-${_NEXT_SONIC_IMAGE#SONiC-OS-}/platform/fw/"
|
||||||
|
|
||||||
RunCmd "mkdir -p ${FS_MOUNTPOINT}"
|
if [[ -d "${_PLATFORM_FW_BIN_PATH}" ]]; then
|
||||||
RunCmd "mount -t squashfs ${FS_PATH} ${FS_MOUNTPOINT}"
|
LogInfo "Using FW binaries from ${_PLATFORM_FW_BIN_PATH}"
|
||||||
|
|
||||||
|
UpgradeASICFW "${_PLATFORM_FW_BIN_PATH}/asic"
|
||||||
|
UpgradeCPLDFW "${_PLATFORM_FW_BIN_PATH}/cpld/${ONIE_MACHINE#mlnx_}_cpld.tar.gz"
|
||||||
|
else
|
||||||
|
FS_PATH="/host/image-${_NEXT_SONIC_IMAGE#SONiC-OS-}/fs.squashfs"
|
||||||
|
FS_MOUNTPOINT="/tmp/image-${_NEXT_SONIC_IMAGE#SONiC-OS-}-fs"
|
||||||
|
|
||||||
UpgradeASICFW "${FS_MOUNTPOINT}${FW_FILE}"
|
LogInfo "Using FW binaries from ${FS_MOUNTPOINT}"
|
||||||
UpgradeCPLDFW "${FS_MOUNTPOINT}/etc/mlnx/cpld/${ONIE_MACHINE#mlnx_}_cpld.tar.gz"
|
|
||||||
|
RunCmd "mkdir -p ${FS_MOUNTPOINT}"
|
||||||
|
RunCmd "mount -t squashfs ${FS_PATH} ${FS_MOUNTPOINT}"
|
||||||
|
|
||||||
|
UpgradeASICFW "${FS_MOUNTPOINT}/etc/mlnx/${FW_FILE}"
|
||||||
|
UpgradeCPLDFW "${FS_MOUNTPOINT}/etc/mlnx/cpld/${ONIE_MACHINE#mlnx_}_cpld.tar.gz"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function Cleanup() {
|
function Cleanup() {
|
||||||
|
Reference in New Issue
Block a user