diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/Nvidia-9009d3b400CCEA/context_config.json b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/Nvidia-9009d3b400CCEA/context_config.json new file mode 100644 index 00000000000..37e8eaa8900 --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/Nvidia-9009d3b400CCEA/context_config.json @@ -0,0 +1,21 @@ +{ + "CONTEXTS": [ + { + "guid" : 0, + "name" : "syncd0", + "dbAsic" : "ASIC_DB", + "dbCounters" : "COUNTERS_DB", + "dbFlex": "FLEX_COUNTER_DB", + "dbState" : "STATE_DB", + "zmq_enable": true, + "zmq_endpoint": "tcp://127.0.0.1:5555", + "zmq_ntf_endpoint": "tcp://127.0.0.1:5556", + "switches": [ + { + "index" : 0, + "hwinfo" : "" + } + ] + } + ] +} diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/Nvidia-9009d3b400CCEA/hwsku.json b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/Nvidia-9009d3b400CCEA/hwsku.json new file mode 100644 index 00000000000..99dffd2abee --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/Nvidia-9009d3b400CCEA/hwsku.json @@ -0,0 +1,10 @@ +{ + "interfaces": { + "Ethernet0": { + "default_brkout_mode": "1x200G" + }, + "Ethernet4": { + "default_brkout_mode": "1x200G" + } + } +} \ No newline at end of file diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/Nvidia-9009d3b400CCEA/port_config.ini b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/Nvidia-9009d3b400CCEA/port_config.ini new file mode 100644 index 00000000000..2a5e844a52c --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/Nvidia-9009d3b400CCEA/port_config.ini @@ -0,0 +1,20 @@ +## +## SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +## Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +## SPDX-License-Identifier: Apache-2.0 +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## +# name lanes alias index +Ethernet0 0,1,2,3 etp1 1 +Ethernet4 4,5,6,7 etp2 2 diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/Nvidia-9009d3b400CCEA/sai.profile b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/Nvidia-9009d3b400CCEA/sai.profile new file mode 100644 index 00000000000..1848fc08c4c --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/Nvidia-9009d3b400CCEA/sai.profile @@ -0,0 +1,5 @@ +SAI_DUMP_STORE_PATH=/var/log/bluefield/sdk-dumps +SAI_DUMP_STORE_AMOUNT=10 +DASH_ACL_DEFAULT_RULE_ACTION=permit +PORT_LAYOUT=2x200G +HAIRPIN=false diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/default_sku b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/default_sku new file mode 100644 index 00000000000..9f6b6cfbddf --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/default_sku @@ -0,0 +1 @@ +Nvidia-9009d3b400CCEA appliance diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/installer.conf b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/installer.conf new file mode 100644 index 00000000000..577fb833835 --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/installer.conf @@ -0,0 +1,2 @@ +GRUB_CMDLINE_LINUX="console=ttyAMA1 console=hvc0 console=ttyAMA0 earlycon=pl011,0x13010000 quiet" +ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="isolcpus=2-6 nohz_full=2-6 rcu_nocbs=2-6" diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/pcie.yaml b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/pcie.yaml new file mode 100644 index 00000000000..9dea7d67000 --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/pcie.yaml @@ -0,0 +1,53 @@ +- bus: '00' + dev: '00' + fn: '0' + id: a2db + name: 'PCI bridge: Mellanox Technologies MT43244 BlueField-3 SoC Crypto disabled + (rev 01)' +- bus: '01' + dev: '00' + fn: '0' + id: 197b + name: 'PCI bridge: Mellanox Technologies MT43244 Family [BlueField-3 SoC PCIe Bridge] + (rev 01)' +- bus: '02' + dev: '00' + fn: '0' + id: 197b + name: 'PCI bridge: Mellanox Technologies MT43244 Family [BlueField-3 SoC PCIe Bridge] + (rev 01)' +- bus: '02' + dev: '03' + fn: '0' + id: 197b + name: 'PCI bridge: Mellanox Technologies MT43244 Family [BlueField-3 SoC PCIe Bridge] + (rev 01)' +- bus: '03' + dev: '00' + fn: '0' + id: a2dc + name: 'Ethernet controller: Mellanox Technologies MT43244 BlueField-3 integrated + ConnectX-7 network controller (rev 01)' +- bus: '03' + dev: '00' + fn: '1' + id: a2dc + name: 'Ethernet controller: Mellanox Technologies MT43244 BlueField-3 integrated + ConnectX-7 network controller (rev 01)' +- bus: '04' + dev: '00' + fn: '0' + id: 197b + name: 'PCI bridge: Mellanox Technologies MT43244 Family [BlueField-3 SoC PCIe Bridge] + (rev 01)' +- bus: '05' + dev: '00' + fn: '0' + id: 197b + name: 'PCI bridge: Mellanox Technologies MT43244 Family [BlueField-3 SoC PCIe Bridge] + (rev 01)' +- bus: '06' + dev: '00' + fn: '0' + id: '0001' + name: 'Non-Volatile memory controller: KIOXIA Corporation Device 0001' diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/platform.json b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/platform.json new file mode 100644 index 00000000000..4bffbfc26d2 --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/platform.json @@ -0,0 +1,38 @@ +{ + "chassis": { + "name": "Nvidia-9009d3b400CCEA", + "components": [], + "fans": [], + "fan_drawers": [], + "psus": [], + "thermals": [], + "sfps": [ + { + "name": "Ethernet0" + }, + { + "name": "Ethernet4" + } + ] + }, + "interfaces": { + "Ethernet0": { + "index": "1,1,1,1", + "lanes": "0,1,2,3", + "breakout_modes": { + "1x200G": ["etp1"] + } + }, + "Ethernet4": { + "index": "2,2,2,2", + "lanes": "4,5,6,7", + "breakout_modes": { + "1x200G": ["etp2"] + } + } + }, + "APPLIANCE_DPU": "", + "SKIP_FW_UPDATE": "", + "SELF_REBOOT": "", + "HUGEPAGES": "4096" +} diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/platform_asic b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/platform_asic new file mode 100644 index 00000000000..ce453ec804a --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/platform_asic @@ -0,0 +1 @@ +nvidia-bluefield diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/pmon_daemon_control.json b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/pmon_daemon_control.json new file mode 100644 index 00000000000..86f807221ef --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/pmon_daemon_control.json @@ -0,0 +1,7 @@ +{ + "skip_ledd": true, + "skip_psud": true, + "skip_fancontrol": true, + "skip_chassisd": true, + "skip_ycabled": true +} diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/system_health_monitoring_config.json b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/system_health_monitoring_config.json new file mode 100644 index 00000000000..2f6ac924cd4 --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/system_health_monitoring_config.json @@ -0,0 +1,6 @@ +{ + "services_to_ignore": [], + "devices_to_ignore": ["psu", "fan"], + "user_defined_checkers": ["python3 -m sonic_platform.throttling_checks.cpu_check", "python3 -m sonic_platform.throttling_checks.ddr_check"], + "polling_interval": 60 +} diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b600cvaa/Nvidia-9009d3b600CVAA/context_config.json b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b600cvaa/Nvidia-9009d3b600CVAA/context_config.json new file mode 100644 index 00000000000..37e8eaa8900 --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b600cvaa/Nvidia-9009d3b600CVAA/context_config.json @@ -0,0 +1,21 @@ +{ + "CONTEXTS": [ + { + "guid" : 0, + "name" : "syncd0", + "dbAsic" : "ASIC_DB", + "dbCounters" : "COUNTERS_DB", + "dbFlex": "FLEX_COUNTER_DB", + "dbState" : "STATE_DB", + "zmq_enable": true, + "zmq_endpoint": "tcp://127.0.0.1:5555", + "zmq_ntf_endpoint": "tcp://127.0.0.1:5556", + "switches": [ + { + "index" : 0, + "hwinfo" : "" + } + ] + } + ] +} diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b600cvaa/platform.json b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b600cvaa/platform.json index 4ecd49fcb45..d7149451c77 100644 --- a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b600cvaa/platform.json +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b600cvaa/platform.json @@ -32,5 +32,8 @@ "1x200G": ["etp2"] } } - } + }, + "APPLIANCE_DPU": "", + "SELF_REBOOT": "", + "SKIP_FW_UPDATE": "" } diff --git a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b600svaa/platform.json b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b600svaa/platform.json index 814462f0733..f7df1078ef9 100644 --- a/device/nvidia-bluefield/arm64-nvda_bf-9009d3b600svaa/platform.json +++ b/device/nvidia-bluefield/arm64-nvda_bf-9009d3b600svaa/platform.json @@ -32,5 +32,7 @@ "1x200G": ["etp2"] } } - } + }, + "SKIP_FW_UPDATE": "", + "SELF_REBOOT": "" } diff --git a/platform/mellanox/asic_detect/asic_detect.sh b/platform/mellanox/asic_detect/asic_detect.sh index dd2934911ea..4903d9ea580 100644 --- a/platform/mellanox/asic_detect/asic_detect.sh +++ b/platform/mellanox/asic_detect/asic_detect.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # # SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES -# Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -64,7 +64,7 @@ if [[ -n "$lspci_output" ]]; then for key in "${DEVICE_ORDER[@]}"; do if echo "$lspci_output" | grep "$VENDOR_ID:$key" &>/dev/null; then DEVICE_TYPE="${DEVICE_DICT[$key]}" - DEVICE_PCI_ID=$(echo "$lspci_output" | grep "$VENDOR_ID:$key" | awk '{print $1}') + DEVICE_PCI_ID=$(echo "$lspci_output" | grep "$VENDOR_ID:$key" | awk '{print $1}' | head -n 1) RC=$SUCCESS_CODE break fi diff --git a/platform/nvidia-bluefield/bluefield-platform-modules/udev/82-net-setup-link.rules b/platform/nvidia-bluefield/bluefield-platform-modules/udev/82-net-setup-link.rules index e655ed85f3a..4bc9d2c556c 100644 --- a/platform/nvidia-bluefield/bluefield-platform-modules/udev/82-net-setup-link.rules +++ b/platform/nvidia-bluefield/bluefield-platform-modules/udev/82-net-setup-link.rules @@ -1,2 +1,3 @@ SUBSYSTEM=="net", ACTION=="add", DEVPATH=="/devices/pci0000:00/0000:00:00.0/0000:01:00.0/0000:02:00.0/0000:03:00.0/net/e*", ATTR{phys_port_name}=="p0", NAME="Ethernet0" +SUBSYSTEM=="net", ACTION=="add", DEVPATH=="/devices/pci0000:00/0000:00:00.0/0000:01:00.0/0000:02:00.0/0000:03:00.1/net/e*", ATTR{phys_port_name}=="p1", NAME="Ethernet4" SUBSYSTEM=="net", ACTION=="add", DEVPATH=="/devices/pci0000:00/0000:00:00.0/0000:01:00.0/0000:02:00.0/0000:03:00.0/net/e*", ATTR{phys_port_name}=="c1pf0", NAME="eth0-midplane", RUN+="/usr/bin/bfnet.sh configure-midplane-iface" diff --git a/platform/nvidia-bluefield/docker-syncd-bluefield/Dockerfile.j2 b/platform/nvidia-bluefield/docker-syncd-bluefield/Dockerfile.j2 index 912aa1e3a4b..18e82023ce5 100644 --- a/platform/nvidia-bluefield/docker-syncd-bluefield/Dockerfile.j2 +++ b/platform/nvidia-bluefield/docker-syncd-bluefield/Dockerfile.j2 @@ -56,6 +56,7 @@ RUN apt-get clean -y && \ rm -rf /debs COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] +COPY ["files/syncd_init_bf_platform.sh", "/usr/bin/"] COPY ["critical_processes", "/etc/supervisor/"] RUN mkdir -p /etc/mlnx/ diff --git a/platform/nvidia-bluefield/files/syncd_init_bf_platform.sh b/platform/nvidia-bluefield/files/syncd_init_bf_platform.sh new file mode 100755 index 00000000000..a85f6583bbd --- /dev/null +++ b/platform/nvidia-bluefield/files/syncd_init_bf_platform.sh @@ -0,0 +1,71 @@ +# +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +configure_syncd_init_common() { + # Read MAC addresses + base_mac="$(echo $SYNCD_VARS | jq -r '.mac')" + hwsku=$(sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["hwsku"]') + platform=$(sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["platform"]') + single_port=$([[ $hwsku == *"-com-dpu" ]] && echo true || echo false) + eth0_mac=$(cat /sys/class/net/Ethernet0/address) + + cp $HWSKU_DIR/sai.profile /tmp/sai-temp.profile + + echo >> /tmp/sai-temp.profile + + DEVICE_TYPE=$(/usr/bin/asic_detect/asic_detect.sh) + if [[ $? -eq 0 ]]; then + ASIC_PROFILE_FILE="sai-${DEVICE_TYPE}.profile" + ASIC_PROFILE_PATH="/etc/mlnx/${ASIC_PROFILE_FILE}" + if [ -f "$ASIC_PROFILE_PATH" ]; then + cat "$ASIC_PROFILE_PATH" >> /tmp/sai-temp.profile + echo >> /tmp/sai-temp.profile + fi + else + echo "Warning: ASIC is not detected..." + fi + + # keep only the first occurence of each prefix with '=' sign, and remove the others. + awk -F= '!seen[$1]++' /tmp/sai-temp.profile > /tmp/sai.profile + rm -f /tmp/sai-temp.profile + + # Update sai.profile with MAC_ADDRESS + echo "DEVICE_MAC_ADDRESS=$base_mac" >> /tmp/sai.profile + echo "PORT_1_MAC_ADDRESS=$eth0_mac" >> /tmp/sai.profile + + CMD_ARGS+=" -l -p /tmp/sai.profile -w 180000000" + + SDK_DUMP_PATH=$(cat /tmp/sai.profile | grep "SAI_DUMP_STORE_PATH" | cut -d = -f2) + if [ ! -d "$SDK_DUMP_PATH" ]; then + mkdir -p "$SDK_DUMP_PATH" + fi + + platform_json_path="/usr/share/sonic/platform/platform.json" + + hugepages=$(jq -r '.HUGEPAGES' $platform_json_path) + if [ -z "$hugepages" ]; then + hugepages=9216 + fi + + echo $hugepages > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages + + mkdir -p /mnt/huge + mount -t hugetlbfs pagesize=1GB /mnt/huge + + ethtool -A Ethernet0 rx off tx off +} diff --git a/platform/nvidia-bluefield/installer/install.sh.j2 b/platform/nvidia-bluefield/installer/install.sh.j2 index faf8c5755d8..3392b9e5970 100755 --- a/platform/nvidia-bluefield/installer/install.sh.j2 +++ b/platform/nvidia-bluefield/installer/install.sh.j2 @@ -16,7 +16,6 @@ # limitations under the License. # #!/bin/bash - # This script will run after being booted into a installer kernel # This will setup the disk, grub etc for the actual SONiC to boot from @@ -118,7 +117,6 @@ else fi # Flags that can be overwritten by the bf.cfg -declare -r SKIP_FIRMWARE_UPGRADE="${SKIP_FIRMWARE_UPGRADE:-false}" declare -r FORCE_FW_CONFIG_RESET="${FORCE_FW_CONFIG_RESET:-false}" ex() { @@ -241,12 +239,41 @@ chmod a+r /mnt/machine.conf sync -if [[ $SKIP_FIRMWARE_UPGRADE != "true" ]]; then - sonic_fs_path="/mnt/$image_dir/fs.squashfs" - sonic_fs_mountpoint="/tmp/$image_dir-fs" +sonic_fs_path="/mnt/$image_dir/fs.squashfs" +sonic_fs_mountpoint="/tmp/$image_dir-fs" +ex mkdir -p $sonic_fs_mountpoint +ex mount -t squashfs $sonic_fs_path $sonic_fs_mountpoint + + +# Check if platform.json exists and contains SKIP_FW_UPDATE key +platform_json_path="$sonic_fs_mountpoint/usr/share/sonic/device/$platform/platform.json" +skip_fw=false +reboot_is_needed=false + +if [[ -f "$platform_json_path" ]]; then + log "Checking for SKIP_FW_UPDATE key in $platform_json_path" + # Check if SKIP_FW_UPDATE key exists in platform.json (regardless of value) + if grep -q '"SKIP_FW_UPDATE"' "$platform_json_path"; then + skip_fw=true + log "SKIP_FW_UPDATE key found in platform.json - skipping firmware upgrade" + else + log "SKIP_FW_UPDATE key not found in platform.json - firmware upgrade will proceed" + fi + + # Check if SELF_REBOOT key exists in platform.json (regardless of value) + if grep -q '"SELF_REBOOT"' "$platform_json_path"; then + reboot_is_needed=true + log "SELF_REBOOT key found in platform.json" + else + log "SELF_REBOOT key not found in platform.json" + fi +else + log "Warning: platform.json not found at $platform_json_path" +fi - ex mkdir -p $sonic_fs_mountpoint - ex mount -t squashfs $sonic_fs_path $sonic_fs_mountpoint +declare -r SKIP_FIRMWARE_UPGRADE="${SKIP_FIRMWARE_UPGRADE:-$skip_fw}" +declare -r SELF_REBOOT="${SELF_REBOOT:-$reboot_is_needed}" +log "SKIP_FW_UPDATE is set to $SKIP_FIRMWARE_UPGRADE" # Mount shared memory needed for FW manager ex mkdir -m 1777 /dev/shm @@ -280,6 +307,8 @@ if [[ $SKIP_FIRMWARE_UPGRADE != "true" ]]; then ex umount /dev/shm fi +ex umount $sonic_fs_mountpoint + if function_exists bfb_post_sonic_install; then log "Running bfb_post_sonic_install from bf.cfg" bfb_post_sonic_install @@ -323,9 +352,9 @@ grub_cfg=$(mktemp) # Modify GRUB_CMDLINE_LINUX from bf.cfg file if required if [[ $module == "BF3" ]]; then - DEFAULT_GRUB_CMDLINE_LINUX=$BF3_GRUB_CFG + DEFAULT_GRUB_CMDLINE_LINUX:=$BF3_GRUB_CFG else - DEFAULT_GRUB_CMDLINE_LINUX=$BF2_GRUB_CFG + DEFAULT_GRUB_CMDLINE_LINUX:=$BF2_GRUB_CFG fi GRUB_CMDLINE_LINUX=${GRUB_CMDLINE_LINUX:-"$DEFAULT_GRUB_CMDLINE_LINUX"} @@ -457,7 +486,12 @@ fi rshim_log "Installation finished" -rshim_log "Waiting for reset from the host..." -while true; do - sleep 1 -done + +if [[ $SELF_REBOOT != "true" ]]; then + rshim_log "Waiting for reset from the host..." + while true; do + sleep 1 + done +fi +rshim_log "Rebooting..." +reboot -f diff --git a/platform/nvidia-bluefield/platform-api/sonic_platform/chassis.py b/platform/nvidia-bluefield/platform-api/sonic_platform/chassis.py index b88dca5259f..8ddd8641fcb 100644 --- a/platform/nvidia-bluefield/platform-api/sonic_platform/chassis.py +++ b/platform/nvidia-bluefield/platform-api/sonic_platform/chassis.py @@ -1,6 +1,7 @@ # -# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. -# Apache-2.0 +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -315,7 +316,7 @@ def is_smartswitch(self): Returns: Returns:True for SmartSwitch and False for other platforms """ - return True + return self.device_data.is_smartswitch() def is_dpu(self): """ diff --git a/platform/nvidia-bluefield/platform-api/sonic_platform/device_data.py b/platform/nvidia-bluefield/platform-api/sonic_platform/device_data.py index 5c62ec51ba1..78b545c0f7b 100644 --- a/platform/nvidia-bluefield/platform-api/sonic_platform/device_data.py +++ b/platform/nvidia-bluefield/platform-api/sonic_platform/device_data.py @@ -1,6 +1,7 @@ # -# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. -# Apache-2.0 +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -41,6 +42,7 @@ def __init__(self): raise RuntimeError("{} file does not exists".format(platform_json)) platform_data = json.loads(open(platform_json).read()) + self._platform_data = platform_data self._chassis = platform_data.get('chassis') if not self._chassis: raise RuntimeError("Chassis data is not found in {} file".format(device_info.PLATFORM_JSON_FILE)) @@ -51,6 +53,10 @@ def __init__(self): def get_platform_name(self): return self._chassis['name'] + + def is_smartswitch(self): + # Default + return False if 'APPLIANCE_DPU' in self._platform_data else True def get_fan_drawer_count(self): return len(self._chassis['fan_drawers']) diff --git a/platform/nvidia-bluefield/recipes/docker-syncd-bluefield.mk b/platform/nvidia-bluefield/recipes/docker-syncd-bluefield.mk index 2061678ea8b..59738bb24e9 100644 --- a/platform/nvidia-bluefield/recipes/docker-syncd-bluefield.mk +++ b/platform/nvidia-bluefield/recipes/docker-syncd-bluefield.mk @@ -1,6 +1,7 @@ # -# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. -# Apache-2.0 +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -31,6 +32,8 @@ endif $(DOCKER_SYNCD_BASE)_VERSION = 1.0.0 $(DOCKER_SYNCD_BASE)_PACKAGE_NAME = syncd +$(DOCKER_SYNCD_BASE)_FILES += $(INIT_BF_PLATFORM_SH) + $(DOCKER_SYNCD_BASE)_RUN_OPT += -v /var/log/bluefield/sdk-dumps:/var/log/bluefield/sdk-dumps $(DOCKER_SYNCD_BASE)_RUN_OPT += -v /var/dump/flows/:/var/dump/flows/ diff --git a/platform/nvidia-bluefield/rules.mk b/platform/nvidia-bluefield/rules.mk index 23b0fab5b22..4576af63b5a 100644 --- a/platform/nvidia-bluefield/rules.mk +++ b/platform/nvidia-bluefield/rules.mk @@ -31,6 +31,11 @@ include $(PLATFORM_PATH)/$(RECIPE_DIR)/docker-syncd-bluefield.mk include $(PLATFORM_PATH)/$(RECIPE_DIR)/installer-image.mk include $(PLATFORM_PATH)/$(RECIPE_DIR)/component-versions.mk +INIT_BF_PLATFORM_SH = syncd_init_bf_platform.sh +$(INIT_BF_PLATFORM_SH)_PATH = $(PLATFORM_PATH)/files/ +SONIC_COPY_FILES += $(INIT_BF_PLATFORM_SH) + + # Inject DPU sai into syncd $(SYNCD)_DEPENDS += $(DPU_SAI) $(SYNCD)_UNINSTALLS += $(DPU_SAI)