Skip to content

[Nvidia-bluefield] Support for Standalone DPU in nvidia bluefield platform#56

Open
gpunathilell wants to merge 2 commits into
masterfrom
BF3_POC
Open

[Nvidia-bluefield] Support for Standalone DPU in nvidia bluefield platform#56
gpunathilell wants to merge 2 commits into
masterfrom
BF3_POC

Conversation

@gpunathilell

Copy link
Copy Markdown
Owner

Why I did it

Support for new DPU platform and for the Standalone DPU "Appliance" Topology
Changes introduced:
Platform independent changes:

  • dockers/docker-database/docker-database-init.sh Support for Appliance DPU, do not export REMOTE_DB_PORT and REMOTE_DB_IP in case of appliance DPU, so that database is initialized with local DPU_APPL_DB and DPU_STATE_DB in case of appliance topology
  • dockers/docker-orchagent/orchagent.sh - Allow zmq initialization in orchagent for Appliance subtype
  • dockers/docker-sonic-gnmi/gnmi-native.sh - Allow zmq port initialization in the gnmi server for Appliance subtype
  • src/sonic-config-engine/config_samples.py - Add support for appliance topology and generate basic default config during first boot
  • src/sonic-yang-models/yang-models/sonic-device_metadata.yang - Yang validation update for appliance topology
  • src/systemd-sonic-generator/systemd-sonic-generator.cpp - Differentiate between APPLIANCE_DPU and SMARTSWITCH_DPU during systemd service generation, this is done by checking for APPLIANCE_DPU key in platform.json
    ---------Platform Specific changes-------------------
  • platform/nvidia-bluefield/installer/install.sh.j2 and platform/nvidia-bluefield/installer/create_sonic_image Support in bfb image generation for Appliance DPU (Generate the right grub configuration for CPU usage for NASA in case of 8 core vs 16 core device and execute reboot from the DPU in case of standalone DPU instead of waiting for host reboot)
  • platform/nvidia-bluefield/bluefield-platform-modules/udev/82-net-setup-link.rules Restore creation of 2 dataplane ports (Although at this point only one port is supported in NASA)
  • platform/nvidia-bluefield/platform-api/sonic_platform/chassis.py and platform/nvidia-bluefield/platform-api/sonic_platform/device_data.py - Return False for is_smartswitch check, used in thermalctld to push data to smartswitch (Not needed for appliance)
  • device/nvidia-bluefield/arm64-nvda_bf-9009d3b400ccea/Nvidia-9009d3b400CCEA - New DPU platform for 8-core Bluefield 3 Device - Nvidia-9009d3b400CCEA Including all Platform specific files and port configuration
  • device/nvidia-bluefield/arm64-nvda_bf-9009d3b600cvaa/platform.json - Add APPLIANCE_DPU key to detect whether platform is an appliance DPU or Smartswitch DPU
Work item tracking
  • Microsoft ADO (number only):

How I did it

Updated changes as described above

How to verify it

Test with manual deployment of image generated after build on standalone DPU device to test the SONiC image

Which release branch to backport (provide reason below if selected)

  • 202205
  • 202211
  • 202305
  • 202311
  • 202405
  • 202411
  • 202505

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)

{
"interfaces": {
"Ethernet0": {
"default_brkout_mode": "1x100G"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't it be 1x200G?

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

SAI_DUMP_STORE_PATH=/var/log/bluefield/sdk-dumps
SAI_DUMP_STORE_AMOUNT=10
DASH_ACL_DEFAULT_RULE_ACTION=permit
PORT_LAYOUT=2x100G

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2x200G?

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

"index": "1,1,1,1",
"lanes": "0,1,2,3",
"breakout_modes": {
"1x100G": ["etp1"]

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1x200G?

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

midplane_ip=$( ip -4 -o addr show eth0-midplane | awk '{print $4}' | cut -d'/' -f1 )
if [[ $midplane_ip != "" ]]
then
if [[ $IS_APPLIANCE_DPU == "false" ]]; then

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be in separate PR

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Split into separate PR

Comment thread dockers/docker-orchagent/orchagent.sh Outdated
# Enable ZMQ
LOCALHOST_SUBTYPE=`sonic-db-cli CONFIG_DB hget "DEVICE_METADATA|localhost" "subtype"`
if [[ x"${LOCALHOST_SUBTYPE}" == x"SmartSwitch" ]]; then
if [[ x"${LOCALHOST_SUBTYPE}" == x"SmartSwitch" || x"${LOCALHOST_SUBTYPE}" == x"Appliance" ]]; then

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please put in separate PR all related to the vendor independent implementation

@@ -0,0 +1,74 @@
#!/bin/bash
#
# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2025

platform=$(sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["platform"]')
single_port=$([[ $hwsku == *"-com-dpu" ]] && echo true || echo false)
# Read MAC addresses
base_mac="$(echo $SYNCD_VARS | jq -r '.mac')"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is duplication. Please remove

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


if [[ $platform == "arm64-nvda_bf-9009d3b400ccea" ]]; then
# 8 cores DPU, reduce hugepages to 4096
echo 4096 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's have humber of huge pages defined in the device data directory.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add new key/value pair to platform.json

declare -r FORCE_FW_CONFIG_RESET="${FORCE_FW_CONFIG_RESET:-false}"

# List of platforms that should skip firmware upgrade
PLATFORMS_SKIP_FW_UPGRADE=(
"9009d3b600"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's define new flag in platform.json

@@ -32,5 +32,6 @@
"1x200G": ["etp2"]
}
}
}
},
"SKIP_FW_UPDATE": ""

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should be the same as arm64-nvda_bf-9009d3b600cvaa

@@ -46,6 +46,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}' | head -n 1)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where is this variable used?

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It wasnt clear because master wasnt up to date to RC, please check now, variable is used

declare -r FORCE_FW_CONFIG_RESET="${FORCE_FW_CONFIG_RESET:-false}"


Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove redundant lines

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

@oleksandrivantsiv

Copy link
Copy Markdown
Collaborator

Please update the header date in all modified files

sleep 1
done

if [[ $SELF_REBOOT == "false" ]]; then

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SELF_REBOOT != "true", this will be more "bash" like way to handle

Signed-off-by: gpunathilell <gpunathilell@nvidia.com>
gpunathilell pushed a commit that referenced this pull request Feb 26, 2026
…tically (sonic-net#25545)

#### Why I did it
src/sonic-dash-api
```
* 459cad6 - (HEAD -> master, origin/master, origin/HEAD) Add two extra HA states (#59) (3 hours ago) [Changrong Wu]
* b3dfda7 - Add list of trusted VNIs (#56) (29 hours ago) [Lawrence Lee]
```
#### How I did it
#### How to verify it
#### Description for the changelog
@dgsudharsan
dgsudharsan removed their request for review April 1, 2026 03:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants