From ff0819e1b82bf2650042899c5cd85dafe53fb711 Mon Sep 17 00:00:00 2001 From: Stepan Blyschak Date: Wed, 15 Feb 2023 10:10:28 +0200 Subject: [PATCH 1/3] [nvidia] Place FW binaries under platform directory instead of squashfs Signed-off-by: Stepan Blyschak --- .../build_templates/sonic_debian_extension.j2 | 24 +++++++++--- platform/mellanox/mlnx-fw-upgrade.j2 | 38 ++++++++++++------- 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 560b09801ec..5d7d809891e 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -523,20 +523,34 @@ sudo cp {{src}} $FILESYSTEM_ROOT/{{dst}} {% if sonic_asic_platform == "mellanox" %} if [ -n "$MLNX_CPLD_ARCHIVES" ]; then 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 - 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/$MLNX_CPLD_ARCHIVE $FILESYSTEM_ROOT/etc/mlnx/cpld/$MLNX_BIOS_ARCHIVE done fi if [ -n "$MLNX_BIOS_ARCHIVES" ]; then 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 - 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/$MLNX_BIOS_ARCHIVE $FILESYSTEM_ROOT/etc/mlnx/bios/$MLNX_BIOS_ARCHIVE done 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 cp $files_path/$MLNX_SPC_FW_FILE $FILESYSTEM_ROOT/etc/mlnx/fw-SPC.mfa -sudo cp $files_path/$MLNX_SPC2_FW_FILE $FILESYSTEM_ROOT/etc/mlnx/fw-SPC2.mfa -sudo cp $files_path/$MLNX_SPC3_FW_FILE $FILESYSTEM_ROOT/etc/mlnx/fw-SPC3.mfa +sudo mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR/fw/asic/ +for fw_file_name in ${!FW_FILE_MAP[@]}; do + sudo cp $files_path/$fw_file_name $FILESYSTEM_ROOT/$PLATFORM_DIR/${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_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/$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 diff --git a/platform/mellanox/mlnx-fw-upgrade.j2 b/platform/mellanox/mlnx-fw-upgrade.j2 index 50081bedb87..7d1497908ec 100755 --- a/platform/mellanox/mlnx-fw-upgrade.j2 +++ b/platform/mellanox/mlnx-fw-upgrade.j2 @@ -29,9 +29,9 @@ declare -r SPC3_ASIC="spc3" declare -r UNKN_ASIC="unknown" declare -rA FW_FILE_MAP=( \ - [$SPC1_ASIC]="/etc/mlnx/fw-SPC.mfa" \ - [$SPC2_ASIC]="/etc/mlnx/fw-SPC2.mfa" \ - [$SPC3_ASIC]="/etc/mlnx/fw-SPC3.mfa" \ + [$SPC1_ASIC]="fw-SPC.mfa" \ + [$SPC2_ASIC]="fw-SPC2.mfa" \ + [$SPC3_ASIC]="fw-SPC3.mfa" \ ) declare -rA FW_REQUIRED_MAP=( \ [$SPC1_ASIC]="{{ MLNX_SPC_FW_VERSION }}" \ @@ -205,15 +205,15 @@ function RunCmd() { } function UpgradeASICFW() { - local -r _FS_MOUNTPOINT="$1" + local -r _FW_BIN_PATH="$1" local -r _ASIC_TYPE="$(GetAsicType)" if [[ "${_ASIC_TYPE}" = "${UNKN_ASIC}" ]]; then ExitFailure "failed to detect ASIC type" fi - if [ ! -z "${_FS_MOUNTPOINT}" ]; then - local -r _FW_FILE="${_FS_MOUNTPOINT}/${FW_FILE_MAP[$_ASIC_TYPE]}" + if [ ! -z "${_FW_BIN_PATH}" ]; then + local -r _FW_FILE="${_FW_BIN_PATH}/${FW_FILE_MAP[$_ASIC_TYPE]}" if [ ! -f "${_FW_FILE}" ]; then 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_AVAILABLE="$(echo ${_FW_INFO} | cut -f3 -d' ')" 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 @@ -332,15 +332,27 @@ function UpgradeFWFromImage() { ExitSuccess "firmware is up to date" fi - FS_PATH="/host/image-${_NEXT_SONIC_IMAGE#SONiC-OS-}/fs.squashfs" - FS_MOUNTPOINT="/tmp/image-${_NEXT_SONIC_IMAGE#SONiC-OS-}-fs" + # /host/image-/platform/fw/asic is now the new location for FW binaries. + # Prefere this path and if it does not exist use squashfs as a fallback. + local -r _NEXT_IMAGE_FW_BIN_PATH="/host/image-${_NEXT_SONIC_IMAGE#SONiC-OS-}/platform/fw/" - RunCmd "mkdir -p ${FS_MOUNTPOINT}" - RunCmd "mount -t squashfs ${FS_PATH} ${FS_MOUNTPOINT}" + if [[ -d "${_NEXT_IMAGE_FW_BIN_PATH}" ]]; then + LogInfo "Using FW binaries from ${_NEXT_IMAGE_FW_BIN_PATH}" + UpgradeASICFW "${_NEXT_IMAGE_FW_BIN_PATH}/asic" + UpgradeCPLDFW "${_NEXT_IMAGE_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" + + LogInfo "Using FW binaries from ${FS_MOUNTPOINT}" - UpgradeASICFW "${FS_MOUNTPOINT}${FW_FILE}" - 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() { From 5121beefd4ba1c0e35e4a564c34e638680e5f286 Mon Sep 17 00:00:00 2001 From: Stepan Blyschak Date: Thu, 16 Feb 2023 16:20:36 +0200 Subject: [PATCH 2/3] fix path location Signed-off-by: Stepan Blyschak --- files/build_templates/sonic_debian_extension.j2 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 5d7d809891e..84010bfb3d8 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -527,7 +527,7 @@ sudo mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR/fw/cpld/ for MLNX_CPLD_ARCHIVE in $MLNX_CPLD_ARCHIVES; do 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/$MLNX_CPLD_ARCHIVE $FILESYSTEM_ROOT/etc/mlnx/cpld/$MLNX_BIOS_ARCHIVE + sudo ln -s /host/image-$SONIC_IMAGE_VERSION/$PLATFORM_DIR/fw/cpld/$MLNX_CPLD_ARCHIVE $FILESYSTEM_ROOT/etc/mlnx/cpld/$MLNX_BIOS_ARCHIVE done fi if [ -n "$MLNX_BIOS_ARCHIVES" ]; then @@ -536,7 +536,7 @@ sudo mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR/fw/bios/ for MLNX_BIOS_ARCHIVE in $MLNX_BIOS_ARCHIVES; do 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/$MLNX_BIOS_ARCHIVE $FILESYSTEM_ROOT/etc/mlnx/bios/$MLNX_BIOS_ARCHIVE + sudo ln -s /host/image-$SONIC_IMAGE_VERSION/$PLATFORM_DIR/fw/bios/$MLNX_BIOS_ARCHIVE $FILESYSTEM_ROOT/etc/mlnx/bios/$MLNX_BIOS_ARCHIVE done fi declare -rA FW_FILE_MAP=( \ @@ -547,9 +547,9 @@ declare -rA FW_FILE_MAP=( \ sudo mkdir -p $FILESYSTEM_ROOT/etc/mlnx/ sudo mkdir -p $FILESYSTEM_ROOT/$PLATFORM_DIR/fw/asic/ for fw_file_name in ${!FW_FILE_MAP[@]}; do - sudo cp $files_path/$fw_file_name $FILESYSTEM_ROOT/$PLATFORM_DIR/${FW_FILE_MAP[$fw_file_name]} + 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_FILE_MAP[$fw_file_name]} $FILESYSTEM_ROOT/etc/mlnx/${FW_FILE_MAP[$fw_file_name]} + 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/$MLNX_FFB_SCRIPT $FILESYSTEM_ROOT/usr/bin/mlnx-ffb.sh From 68c2aff15e8f5968bb400d669e4ef0f0e2547f58 Mon Sep 17 00:00:00 2001 From: Stepan Blyschak Date: Thu, 16 Feb 2023 16:50:11 +0200 Subject: [PATCH 3/3] rename _NEXT_IMAGE_FW_BIN_PATH Signed-off-by: Stepan Blyschak --- platform/mellanox/mlnx-fw-upgrade.j2 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/platform/mellanox/mlnx-fw-upgrade.j2 b/platform/mellanox/mlnx-fw-upgrade.j2 index 7d1497908ec..6c82c2a850b 100755 --- a/platform/mellanox/mlnx-fw-upgrade.j2 +++ b/platform/mellanox/mlnx-fw-upgrade.j2 @@ -332,15 +332,15 @@ function UpgradeFWFromImage() { ExitSuccess "firmware is up to date" fi - # /host/image-/platform/fw/asic is now the new location for FW binaries. + # /host/image-/platform/fw is now the new location for FW binaries. # Prefere this path and if it does not exist use squashfs as a fallback. - local -r _NEXT_IMAGE_FW_BIN_PATH="/host/image-${_NEXT_SONIC_IMAGE#SONiC-OS-}/platform/fw/" + local -r _PLATFORM_FW_BIN_PATH="/host/image-${_NEXT_SONIC_IMAGE#SONiC-OS-}/platform/fw/" - if [[ -d "${_NEXT_IMAGE_FW_BIN_PATH}" ]]; then - LogInfo "Using FW binaries from ${_NEXT_IMAGE_FW_BIN_PATH}" + if [[ -d "${_PLATFORM_FW_BIN_PATH}" ]]; then + LogInfo "Using FW binaries from ${_PLATFORM_FW_BIN_PATH}" - UpgradeASICFW "${_NEXT_IMAGE_FW_BIN_PATH}/asic" - UpgradeCPLDFW "${_NEXT_IMAGE_FW_BIN_PATH}/cpld/${ONIE_MACHINE#mlnx_}_cpld.tar.gz" + 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"