[Mellanox] Improve FW upgrade logging: add syslog logger (#7221)

Basically mlnx-fw-upgrade.sh is used in two places:
1. https://github.com/Azure/sonic-buildimage/blob/201811/files/scripts/syncd.sh#L109
```bash
        /usr/bin/mst start
        /usr/bin/mlnx-fw-upgrade.sh
        /etc/init.d/sxdkernel start
        /sbin/modprobe i2c-dev
```
2. https://github.com/Azure/sonic-buildimage/blob/201811/device/mellanox/x86_64-mlnx_msn2700-r0/platform_reboot#L32
```bash
ParseArguments "$@"

${FW_UPGRADE_SCRIPT} --upgrade --verbose
EXIT_CODE="$?"
```

In first case the `stdout` is redirected to `syslog` directly by `systemd`.
Thus, the `syslog` logger is only required in second case.

#### Why I did it
* To improve ASIC/CPLD FW upgrade logging
* To improve CPLD upgrade time

#### How I did it
* Added `syslog` logger support
* Replaced `_pciconf0` -> `_pci_cr0` to reduce CPLD upgrade time

#### How to verify it
1. mlnx-fw-upgrade.sh --upgrade
This commit is contained in:
Nazarii Hnydyn 2021-04-07 20:57:12 +03:00 committed by GitHub
parent 161bca602f
commit 72c506061c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -28,6 +28,7 @@ declare -r FW_REQUIRED="{{ MLNX_SPC_FW_VERSION }}"
IMAGE_UPGRADE="${NO_PARAM}" IMAGE_UPGRADE="${NO_PARAM}"
CPLD_UPGRADE="${NO_PARAM}" CPLD_UPGRADE="${NO_PARAM}"
SYSLOG_LOGGER="${NO_PARAM}"
VERBOSE_LEVEL="${VERBOSE_MIN}" VERBOSE_LEVEL="${VERBOSE_MIN}"
function PrintHelp() { function PrintHelp() {
@ -37,7 +38,8 @@ function PrintHelp() {
echo "OPTIONS:" echo "OPTIONS:"
echo " -u, --upgrade Upgrade firmware using next boot image (useful after SONiC-To-SONiC update)" echo " -u, --upgrade Upgrade firmware using next boot image (useful after SONiC-To-SONiC update)"
echo " -c, --cpld Upgrade CPLD firmware (requires -u|--upgrade)" echo " -c, --cpld Upgrade CPLD firmware (requires -u|--upgrade)"
echo " -v, --verbose Verbose mode" echo " -s, --syslog Use syslog logger (enabled when -u|--upgrade)"
echo " -v, --verbose Verbose mode (enabled when -u|--upgrade)"
echo " -h, --help Print help" echo " -h, --help Print help"
echo echo
echo "Examples:" echo "Examples:"
@ -53,11 +55,15 @@ function ParseArguments() {
case "$1" in case "$1" in
-u|--upgrade) -u|--upgrade)
IMAGE_UPGRADE="${YES_PARAM}" IMAGE_UPGRADE="${YES_PARAM}"
SYSLOG_LOGGER="${YES_PARAM}"
VERBOSE_LEVEL="${VERBOSE_MAX}" VERBOSE_LEVEL="${VERBOSE_MAX}"
;; ;;
-c|--cpld) -c|--cpld)
CPLD_UPGRADE="${YES_PARAM}" CPLD_UPGRADE="${YES_PARAM}"
;; ;;
-s|--syslog)
SYSLOG_LOGGER="${YES_PARAM}"
;;
-v|--verbose) -v|--verbose)
VERBOSE_LEVEL="${VERBOSE_MAX}" VERBOSE_LEVEL="${VERBOSE_MAX}"
;; ;;
@ -74,24 +80,40 @@ function LogError() {
if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_ERROR}" ]]; then if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_ERROR}" ]]; then
echo "ERROR: $*" echo "ERROR: $*"
fi fi
if [[ "${SYSLOG_LOGGER}" = "${YES_PARAM}" ]]; then
logger -p "ERROR" -t "${SCRIPT_NAME}" "$*"
fi
} }
function LogWarning() { function LogWarning() {
if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_WARNING}" ]]; then if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_WARNING}" ]]; then
echo "WARNING: $*" echo "WARNING: $*"
fi fi
if [[ "${SYSLOG_LOGGER}" = "${YES_PARAM}" ]]; then
logger -p "WARNING" -t "${SCRIPT_NAME}" "$*"
fi
} }
function LogNotice() { function LogNotice() {
if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_NOTICE}" ]]; then if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_NOTICE}" ]]; then
echo "NOTICE: $*" echo "NOTICE: $*"
fi fi
if [[ "${SYSLOG_LOGGER}" = "${YES_PARAM}" ]]; then
logger -p "NOTICE" -t "${SCRIPT_NAME}" "$*"
fi
} }
function LogInfo() { function LogInfo() {
if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_INFO}" ]]; then if [[ "${VERBOSE_LEVEL}" -ge "${VERBOSE_INFO}" ]]; then
echo "INFO: $*" echo "INFO: $*"
fi fi
if [[ "${SYSLOG_LOGGER}" = "${YES_PARAM}" ]]; then
logger -p "INFO" -t "${SCRIPT_NAME}" "$*"
fi
} }
function ExitFailure() { function ExitFailure() {
@ -219,7 +241,11 @@ function UpgradeASICFW() {
function UpgradeCPLDFW_Worker() { function UpgradeCPLDFW_Worker() {
local -r _CPLD_BURN_FILE="${1}" local -r _CPLD_BURN_FILE="${1}"
local -r _CPLD_REFRESH_FILE="${2}" local -r _CPLD_REFRESH_FILE="${2}"
local -r _ASIC_DEV="$(find /dev/mst -iname '*_pciconf0')" local -r _ASIC_DEV="$(find /dev/mst -iname '*_pci_cr0')"
# Flush syslog
RunCmd "kill -HUP $(cat /var/run/rsyslogd.pid)"
RunCmd "sync; sync"
if [[ -f /tmp/cpld_fw_updated ]]; then if [[ -f /tmp/cpld_fw_updated ]]; then
RunCmd "cpldupdate --dev ${_ASIC_DEV} ${_CPLD_REFRESH_FILE}" RunCmd "cpldupdate --dev ${_ASIC_DEV} ${_CPLD_REFRESH_FILE}"