Target MAC Address Management#

Thor platform MAC addresses are stored in BR-BCT and can be programmed by passing a customer-data JSON file to the flashing tools. This page covers MAC address assignment for the supported Thor board variants in this build, including FSI EQOS and CCPLEX Guest OS interfaces.

Warning

Each board variant has its own MAC address layout, and each physical board has its own unique MAC address range. Do not copy customer-data JSON from one board to another board.

Read the Base MAC from MCU Inforom#

The Base MAC for CVM value is stored in the board MCU Inforom. Before creating the JSON file, read the board’s MAC address information from the sMCU console and use Base MAC for CVM for Tegra MAC assignment.

At the sMCU console prompt, run:

NvShell> inforom print

In the SYS object output, use the value shown in Base MAC for CVM:

SYS:
  Starting MAC Address: 3c:6d:66:11:df:7b
  Total Number of MAC Addresses: 6
  CVM Serial Number   : 1582124610013
  Base MAC for CVM    : 3c:6d:66:12:30:f0
  Total Number of MAC address for CVM: 0

Convert the MAC address to the JSON format by removing colons and prefixing the value with 0x. For example, 3c:6d:66:12:30:f0 becomes 0x3c6d661230f0.

Customer-Data JSON Rules#

Use the following rules when creating the customer-data JSON:

Field

Description

macInUseCount

Number of macIdN entries in the JSON file.

macIdN

MAC entry in the format macN <first-mac-address> <count>.

<count>

Number of MAC addresses reserved for that entry.

macId0

Slot 0. For Thor boards, this slot is used for FSI EQOS when FSI EQOS is active.

macId1

First CCPLEX Guest OS MAC address.

For Thor board variants, when FSI EQOS is active, use the Base MAC for CVM from the board Inforom as the first MAC address for FSI EQOS in macId0. The CCPLEX Guest OS MAC addresses start at Base MAC for CVM + 1 in macId1.

If FSI EQOS is unused on a side or Tegra, retain macId0 and use the dummy local MAC address 0x0200414500f9 with count 1. In this case, the CCPLEX Guest OS MAC addresses start at Base MAC for CVM in macId1.

The example counts in this page reserve the maximum configurable CCPLEX Guest OS MAC addresses for each shown board configuration. If fewer CCPLEX Guest OS interfaces are needed, use a smaller macId1 count while keeping each MAC entry unique and preserving the required macId0 assignment.

After you create the JSON file for your board, pass it through --customer-data during BSP image creation and again while flashing the board. For more information, see Flashing with the Customer-Data JSON.

P3960 MAC Address Allocation#

The following examples show P3960 customer-data allocations for supported board variants.

P3960 SKU-10, Single Thor#

P3960 SKU-10 uses a default 12-MAC range.

Entry

Assignment

macId0

FSI EQOS MAC. Use Base MAC for CVM with count 1.

macId1

First CCPLEX Guest OS MAC. Use Base MAC for CVM + 1 with count 11.

P3960 SKU-10 example:

{
  "customer-data-signed": {
    "boardSerial": "223145",
    "macInUseCount": 2,
    "macId0": "mac0 0x3c6d661230f0 1",
    "macId1": "mac1 0x3c6d661230f1 11"
  }
}

P4145 Maarva TA MAC Address Assignment#

For P4145 Maarva, read the MAC address information from MCU Inforom with the same sMCU console command:

NvShell> inforom print

The following P4145 Maarva example uses 4c:bb:47:ac:b7:87 as the Base MAC for CVM. The JSON examples in this section use the same base MAC address, converted to 0x4cbb47acb787.

Info: Executing cmd: inforom, argc: 1, args: print
INFOROM status: ae0ff800 Okay
OAT:
  Object type         : OAT
  Object version      : 1
  Object subversion   : 0
  Object size         : 64
  ROM size            : 0x200
  Object  1 Type      : SYS
  Object  1 Location  : 0x40
SYS:
  Object type         : SYS
  Object version      : 6
  Object subversion   : 0
  Object size         : 100
  System Build test date: 2025/01/01
  Product Part Number : 699-64145-0000-TS1
  BOM Major Rev       : A0
  System Serial number: 1584025617041
  System Release Level: 00
  SWID                : A2
  RWK                 : 0
  Starting MAC Address: 4c:bb:47:ac:b7:85
  Total Number of MAC Addresses: 8
  Base MAC for CVM    : 4c:bb:47:ac:b7:87
  Total Number of MAC address for CVM: 0
INFOROM end of data

For P4145 Maarva TA/TB customer-data files, retain macId0 on both sides. This is required even when FSI EQOS is not used on that side because MB2 expects the mac0 entry in slot 0. Use the dummy MAC address from the common rule for the side where FSI EQOS is unused.

Board revision and side

FSI EQOS allocation

macId0

macId1

A00, 4145 A side

FSI EQOS unused on this side.

Dummy local MAC 0x0200414500f9, count 1.

First CCPLEX Guest OS MAC is Base MAC for CVM, count 6.

A00, 4145 B side

FSI EQOS active on this side.

FSI EQOS MAC is Base MAC for CVM, count 1.

First CCPLEX Guest OS MAC is Base MAC for CVM + 1, count 4.

B00, 4145 A side

FSI EQOS moves to A side.

FSI EQOS MAC is Base MAC for CVM, count 1.

First CCPLEX Guest OS MAC is Base MAC for CVM + 1, count 6.

