From 5ecd38f5aeb889faa5bdd5c94ca32e5006741d6f Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 26 Feb 2026 12:36:51 +0800 Subject: [PATCH 1/5] Update NH PAI version from 3.14.0-2 -> 3.14.0-3 (#25680) #### Why I did it To bring in latest fixes from NH for Agera2 PAI ##### Work item tracking - Microsoft ADO **(35792350)**: #### How I did it #### How to verify it #### Which release branch to backport (provide reason below if selected) - [ ] 202305 - [ ] 202311 - [ ] 202405 - [ ] 202411 - [ ] 202505 - [x] 202511 #### Tested branch (Please provide the tested image version) - [ ] - [ ] #### Description for the changelog #### Link to config_db schema for YANG module changes #### A picture of a cute animal (not mandatory but encouraged) --- platform/components/docker-gbsyncd-agera2.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/components/docker-gbsyncd-agera2.mk b/platform/components/docker-gbsyncd-agera2.mk index 5e1651bd11..a4ae1f2b6b 100644 --- a/platform/components/docker-gbsyncd-agera2.mk +++ b/platform/components/docker-gbsyncd-agera2.mk @@ -1,5 +1,5 @@ # Agera2 PAI Library Package - URL-based download similar to broncos -LIBSAI_AGERA2_VERSION = 3.14.0-2 +LIBSAI_AGERA2_VERSION = 3.14.0-3 LIBSAI_AGERA2_BRANCH_NAME = REL_3.14 LIBSAI_AGERA2_URL_PREFIX = "https://packages.trafficmanager.net/public/sai/bcmpai/$(LIBSAI_AGERA2_BRANCH_NAME)/$(LIBSAI_AGERA2_VERSION)" From a81e82247eae556cacb292696248857a56f65b40 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 26 Feb 2026 14:12:16 +0800 Subject: [PATCH 2/5] config-setup: Prefer minigraph.xml over ZTP when config_db.json is absent (#25657) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description of PR **Summary:** When `config_db.json` is missing but `minigraph.xml` is present, the config-setup boot sequence previously triggered ZTP (if enabled), which generates a minimal config and runs `config reload`. This removes the device management IP, requiring console access to recover. Additionally, during warm boot the config initialization path had no guard — if `config_db.json` was absent, ZTP could still be triggered even though warm boot must preserve the existing running configuration. **Root cause:** 1. `do_config_initialization()` had no awareness of `minigraph.xml`. It only checked for ZTP or factory default, even when a valid minigraph was available on disk. 2. `check_system_warm_boot()` only checked STATE_DB, which may not be available early in the boot sequence. The canonical `SONIC_BOOT_TYPE=warm` in `/proc/cmdline` (used by all other boot-type detection in the codebase) was not checked. 3. `boot_config()` did not skip config initialization during warm boot, allowing ZTP to trigger inappropriately. **Fix (3 changes in `config-setup`):** 1. **`do_config_initialization()`**: Check for `minigraph.xml` at the top of the function, before ZTP/factory-default logic. If minigraph is available, use `reload_minigraph` and return early. This aligns with the pattern already used in `do_config_migration()`. 2. **`check_system_warm_boot()`**: Enhanced to check `/proc/cmdline` for `SONIC_BOOT_TYPE=warm` first (the authoritative source set by warm-reboot scripts), then fall back to STATE_DB for compatibility. This is consistent with `getBootType()` used in `docker_image_ctl.j2`, `syncd_common.sh`, and `watchdog-control.sh`. 3. **`boot_config()`**: Added warm boot guard after config migration — during warm boot, skip config initialization and ZTP entirely. Also added `minigraph.xml` guard on the ZTP restart block so ZTP erase/restart is skipped when minigraph was used. This maintains the config priority order consistent with `do_config_migration()`: `config_db.json` > `minigraph.xml` > ZTP > factory default. **Addresses:** ADO 36697420 — `[202511.08] Config Reload is Run during warm-boot up` ### Type of change - [x] Bug fix - [ ] Configuration change (update something in `files/` or `device/`) ### Back port request - [ ] 202505 - [x] 202511 ### Approach #### What is the motivation for this PR? With ZTP enabled on 202511 images, upgrade path tests that delete `config_db.json` trigger ZTP's fallback behavior. ZTP generates a new config and runs `config reload`, wiping management IP. The device then requires console access to recover. During warm boot this is especially dangerous as it disrupts the warm restart flow. #### How did you do it? 1. Added `minigraph.xml` existence check in `do_config_initialization()` before ZTP/factory-default logic 2. Enhanced `check_system_warm_boot()` to check `/proc/cmdline` for `SONIC_BOOT_TYPE=warm` (consistent with all other boot-type detection in the codebase) 3. Added warm boot guard in `boot_config()` to skip config initialization and ZTP during warm boot 4. Added `minigraph.xml` guard on ZTP restart block in `boot_config()` to avoid unnecessary ZTP erase when minigraph was applied #### How did you verify/test it? Code review and trace of all boot code paths in `config-setup`. The minigraph fix follows the same pattern already used in `do_config_migration()` which correctly prefers minigraph over factory default. The warm boot detection follows the same `/proc/cmdline` pattern used by `docker_image_ctl.j2`, `syncd_common.sh`, and `watchdog-control.sh`. --- files/image_config/config-setup/config-setup | 74 ++++++++++++++++---- 1 file changed, 62 insertions(+), 12 deletions(-) diff --git a/files/image_config/config-setup/config-setup b/files/image_config/config-setup/config-setup index 7053cab08a..614cbaa9a6 100755 --- a/files/image_config/config-setup/config-setup +++ b/files/image_config/config-setup/config-setup @@ -170,15 +170,37 @@ copy_config_files_and_directories() done } -# Check if SONiC switch has booted after a warm reboot request +# Check if SONiC switch has booted after a warm reboot request. +# Prefers STATE_DB when available (reflects true warm boot state and +# gets cleared after warm boot completes). Falls back to /proc/cmdline +# only during the "boot" command when database services may not be up yet. check_system_warm_boot() { - SYSTEM_WARM_START=`sonic-db-cli STATE_DB hget "WARM_RESTART_ENABLE_TABLE|system" enable` - # SYSTEM_WARM_START could be empty, always make WARM_BOOT meaningful. - if [[ x"$SYSTEM_WARM_START" == x"true" ]]; then - WARM_BOOT="true" - else - WARM_BOOT="false" + WARM_BOOT="false" + + # Try STATE_DB first — authoritative source that reflects current + # warm boot state and is cleared after warm boot completes. + SYSTEM_WARM_START=$(sonic-db-cli STATE_DB hget "WARM_RESTART_ENABLE_TABLE|system" enable) + DB_RC=$? + + if [ $DB_RC -eq 0 ]; then + # DB is reachable — use its answer exclusively + if [[ x"$SYSTEM_WARM_START" == x"true" ]]; then + WARM_BOOT="true" + fi + return + fi + + # DB not available — fall back to /proc/cmdline only during boot, + # when database services may not have started yet. + # Outside of boot context, /proc/cmdline may contain a stale + # SONIC_BOOT_TYPE=warm from a previous warm reboot. + if [ "$CMD" = "boot" ]; then + case "$(cat /proc/cmdline)" in + *SONIC_BOOT_TYPE=warm*) + WARM_BOOT="true" + ;; + esac fi } @@ -256,11 +278,24 @@ generate_config() } # Create SONiC configuration for first time bootup -# - If ZTP is enabled, ZTP configuraion is created -# - If ZTP is disabled, factory default configuration +# - If minigraph.xml is available, use it to generate configuration +# - If ZTP is enabled and no minigraph, ZTP configuration is created +# - If ZTP is disabled and no minigraph, factory default configuration # is created do_config_initialization() { + # If minigraph.xml is available, prefer it over ZTP/factory default. + # This avoids ZTP triggering a config reload that removes management IP + # when the device has a valid minigraph but no config_db.json + # (e.g., during upgrade path tests). + if [ -r ${MINGRAPH_FILE} ]; then + echo "No config_db.json found but minigraph.xml is available, using minigraph..." + reload_minigraph + rm -f /tmp/pending_config_initialization + sonic-db-cli CONFIG_DB SET "CONFIG_DB_INITIALIZED" "1" + return 0 + fi + if ! ztp_is_enabled ; then echo "No configuration detected, generating factory default configuration..." generate_config factory ${CONFIG_DB_JSON} @@ -412,6 +447,18 @@ boot_config() do_config_migration fi + # During warm boot the existing configuration must be preserved. + # Never run config initialization or ZTP — doing so would generate + # a new config and trigger config reload, wiping management IP. + if [ x"${WARM_BOOT}" == x"true" ]; then + echo "Warm boot detected, skipping config initialization and ZTP." + # Mark config as initialized so subsequent boots don't re-trigger + # initialization unnecessarily (warm-reboot to new image scenario). + sonic-db-cli CONFIG_DB SET "CONFIG_DB_INITIALIZED" "1" + rm -f /tmp/pending_config_initialization + return 0 + fi + # For multi-npu platfrom we don't support config initialization. Assumption # is there should be existing minigraph or config_db from previous image # file system to trigger. pending_config_initialization will remain set @@ -424,11 +471,14 @@ boot_config() do_config_initialization fi - # If no startup configuration is found, create a configuration to be used + # If no startup configuration is found, create a configuration to be used. + # do_config_initialization() will prefer minigraph.xml if available, + # falling back to ZTP or factory default only when no minigraph exists. if [ ! -e ${CONFIG_DB_JSON} ]; then do_config_initialization - # force ZTP to restart - if ztp_is_enabled ; then + # force ZTP to restart (only relevant when ZTP was actually used, + # i.e., when minigraph.xml was not available) + if [ ! -e ${MINGRAPH_FILE} ] && ztp_is_enabled ; then ztp_status=$(ztp status -c) if [ "$ztp_status" = "5:SUCCESS" ] || \ [ "$ztp_status" = "6:FAILED" ]; then From 7e6eb64b10a46dff83d523630f121de4fd9c2e52 Mon Sep 17 00:00:00 2001 From: Volodymyr Samotiy Date: Fri, 27 Feb 2026 00:24:46 +0200 Subject: [PATCH 3/5] Integrate HW-MGMT 7.0050.3002 Changes (#25703) Signed-off-by: sw-r2d2-bot --- platform/mellanox/hw-management.mk | 2 +- platform/mellanox/hw-management/hw-mgmt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/mellanox/hw-management.mk b/platform/mellanox/hw-management.mk index 9458a0bf5f..be5ed7e82b 100644 --- a/platform/mellanox/hw-management.mk +++ b/platform/mellanox/hw-management.mk @@ -17,7 +17,7 @@ # # Mellanox HW Management -MLNX_HW_MANAGEMENT_VERSION = 7.0050.3001 +MLNX_HW_MANAGEMENT_VERSION = 7.0050.3002 export MLNX_HW_MANAGEMENT_VERSION diff --git a/platform/mellanox/hw-management/hw-mgmt b/platform/mellanox/hw-management/hw-mgmt index cad3563da0..bd26aeeca5 160000 --- a/platform/mellanox/hw-management/hw-mgmt +++ b/platform/mellanox/hw-management/hw-mgmt @@ -1 +1 @@ -Subproject commit cad3563da0ea695fc74098fe483a052175858248 +Subproject commit bd26aeeca59d26c12f2fcb05ea67cd2d80d1be2b From 168228b6c37e2795e36286386db9f044c39ad057 Mon Sep 17 00:00:00 2001 From: Volodymyr Samotiy Date: Fri, 27 Feb 2026 00:24:57 +0200 Subject: [PATCH 4/5] [202511] [Mellanox] Update FW/SDK to xx.2016.3412/4.8.3412 and SAI to SAIBuild2511.35.3400.5 (#25702) Signed-off-by: Volodymyr Samotiy --- platform/mellanox/fw.mk | 14 +++++++------- platform/mellanox/mlnx-sai.mk | 2 +- platform/mellanox/sdk.mk | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/platform/mellanox/fw.mk b/platform/mellanox/fw.mk index 58dcf0da8a..77bdf8bb83 100644 --- a/platform/mellanox/fw.mk +++ b/platform/mellanox/fw.mk @@ -21,38 +21,38 @@ MLNX_FW_BASE_PATH = $(MLNX_SDK_BASE_PATH) # Place an URL here to FW if you want to download FW instead MLNX_FW_BASE_URL = -SIMX_VERSION = 25.10-1153 +SIMX_VERSION = 26.1-1158 FW_FROM_URL = y -MLNX_FW_ASSETS_RELEASE_TAG = fw-2016.3404 +MLNX_FW_ASSETS_RELEASE_TAG = fw-2016.3412 MLNX_FW_ASSETS_URL = $(MLNX_ASSETS_GITHUB_URL)/releases/download/$(MLNX_FW_ASSETS_RELEASE_TAG) ifeq ($(MLNX_FW_BASE_URL), ) MLNX_FW_BASE_URL = $(MLNX_FW_ASSETS_URL) endif -MLNX_SPC_FW_VERSION = 13.2016.3404 +MLNX_SPC_FW_VERSION = 13.2016.3412 MLNX_SPC_FW_FILE = fw-SPC-rel-$(subst .,_,$(MLNX_SPC_FW_VERSION))-EVB.mfa $(MLNX_SPC_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC_FW_FILE) -MLNX_SPC2_FW_VERSION = 29.2016.3404 +MLNX_SPC2_FW_VERSION = 29.2016.3412 MLNX_SPC2_FW_FILE = fw-SPC2-rel-$(subst .,_,$(MLNX_SPC2_FW_VERSION))-EVB.mfa $(MLNX_SPC2_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC2_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC2_FW_FILE) -MLNX_SPC3_FW_VERSION = 30.2016.3404 +MLNX_SPC3_FW_VERSION = 30.2016.3412 MLNX_SPC3_FW_FILE = fw-SPC3-rel-$(subst .,_,$(MLNX_SPC3_FW_VERSION))-EVB.mfa $(MLNX_SPC3_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC3_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC3_FW_FILE) -MLNX_SPC4_FW_VERSION = 34.2016.3404 +MLNX_SPC4_FW_VERSION = 34.2016.3412 MLNX_SPC4_FW_FILE = fw-SPC4-rel-$(subst .,_,$(MLNX_SPC4_FW_VERSION))-EVB.mfa $(MLNX_SPC4_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC4_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC4_FW_FILE) -MLNX_SPC5_FW_VERSION = 37.2016.3404 +MLNX_SPC5_FW_VERSION = 37.2016.3412 MLNX_SPC5_FW_FILE = fw-SPC5-rel-$(subst .,_,$(MLNX_SPC5_FW_VERSION))-EVB.mfa $(MLNX_SPC5_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC5_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC5_FW_FILE) diff --git a/platform/mellanox/mlnx-sai.mk b/platform/mellanox/mlnx-sai.mk index b1bd87bf89..f3c2b06635 100644 --- a/platform/mellanox/mlnx-sai.mk +++ b/platform/mellanox/mlnx-sai.mk @@ -1,6 +1,6 @@ # Mellanox SAI -MLNX_SAI_VERSION = SAIBuild2511.35.3400.0 +MLNX_SAI_VERSION = SAIBuild2511.35.3400.5 MLNX_SAI_ASSETS_GITHUB_URL = https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins MLNX_SAI_ASSETS_RELEASE_TAG = sai-$(MLNX_SAI_VERSION)-$(BLDENV)-$(CONFIGURED_ARCH) MLNX_SAI_ASSETS_URL = $(MLNX_SAI_ASSETS_GITHUB_URL)/releases/download/$(MLNX_SAI_ASSETS_RELEASE_TAG) diff --git a/platform/mellanox/sdk.mk b/platform/mellanox/sdk.mk index 9c811d5fd2..66c08749ed 100644 --- a/platform/mellanox/sdk.mk +++ b/platform/mellanox/sdk.mk @@ -15,7 +15,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # -MLNX_SDK_VERSION = 4.8.3404 +MLNX_SDK_VERSION = 4.8.3412 MLNX_SDK_ISSU_VERSION = 101 MLNX_SDK_DRIVERS_GITHUB_URL = https://github.com/Mellanox/Spectrum-SDK-Drivers From 1b69741eaf077ed325982e642746dec6132fbe6e Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Fri, 27 Feb 2026 10:13:43 +0800 Subject: [PATCH 5/5] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#25595) #### Why I did it src/sonic-utilities ``` * ddc241ec - (HEAD -> 202511, origin/202511) [storm-control] Fixed show storm-control interface command display (#4302) (32 hours ago) [mssonicbld] * fbd3f90b - [fast-reboot][cosmetic] Fixed debug/error prints with the correct reboot type (#4286) (5 days ago) [Yair Raviv] * efdffa2a - Added counterpoll CLI support (#4291) (6 days ago) [mssonicbld] * 567ad5b3 - [Smartswitch] Prevent early exit of reboot status (#4287) (6 days ago) [mssonicbld] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index 0315da212b..ddc241ecb2 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 0315da212bc8b30bdd6a5ba82a65f952902073ea +Subproject commit ddc241ecb209d50a659da9a6827c899e7d184988