B00, 4145 B side

FSI EQOS unused on this side.

Dummy local MAC 0x0200414500f9, count 1.

First CCPLEX Guest OS MAC is Base MAC for CVM, count 4.

A00, 4145 A side:

{
  "customer-data-signed": {
    "boardSerial": "223145",
    "macInUseCount": 2,
    "macId0": "mac0 0x0200414500f9 1",
    "macId1": "mac1 0x4cbb47acb787 6"
  }
}

A00, 4145 B side:

{
  "customer-data-signed": {
    "boardSerial": "223145",
    "macInUseCount": 2,
    "macId0": "mac0 0x4cbb47acb787 1",
    "macId1": "mac1 0x4cbb47acb788 4"
  }
}

B00, 4145 A side:

{
  "customer-data-signed": {
    "boardSerial": "223145",
    "macInUseCount": 2,
    "macId0": "mac0 0x4cbb47acb787 1",
    "macId1": "mac1 0x4cbb47acb788 6"
  }
}

B00, 4145 B side:

{
  "customer-data-signed": {
    "boardSerial": "223145",
    "macInUseCount": 2,
    "macId0": "mac0 0x0200414500f9 1",
    "macId1": "mac1 0x4cbb47acb787 4"
  }
}

Do not omit macId0 on the side where FSI EQOS is unused. Use the dummy local MAC address only for that unused FSI EQOS slot.

Flashing with the Customer-Data JSON#

Save the selected JSON example as a customer-data file for the board variant and side that you are flashing.

For P4145 Maarva TA/TB, save the file as one of the following:

  • p4145-10-sw01-ta_customer_data.json for the 4145 A side.

  • p4145-10-sw01-tb_customer_data.json for the 4145 B side.

Follow the standard flashing procedure in Flashing. For Thor-specific bootburn options, see Flash Steps for Thor SOC.

When using the customer-data JSON from this page, add --customer-data <customer-data.json> to both commands:

  • The BSP image creation command.

  • The board flashing command.

For P3960 SKU-10, save the JSON file as p3960-sku10_customer_data.json. The following example shows the complete command form:

sudo python3 ./create_bsp_images.py -b p3960-10-sw03 -D \
  -P <bsp-output-dir> \
  --board_config <bsp-output-dir>/tools/flashtools/board_configs/p3960-10-sw03.json \
  --customer-data <path-to-json>/p3960-sku10_customer_data.json

For P4145 Maarva TA, use:

sudo python3 ./create_bsp_images.py -b p4145-10-sw01-ta -D \
  -P <bsp-output-dir> \
  --board_config <bsp-output-dir>/tools/flashtools/board_configs/p4145-10-sw01-ta.json \
  --customer-data <path-to-json>/p4145-10-sw01-ta_customer_data.json

sudo python3 ./flash_bsp_images.py -b p4145-10-sw01-ta -D \
  -P <bsp-output-dir> \
  --board_config <bsp-output-dir>/tools/flashtools/board_configs/p4145-10-sw01-ta.json \
  --customer-data <path-to-json>/p4145-10-sw01-ta_customer_data.json -R

For example, use --customer-data p4145-10-sw01-ta_customer_data.json when flashing P4145 Maarva TA, and use --customer-data p4145-10-sw01-tb_customer_data.json when flashing P4145 Maarva TB.

For P3960 boards, use --customer-data with the matching P3960 customer-data JSON file.

Verify MAC Entries After Boot#

Verify the flashed MAC addresses through the chosen-node entries populated from customer-data.

After flashing and booting the board on Linux, verify that the expected MAC entries are present under /proc/device-tree/chosen:

cd /proc/device-tree/chosen
ls nvidia,ether-mac*

Linux and QNX use the same underlying property names: nvidia,ether-mac*.

The number of nvidia,ether-macN entries should match the total number of MAC addresses reserved by the customer-data JSON. For example, a JSON file that reserves 12 total MAC addresses should show nvidia,ether-mac0 through nvidia,ether-mac11. A JSON file that reserves 23 total MAC addresses should show nvidia,ether-mac0 through nvidia,ether-mac22.

After boot, ifconfig should also show the assigned MAC addresses on the network interfaces that use the flashed MAC entries.

To print the values programmed for each entry, run:

for mac in /proc/device-tree/chosen/nvidia,ether-mac*; do
    printf "%s: " "$(basename "$mac")"
    tr -d '\0' < "$mac"
    printf "\n"
done

Troubleshoot Missing or Incorrect MAC Entries#

If MAC addresses are not flashed or are flashed incorrectly, the expected CCPLEX Guest OS MAC entries might not be visible after boot. Use Verify MAC Entries After Boot to check the flashed MAC entries.

Use the following checks to identify common MAC flashing issues:

Symptom

Possible cause

Corrective action

Expected nvidia,ether-macN entries are missing.

The correct customer-data JSON was not passed with --customer-data during BSP image creation or flashing.

Flash the board again with the correct customer-data JSON. Verify the macIdN count for the board configuration and reflash.

MAC values do not match the board’s expected range.

The JSON was copied from another board or used the wrong Base MAC for CVM value.

Read Base MAC for CVM from the board Inforom again, regenerate the customer-data JSON for that physical board, and reflash.

If the post-boot chosen-node entries from Verify MAC Entries After Boot do not match the customer-data JSON, treat the flash as incorrect and reflash with the corrected JSON.