                        ===========
                        R E A D M E
                        ===========

                Broadcom NVRAM Management Utility

               Copyright (c) 2002-2023 Broadcom Ltd.
                       All rights reserved.
                          Jan 6th, 2023

Introduction
~~~~~~~~~~~~
This software component is a user-mode console application for the purposes of
managing the contents of the non-volatile memory (e.g. Flash memory) and to
query and configures the adapter specific parameters used by Broadcom
NetXtreme-C/E series network controllers.

The supported operations include:

- Getting a list (directory) of items contained in NVM or package files
- Viewing details about the items contained in NVM or package files
- Installing firmware components in NVM (from package files)
- Verifying the validity and authenticity of NVM items or package files
- Configure and Queries the adapter specific parameters.

Installation of bnxtnvm
~~~~~~~~~~~~~~~~~~~~~~~~
bnxtnvm executable is delivered for Linux, FreeBSD, VMware ESXi and Microsoft Windows.
This can be invoked from command line directly by the user. In Linux along with
executable bnxtnvm rpm is also provided for convenience. Install the rpm using
standard rpm installation command.
 rpm -ivh bnxtnvm-<version>-Linux.rpm

if the Linux distribution is old user might see the installation failure, in such
situation use following command.

 rpm --nodeps -ivh bnxtnvm-<version>-Linux.rpm

In VMWare the user need to use the below command to install the bnxtnvm VIB package.

 esxcli software vib install -v <VIB_PACKAGE> --no-sig-check

Dependencies
~~~~~~~~~~~~
An operational device driver for the NetXtreme-C/E controllers installed
in the target system is required for this application to function.

Latest driver versions of Linux BNXT Ethernet driver (bnxt_en),
VMware ESXi VMKAPI Ethernet driver (bnxtnet), FreeBSD Ethernet driver
(if_bnxt) and Microsoft Windows NDIS driver (bnxtnd.sys) are recommended.
ChiMP firmware v20.1.9 or later is required for this program to function.

For windows, nvm_event_log.dll which is released along with bnxtnvm is
needed for logging into Windows Event Viewer.

On Windows PE, the optional "WinPE-WMI" component must be installed for this
program to interface with the NDIS driver, otherwise "DEVICE DRIVER INTERFACE
FAILURE" errors will result.
See https://technet.microsoft.com/en-us/library/hh824926.aspx for detailed
instructions on how to create WinPE images which include WMI support.


Security Considerations
~~~~~~~~~~~~~~~~~~~~~~~
Root / administrator access is required to access the driver interfaces
utilized to query or modify the NVM contents.

On Linux-based operating systems, root access can be achieved by logging in as
the 'root' user or temporarily obtaining root/superuser permissions using the
'su' or 'sudo' commands.

1) In Linux OS, When secure boot is enabled and inbox driver is loaded, Adapter
configuration/query commands doesn't work. This is because the OS security feature
is enabled.

2) In Linux OS, When kernel configuration parameter CONFIG_IO_STRICT_DEVMEM=y is
enabled and inbox driver is loaded, Adapter configuration/query commands doesn't
work. This is because from user space the tools cannot map the BAR to access the
hardware. Work around for this issue is to unbind the L2 driver for one of the PF's
and run the bnxtnvm commands with the below syntax.

bnxtnvm -dev=<PCI BDF> <command>


bnxtnvm Logging
---------------
bnxtnvm log enables all the supported log levels by default. To configure the different
log levels, modify the parameter BNXT_NVM_LOG_LEVEL in the bnxtnvm.conf file.
This configuration file will be created under /etc folder in Linux and VMWare
operating systems. But in case of windows bnxtnvm.conf file will created at the
current working directory where bnxtnvm executable is running.

The Supported values for BNXT_NVM_LOG_LEVEL parameter are
0 - Disabled
1 - Error
2 - Debug
3 - Error | Debug
4 - Information
5 - Error | Information
6 - Debug | Information
7 - Error | Debug | Information

Signed Items
------------
Executable items, stored in package files and NVM, are digitally-signed with a
2048-bit-RSA-encrypted SHA-256 hash. Only Broadcom engineers have the means to
sign BNXT NVM items. These signatures are intended to protect the executable
NVM contents (software, firmware, and microcode) against malicious corruption.

The following items are signed for authentication purposes:
    1. Embedded firmware (in "APE BIN" format):
        a. Boot processor (ChiMP) firmware
        b. Management processor (APE) firmware
        c. Network control processor (Kong) firmware
        d. RoCE processor (Bono) firmware
    2. Embedded microcode/firmware (with a BNXT "trailer"):
        a. PHY microcode
        b. External PHY firmware
        c. PCIe microcode
        d. AVS (Adaptive Voltage Scaling) firmware
    3. Pre-boot software (with a BNXT "trailer"):
        a. Multiple Boot Agent (MBA), including UEFI driver and PXE
        b. Comprehensive Configuration Management (CCM)
        c. iSCSI Boot Software Initiator (iSCSIboot)

These signatures, as well as other protections against accidental corruption,
may be verified at any time using the bnxtnvm "verify" command. Signed items
within package files are authenticated by bnxtnvm before a package file will be
used for installation or upgrading purposes; package files failing verification
will not be installed. ChiMP firmware, which provides host access to the
controller's NVM, also validates the digital signatures of executable items
written to the NVM and will not activate executable items which fail signature validation.


Device Selection
~~~~~~~~~~~~~~~~
By default (when the '-dev' option is not used), the bnxtnvm utility will
discover all of the supported network controllers in the system and invoke the
specified commands/options against each controller in succession.

Alternatively, the user can pass the device name of a single supported
controller to be operated on to the bnxtnvm utility using the '-dev=<name>'
command-line option.

To display a list of bnxtnvm-supported controller devices in the system, use
Note: 'listdev' command displays only the first physical port associated with
each device/adapter will be listed.

On Linux-based operating systems, you can query for a list of all network
interface names using the 'ip addr' command.

A device may also be selected by it's permanent MAC address in either form:
"XX-XX-XX-XX-XX-XX-XX" or "XX:XX:XX:XX:XX:XX". For example:

    $ bnxtnvm pkgver -dev=00-0a-f7-83-7f-50

    $ bnxtnvm pkgver -dev=00:0a:f7:83:7f:50

On Windows-based operating systems, a device may also be selected by either
its Friendly Name or its Service Name (a GUID enclosed in curly braces).


Command-line Arguments
~~~~~~~~~~~~~~~~~~~~~~
To get a current list of supported command-line arguments (basic commands and
options) and the usage syntax supported by the bnxtnvm utility, use the
bnxtnvm '-h' option. Required arguments are displayed in angled-brackets while optional
arguments are displayed in square-brackets:

$ bnxtnvm -h

NAME
        bnxtnvm

DESCRIPTION
        Broadcom NetXtreme-C/E/S firmware update and configuration utility

SYNOPSIS
         bnxtnvm [OPTIONS] <COMMAND> [Params]

OPTIONS
                -h                       : Display help message
                -v|V                     : Display the output with more information
                -dev=<device>            : Specify the physical device name
                -online                  : Fetch FW image online from Broadcom server and perform upgrade
                -recovery                : Recovers the adapter and updates the firmware package file
                -type=<type>             : Specify item type by name or number (?=list)
                -savemac                 : Save MAC Address of all PF's of the device
                -y|--yes                 : Specify this option to answer 'yes' in prompt
                -force                   : Force installation or NVM options configuration

COMMANDS

        Firmware update commands
                install                  : Install firmware package file for Broadcom devices
                verify                   : Verify if firmware package is installed correctly on the device
                fw_sync                  : Synchronize SBI, SRT and CRT Primary and Secondary images
                                           This command is supported only on BCM9575xxx devices.
                livepatch                : Query, Activate and Deactivate the patch from NVM.
                                           Updates the patch file directly to the device i.e with out installing on NVM.
                                           This command is supported only on BCM9575xxx devices

        Query commands
                version                  : Query bnxtnvm version
                list                     : Query package components and associated version details
                view                     : Query package component details
                listdev                  : Scan and display the supported Broadcom device information
                saveoptions              : Save NVM configuration options on the device to a file
                devid                    : Query Broadcom device id's
                device_info              : Query Broadcom device information and default hardware resources profile version
                getoption                : Query current NVM configuration option settings of a device
                pkgver                   : Query firmware package version installed on the device
                device_temperature       : Query the device temperature in Celsius
                moduleinfo               : Query the PHY module information
                ether_serdes_eye_diagram : Query the ethernet serdes eye diagram
                pci_eye_diagram          : Query the pci eye diagram. This command is not supported on BCM9575xxx devices
                pcie_counters            : Query the pcie counters of the device
                get_ptp_extended         : Query to get the PTP extended parameters. This command is supported only on BCM9575xxx devices
                get_txfir                : Query the TX FIR settings
                optionhelp               : Query detailed help for each NVM configuration option
                pci_eye_scope            : Query the Horizontal, Vertical margin values along with PCIe link rating and displays eye diagram
                                           This command is supported only on BCM9575xxx devices
                cert_provision_state     : Query the imported certificate chain on the device. This command is supported only on BCM9575xxx devices
                nvm_measurement          : Query the hash value, where hash value measures based on active nvm configuration.
                                           This command is supported only on BCM9575xxx devices

        Configure commands
                setoption                : Configure NVM configuration option settings of a device
                resmgmt                  : Resource Management to Get/Set Resources
                cfgtunnel                : Custom tunnel configuration (Query, free Port and Set Port)
                vf                       : Configure the trusted VF
                prbs_test                : Configure and run PRBS test on a given port
                add_ntuple_filter        : Add ntuple flow filter for the specified MAC and destination port
                free_ntuple_filter       : Free ntuple flow filter for the specified filter id
                msix_max_vectors         : Configure the number of MSI-X max vectors per VF for each PF
                                           This command is supported only on BCM9575xxx devices
                tsio_function_pin        : Enable/Disable a TSIO function and set a function capability on the pin
                duty_cycle               : To configure duty cycle on TSIO outgoing signal
                dll_source               : To configure DLL source for PHC
                set_ptp_extended         : To configure the primary/secondary function as well as set the failover parameters
                                           This command is supported only on BCM9575xxx devices
                set_txfir                : Configures the TX FIR settings
                reset                    : Reset the device.
                restore_factory_defaults : Restores NVM configuration to factory defaults. This command is supported only on BCM9575xxx devices
                mh_pf_alloc              : Configure the number of PFs per PCIe endpoint. This command is supported only on BCM9575xxx devices
                loopback                 : Configure different loopback modes i.e. phy loopback, mac loopback and external loopback

        Debug commands
                coredump                 : Retrieves coredump data from the device and from the ddr (if available).
                                           A .core file will be generated in the same directory
                backup                   : Read NVM contents to a file
                device_health_check      : Checks the firmware health and nvm redundancy of the device.
                dscdump                  : Retrieves DSC Dump from device. A .dmp file will be generated in the same directory


EXAMPLES
        To display supported devices     : bnxtnvm listdev
        To install firmware              : bnxtnvm -dev=<ethX> install <package file>
        To verify firmware installed     : bnxtnvm -dev=<ethX> verify
        To get NVM config option         : bnxtnvm -dev=<ethX> getoption=<NVM_option_name>:[function/port index]
        To set NVM config option         : bnxtnvm -dev=<ethX> setoption=<NVM_option_name>:[function/port index]#<val>
        To get resources of PF           : bnxtnvm -dev=<ethX> resmgmt min
                                           bnxtnvm -dev=<ethX> resmgmt max
                                           bnxtnvm -dev=<ethX> resmgmt max_cmpl
        To display pci eye diagram       : bnxtnvm -dev=<ethX> pci_eye_diagram <pci_lane_number>
        To configure tunnel redirection  : bnxtnvm -dev=<ethX> cfgtunnel vxlan_ipv4 dst_port <port num>
        To retrieve coredump             : bnxtnvm -dev=<ethX> coredump
        To reset firmware                : bnxtnvm -dev=<ethX> reset

Commands
--------
Only one command may be specified per invocation of the bnxtnvm command-line.
When inbox drivers are loaded only one instance of bnxtnvm should be interacting
with the NIC at a time. Running multiple instances of bnxtnvm at the same time
can result in the corruption of the control and data registers and to recover the
registers, User need to perform the sled-cycle.

Installing NVM Packages
~~~~~~~~~~~~~~~~~~~~~~~
The most common use of the bnxtnvm utility is the installation of a
Broadcom-supplied NVM package (a file usually ending in a '.pkg' extension
or suffix).

To install a package file, use the bnxtnvm "install" command. For example:

    $ bnxtnvm install filename.pkg

To install a package file using online method, use bnxtnvm "-online" option.
This option is supported on Linux and Windows OS. For example:

    $ bnxtnvm install -online

To install multiple packages for multiple controller types, you can use
wildcards in the filename argument. The correct packages will be automatically
installed into the supported controller devices based on PCI Device-IDs.
Example:

    $ bnxtnvm install *.pkg

To save macaddress while installing package file, use -savemac option. For
example:

    $ bnxtnvm -dev=<interface name> -savemac install filename.pkg

Note: This option is deprecated. By default bnxtnvm tool save and restore the
MAC's in package update.

To query the currently installed package version and active package version,
use the "pkgver" command. For example:

    $ bnxtnvm pkgver

        Active Package version    : 21.42.04.40
        Package version on NVM    : 21.42.04.40

To display the version or description of a package file (e.g. before
installing into a device), use the bnxtnvm "pkgver" command with a package
file argument. For example:

        $ bnxtnvm pkgver filename.pkg
        Package File: filename.pkg
        Package version: 1.0.0


NVM Item Selection
~~~~~~~~~~~~~~~~~~
NVM items are uniquely identified by the combination of the 3 values of:
* type: a value from 1 to 65534 identifying the content type/purpose
* ordinal: a value from 0 to 65535 identifying a unique instance of the type
* extension: a 16-bit bit-field identifying permutations of the type:ordinal

By default, bnxtnvm commands will operate on all NVM items. If the operator
wishes to select a set of types or instances of items, they may do so by
specifying one or more of the 3 values above using the command-line options:

-type=<type> to specify the item type by number or by name
      Use -type=? to display a list of item type names.
      The optional enables the installation of all items of the specified type,
      regardless of directive, when used with the "install" command.
      Numeric types are parsed in decimal by default but may also be expressed
      in hexadecimal notation by using a "0x" prefix.

Example:
$ bnxtnvm  -type=?
num   name          description
---   ------------  -----------
1     pkgLog        Package Installation Log
2     update        Secure Update Staging Area
3     chimpPatch    ChiMP Patch Firmware
4     chimpBoot     Chip Management Processor Boot Firmware
5     VPD           Vital Product Data
6     MBA           Multiple Boot Agent Expansion ROM
7     AVS           Adaptive Voltage Scaling Firmware
8     PCIEucode     PCIe Microcode
9     portMacro     Port Macro Firmware
10    apeFW         Application Processing Engine Firmware
11    apePatch      APE Patch Firmware
12    kongFW        Kong Firmware
13    kongPatch     Kong Patch Firmware
14    bonoFW        Bono Firmware
15    bonoPatch     Bono Patch Firmware
16    tangFW        Tang Firmware
17    tangPatch     Tang Patch Firmware
18    chimpHWRM     ChiMP Hardware Resource Manager Firmware
19    CCM           Comprehensive Configuration Management
20    PCIcfg        PCIe Configuration Data
21    PHYucode      Falcon PHY Microcode
22    iSCSIboot     iSCSI Boot Software Initiator
26    iSCSIcfg      iSCSI Boot Configuration Data
27    extPHYfw      External PHY Firmware
28    modPartNums   Optical Modules Part Number List
40    sharedCfg     Shared Configuration Data
41    portCfg       Port Configuration Data
42    funcCfg       Function Configuration Data
43    cfgTable      Configuration Layout Table
44    QOScfg        QOS Configuration Data
45    cfgJournal    cfgJournal
46    systemCfg     systemCfg
47    factoryCfg    Factory Configuration Data
48    mgmtCfg       Out-of-band Management Configuration Data
49    mgmtData      Out-of-band Management Data
50    webData       Out-of-band Management Web Data
51    webMeta       Out-of-band Management Web Metadata
52    eventLog      Out-of-band Management Event Log
53    auditLog      Out-of-band Management Audit Log
54    SNAcfg        SecureNIC Agent Configuration
55    LLDPcfg       LLDP and DCBX Configuration Data
57    ASNdata       ASN Configuration Data
59    MCUPatch      MCU Patch
60    QoSProfiles   QoS Profiles Data
61    SBIImage      SBI Image
62    SRTImage      SRT Image
63    CRTImage      CRT Image
64    oobmSshCfg    OOB-Management SSH Configuration
65    oobmCfg       OOB-Management Configuration
66    CrashDmpFW    Crash Dump Firmware
67    CrashDmpData  Crash Dump Data

Package Files
~~~~~~~~~~~~~
Package files are collections of items (e.g. software components) normally
stored in the NVM along with descriptions of allocations or other adjustments
(e.g. removal of items) to be made to the NVM during the installation of the
package file. Package files normally have a ".pkg" file extension and a
Broadcom-proprietary content format.

Installing a Package
--------------------
A package may be installed with the "install" command. Example:
    $ bnxtnvm install filename.pkg

The package metadata is not written to the NVM when a packaged item is
installed, so you CANNOT exactly recreate a package from the NVM
contents after a package has been installed into the NVM.

When packages are installed using this program, the Package Log
(PkgLog) contained in the NVM is appended with the details of the package
installed.

Save MAC Address
----------------
When user tries to install the package using "bnxtnvm install full.pkg". Where
full.pkg was generated by "bnxtnvm backup" which contains both executables and
NVM configuration. If user specfies the optional parameter "cfg" for backup
command, will back only NVM configuration. By using comamnd "bnxtnvm install full.pkg",
user could be able to upgrade the FW executables and NVM configuration into NVM.

In the above case "bnxtnvm install full.pkg" would overwrite mac address of each
physical function. To avoid it, user needs to install the package file using
command option '-savemac'. Example:
    $ bnxtnvm -dev=<interface name> -savemac install filename.pkg

Note: For '-savemac' command option, device interface name is mandatory.

Verifying a Package
---------------------------
To inspect or verify the contents of a package file, you can use the following
bnxtnvm commands with one or more package filename arguments:
    * verify
    * pkgver
    * devid

Examples:
    $ bnxtnvm verify file1.pkg file2.pkg

Wildcards are supported in the package filename arguments. Example:

    $ bnxtnvm pkgver *.pkg

When a package file is verified using the "verify" command, the package header
is checked for valid identifying marks, length and offset values, etc. The
package trailer which contains a CRC-32 checksum of the entire package is also
checked for validity. Additionally, each packaged items is checked for
validity and authenticity (see "Verifying Items" for more information).


Verifying Items
===============
When verifying NVM or package file contents (e.g. when using the "verify"
command), each item is verified for validity and authenticity:
- by checksum (CRC-32), except when the "no checksum" attribute flag is set
- by RSA-encrypted digital signature (SHA-256 hash), for all executable items
- by identifying marks, for embedded firmware items (e.g. ChiMP, APE, etc.)

Items within packages and the NVM are automatically verified with the following
bnxtnvm commands:
    * install
    * backup


configuring NVM options
=======================
bnxtnvm allows users to configure individual options in NVM and read option
information from the NVM.

To read nvm option

 ./bnxtnvm -dev=<interface name> getoption=<option-name>:<Instance>:<ArrayIndex>

-dev: device name, is mandatory for NVM configuration commands. Note: 'devname'
can, in the case of multiple PF's, be the name of any of the PF interface names.
This, however, does not remove the requirement for specifying the 'port index'
parameter when retrieving a specific interface value, i.e. PF1's value, in the
case of multiple interfaces.

option-name: specifies the nvm-option name to query.

Instance-num: NVM supports multiple instances (Ex: Multiple ports or functions
              associated with the interface specified by -dev=). So user needs
              to specify the function/port index to get the NVM option for
              requried PF. For shared NVM config options, user doesn't requried
              to provide instance number.

ArrayIndex: option type can be array type or single value. If the option is
            array type, then ArrayIndex specifies the index number.

Note: If an option is a single instance value, but the option is array type, the
command syntax is below

 ./bnxtnvm -dev=<interface name> getoption=<option-name>:<Instance>:<ArrayIndex>

 ./bnxtnvm -dev=<interface name> getoption=?
After getoption, if ? is given, help is displayed with listing of supported NVM
option names.

To configure nvm option

./bnxtnvm -dev=<interface name> setoption=<option-name>:<Instance>:<ArrayIndex>#<optvalue>

-dev: device name, is mandatory for NVM configuration commands. Note: 'devname'
can, in the case of multiple PF's, be the name of any of the PF interface names.
This, however, does not remove the requirement for specifying the 'port index'
parameter when retrieving a specific interface value, i.e. PF1's value, in the
case of multiple interfaces.

option-name: specifies the nvm-option name to query.

Instance-num: NVM supports multiple instances (Ex: Multiple ports or functions
              associated with the interface specified by -dev=). So user needs
              to specify the function/port index to set the NVM option for required
              PF. For shared NVM config options, user doesn't required to provide
              instance number.

ArrayIndex: option type can be array type or single value. If the option is
            array type, then ArrayIndex specifies the index number.

optvalue: value to be set for the option.

Note: If an option is a single instance value, but the option is array type, the
command syntax is below

 ./bnxtnvm -dev=<interface name> setoption=<option-name>:<Instance>:<ArrayIndex>#<optvalue>

 ./bnxtnvm -dev=<interface name> setoption=?
After setoption, if ? is given, help is displayed with listing of supported NVM
option names.

To get detailed help aboout an nvm option execute below command.

 ./bnxtnvm -dev=<inteface name> optionhelp=<option-name>

Note:
======
1) If any NVM option is not supported on specific platform, user will see the failure messages
in the system log. Simultaneous NVM writes are not supported from bnxtnvm. If user still
tries to perform simultaneous NVM writes it may result timeout errors.

2) In Multi-Host/Multi-Root environment, get/set of nvm options for function/port level,
always query/configure the host1 (where host index starts from 1) nvm values. Other than host 1,
user cannot configure/query the nvm option values for the other available hosts.

Supported NVM options
=====================
Name                              Scope
----------------                  ---------
an_protocol                       Port
autodetect_speed_exclude_mask     Port
afm_rm_resc_strategy              Device
bw_reservation                    Function
bw_reservation_valid              Function
bw_limit                          Function
bw_limit_valid                    Function
bw_in_percent                     Function
cos_precedence_order              Device
dcbx_mode                         Port
drv_flow_control                  Port
drv_speed_capability_mask         Port
disable_ntuple                    Function
drv_link_speed                    Port
disable_gre_ver_check             Device
disable_roce_v1                   Device
disable_nvgre_rx                  Device
disable_nvgre_tx                  Device
default_evb_mode                  Port
disable_rx_vlan_accel             Device
disable_tx_vlan_accel             Device
disable_vxlan_hdr_rsvd_check      Device
disable_full_crashdump            Device
disable_rdma_sriov                Function
eee_pwr_save_mode                 Port
enable_sriov                      Device
enable_pme_capability             Device
enable_l2_em_filter               Device
enable_wol_on_acpi_pattern        Port
enable_adapter_error_recovery     Device
enable_ecn                        Device
enable_truflow                    Function
enable_roce_bidi_optimization     Device
enable_crash_dump_to_host_DDR     Device
enable_power_reduction            Device
firmware_link_speed_d0            Port
firmware_link_speed_d3            Port
flow_control_disable              Function
firmware_speed_cap_mask_d3        Port
fwd_err_correct                   Port
firm_speed_capability_mask        Port
host_to_bmc                       Port
ignore_ari_capability             Device
lldp_nearest_bridge               Port
lldp_nearest_non_tpmr_bridge      Port
l2_pf_db_bar_size                 Function
l2_vf_db_bar_size                 Function
link_training                     Port
logical_link_mode                 Function
max_num_pf_msix_vect              Device
msix_vectors_per_vf               Function
mf_mode                           Port
magic_packet_wol                  Port
media_auto_detect                 Port
mba                               Function
mba_boot_type                     Function
mba_delay_time                    Function
mba_boot_retry_count              Function
mba_vlan                          Function
mba_vlan_value                    Function
mba_boot_protocol                 Function
mba_link_speed                    Function
mac_address                       Function
min_pf_msix_vectors               Device
multiroot_mode                    Device
mh_port_breakout_mode             Device
num_partitions_per_port           Port
num_vf_per_pf                     Function
ncsi_over_smbus                   Device
ncsi_over_pcie_vdm                Device
oobm_session_port                 Device
oobm_session_timeout              Device
oobm_ap_uart_enable               Device
oobm_ap_uart_timeout              Device
oobm_watchdog                     Device
oobm_syslog_port                  Device
oobm_syslog_server_addr           Device
oobm_debug                        Device
oobm_mac_address_port_0           Device
oobm_ipv4_addr_port_0             Device
oobm_ipv4_subnet_mask_port_0      Device
oobm_ipv4_default_gateway_port_0  Device
oobm_vlan_tag_port_0              Device
oobm_mac_address_port_1           Device
oobm_ipv4_addr_port_1             Device
oobm_ipv4_subnet_mask_port_1      Device
oobm_ipv4_default_gateway_port_1  Device
oobm_vlan_tag_port_1              Device
oobm_mac_address_port_2           Device
oobm_ipv4_addr_port_2             Device
oobm_ipv4_subnet_mask_port_2      Device
oobm_ipv4_default_gateway_port_2  Device
oobm_vlan_tag_port_2              Device
oobm_mac_address_port_3           Device
oobm_ipv4_addr_port_3             Device
oobm_ipv4_subnet_mask_port_3      Device
oobm_ipv4_default_gateway_port_3  Device
oobm_vlan_tag_port_3              Device
oobm_high_availability            Device
oobm_port_selection               Device
phy_select                        Device
pairing_tunnel_type               Device
pause_monitor_disable             Device
port_hide                         Device
port_hide_capable                 Device
pci_preset                        Device
pfc_flood_check_time              Device
pfc_flood_reenable_time           Device
pcie_relaxed_ordering             Device
ptp_tsio_pin_cfg                  Device
ptp_sync_in_freq                  Device
pf_pci_bar2_size                  Port
performance_profile               Device
pf_for_host_mem_chdmp             Device
rdma_capable                      Device
support_rdma                      Function
secondary_ext_phy_link_speed_d0   Port
secondary_ext_fw_link_speed_d3    Port
spdm_mctp_smbus                   Device
spdm_mctp_pcievdm                 Device
tx_sched_alloc_mode               Device
vf_pci_bar2_size                  Function


bnxtnvm Returned Error Codes
============================

BNXT_NVM_STATUS_SUCCESS                         0    //(0x0)
BNXT_NVM_STATUS_FAILURE                         1    //(0x1)
BNXT_NVM_STATUS_OPERATION_NOT_SUPPORTED         2    //(0x2)
BNXT_NVM_STATUS_INVALID_PKG_FILE_URL            3    //(0x3)
BNXT_NVM_STATUS_INVALID_PKG_FILE                4    //(0x4)
BNXT_NVM_STATUS_DEVICE_RESET_FAILURE            5    //(0x5)
BNXT_NVM_STATUS_MALLOC_FAILURE                  6    //(0x6)
BNXT_NVM_STATUS_CMD_NOT_SUPPORTED               7    //(0x7)
BNXT_NVM_STATUS_DEVICE_FAILURE                  8    //(0x8)
BNXT_NVM_STATUS_FILE_ACCESS_FAILURE             9    //(0x9)
BNXT_NVM_STATUS_ADMIN_ACCESS_REQUIRED           10   //(0xa)
BNXT_NVM_STATUS_FIRMWARE_UPDATE_FAILURE         11   //(0xb)
BNXT_NVM_STATUS_PKG_VERIFICATION_FAILURE        12   //(0xc)
BNXT_NVM_STATUS_NO_SUPPORTED_DEVICES_FOUND      13   //(0xd)
BNXT_NVM_STATUS_ONLINE_UPDATE_NOT_SUPPORTED     14   //(0xe)
BNXT_NVM_STATUS_INVALID_SYNTAX                  15   //(0xf)
BNXT_NVM_STATUS_INVALID_PARAMETER_VALUE         16   //(0x10)
BNXT_NVM_STATUS_DEVICE_NOT_FOUND                17   //(0x11)
BNXT_NVM_STATUS_LFC_DRIVER_NOT_LOADED           18   //(0x12)
BNXT_NVM_STATUS_ALREADY_CONFIGURED              19   //(0x13)
BNXT_NVM_STATUS_INSUFFICIENT_SPACE              20   //(0x14)
BNXT_NVM_STATUS_DEVICE_BUSY                     21   //(0x15)
BNXT_NVM_STATUS_PCI_IDS_FAILURE                 22   //(0x16)
BNXT_NVM_STATUS_MAC_FAILURE                     23   //(0x17)
BNXT_NVM_STATUS_INVALID_DEVICE_SERIAL_NUMBER    24   //(0x18)
BNXT_NVM_STATUS_PCI_CFG_DATA_FAILED             25   //(0x19)
BNXT_NVM_STATUS_SOCKET_IOCTL_FAILURE            26   //(0x1A)
BNXT_NVM_STATUS_SOCKET_FAILURE                  27   //(0x1B)
BNXT_NVM_STATUS_INTERFACE_LINK_DOWN             28   //(0x1C)
BNXT_NVM_STATUS_DRIVER_NOT_LOADED               29   //(0x1D)
BNXT_NVM_STATUS_DEVIO_CALL_FAILED               30   //(0x1E)
BNXT_NVM_STATUS_INVALID_DATA_FROM_DRIVER        31   //(0x1F)
BNXT_NVM_STATUS_DRIVER_COMMUNICATE_ERROR        32   //(0x20)
BNXT_NVM_STATUS_MSDN_API_FAILURE                33   //(0x21)
BNXT_NVM_STATUS_REG_OPEN_FAILURE                34   //(0x22)
BNXT_NVM_STATUS_REG_QUERY_FAILURE               35   //(0x23)
BNXT_NVM_STATUS_NOT_A_PHYSICAL_DEVICE           36   //(0x24)
BNXT_NVM_STATUS_SCM_LOCKED                      37   //(0x25)
BNXT_NVM_STATUS_SYS_DIR_FAILED                  38   //(0x26)
BNXT_NVM_STATUS_INVALID_SERIAL_NUMBER           39   //(0x27)
BNXT_NVM_STATUS_ROOT_PRIVILEGES_REQUIRED        40   //(0x28)
BNXT_NVM_STATUS_PF_INITIALIZATION_FAILURE       41   //(0x29)
BNXT_NVM_STATUS_VF_INITIALIZATION_FAILURE       42   //(0x2A)
BNXT_NVM_STATUS_FW_SYNC_NOT_REQUIRED            43   //(0x2B)


Recovery mode
=============
User can recovery the bricked device using below two command. In this release
recovery is supported only in Linux operating system.

./bnxtnvm -dev=<Interface/PCI Device name> -recovery install <package file name>

Above command is used to do the basic recovery i.e. enter into recovery mode
and update the new package file in case of card bricked.


./bnxtnvm -dev=<Interface/PCI Device name> -recovery install <package file name> -force

Above command is used to do the full recovery i.e. enter into recovery mode
and erase the complete NVM and updates the package file.

User needs to install the bnxtnvm rpm, to copied the required recovery images into
linux distribution.

Limitations:
===========

1) The end user needs to reprogram the configuration parameters when the recovery
is performed with the force option. Recovery method will try to save/restore
the MAC’s in this process. If unable to save/restore the MAC’s, then the end
user needs to reprogram the MAC’s after the recovery process is completed
successfully. In the MHB environment, user can reprogram the MAC's from host1
using below command.

  bnxtnvm -dev=<pci/device name> setoption=mac_address:<function index>#<mac address value> -force

2) In the MHB environment, the end-user must not perform a reboot, slot-cycle
or other control path operations on any host, during a recovery process.

3) While performing the recovery process, the end user should not bind the PF to
the driver.

4) The secure OS boot method must be disabled.

5) bnxtnvm will cause the unexpected behaviour or output when executed on the command
prompt or Windows powershell with non-administrative priviliges in Windows OS.


Custom tunnel configuration commands
====================================
bnxtnvm allows users to configure custom tunnel.

./bnxtnvm -dev=<interface name> cfgtunnel <vxlan_ipv4|vxlan_ipv6>

The above command is used to query the current configuration.

./bnxtnvm -dev=<interface name> cfgtunnel <vxlan_ipv4|vxlan_ipv6> dst_port

The above command will free the currently configured custom tunnel port.

./bnxtnvm -dev=<interface name> cfgtunnel <vxlan_ipv4|vxlan_ipv6> dst_port <port num>

The above command will set the custom tunnel port to the value provided in 'port num'.

./bnxtnvm -dev=<interface name> cfgtunnel rss_mode <inner/outer>

The above command will configure RSS hashing mode for custom tunnel port.

./bnxtnvm -dev=<interface name> cfgtunnel rss_mode

The above command will query RSS hashing mode for custom tunnel port.

PCIe Statistics/Counters command
================================
Allow users to fetch the PCIe statistics or counters.(This feature is only for
Linux)

./bnxtnvm -dev=<interface name> pcie_counters.

Ethernet Eye diagram command
============================
Allow users to retrieve Ethernet eye diagram.(This feature is only for Linux).
The link toggling is expected when running the ethernet eye diagram command.
Ethernet eye diagram (ether_serdes_eye_diagram) and PCI EyeScope
(pci_eye_scope) commands share resources on the NIC. Therefore, these commands
cannot be run concurrently. If PCI EyeScope is running and you attempt to run
Ethernet eye diagram, bnxtnvm will return immediately with "Failed to retrieve
eye data to display eye diagram!"

./bnxtnvm -dev=<interface name> ether_serdes_eye_diagram [-margin|-v|-V]
Without any options, only the test result is displayed.
-margin prints the horizontal and vertical margin values, including the test result.
-v|-V plots the eye diagram, prints the horizontal and vertical margin values, including the test result.


Device Reset command
====================
Allow users to reset the device from the host.

./bnxtnvm -dev=<interface name> reset

Module info command
===================
Allow users to fetch PHY module information.(This feature is only for Linux)

./bnxtnvm -dev=<interface name> moduleinfo

Core Dump command
=================
Retrieves coredump from the device and from the ddr (if available). A <>.core
file will be generated in the same directory. And the .core file will be
generated from where the bnxtnvm utiltiy is executed.

./bnxtnvm -dev=<interface name> coredump [ddr]

Note: It is strongly recommended not to use the "ethtool -W" command when using bnxtnvm
"device_info" command to query the crashdump availability and "coredump" commands. User
has to set the "ethtool -W" flag to previous state, if still user wants to go-ahead and
use the "ethtool -W" command.

Pci Eye diagram command
=======================
Allow users to retrieve pci eye diagram. This command is supported only on
Cumulus and Whitney devices. And this feature is only for Linux platform.

./bnxtnvm -dev=<interface name> pci_eye_diagram <lane number> [-margin|-v|-V]
Without any options, only the test result is displayed.
-margin prints the horizontal and vertical margin values, including the test result.
-v|-V plots the eye diagram, prints the horizontal and vertical margin values, including the test result.


Resource Management command
===========================
Allow users to get/set resourses.

bnxtnvm -dev=<interface name> resmgmt [profile | min | max | roce_max | max_cmpl | strategy | save] <additional_args_depending_on_subcommand>

a) 'profile' should be followed by "symmetric",which will cause the min, max, roce_max and strategy settings accordingly

b) 'min' sets Dynamic Minimum guaranteed percentage, it should be followed by N values (where N is the # of PFs on this card). bnxtnvm will verify that sum <= 100
   If called with no values, it will report the current min settings.  If min > max for a given PF, warning will be printed.

c) 'max' sets Dynamic Maximum, non-guaranteed percentages, it should be followed by N values (where N is the # of PFs on this card). Value for any PF should not exceed 100.
   If called with no values, it will report the current max settings.  If max < min for a given PF, warning will be printed.

d) 'roce_max' sets RoCE max guaranteed percentage, it should be followed by N values (where N is the # of RoCE-enabled PFs on this card).
   bnxtnvm will verify that the number of values equals number of RoCE-enabled PFs, and also that the sum <= 100.
   If called with no values, it will report the current roce_max settings.

e) 'max_cmpl' sets maximum completion rings guaranteed percentage, it should be followed by N values (where N is the # of PFs on this card).
   If called with no values, it will report the current max_cmpl settings.

f) 'strategy' is followed by either 'minimal' or 'maximal' or 'minimal-static'. If called with no argument then it will report the current strategy setting.

g) 'save' takes a filename argument and dumps all the resmgmt variables into the file excluding 'profile'.

Device Temperature command
==========================
Allow users to fetch the device temperature. This feature is supported on Linux and ESXi only.

./bnxtnvm -dev=<interface name> device_temperature.

Trusted VF command
==================
Allow user to configure VF as a trusted entity and queries trusted VF configuration.
This feature is only supported on Linux.

Command to configure trusted VF for a given vf_index

./bnxtnvm -dev=<interface name> vf <vf_index> trust <enable/disable>

Command to query trusted VF configuration for a given vf_index

./bnxtnvm -dev=<interface name> vf <vf_index> trust

Note: If kernel supports the trusted VF configuration in "ip link" command,
It's strongly recommended for the user to configure it using "ip link"
command. Otherwise inconsistent behaviour may be seen in the trusted
VF configuration with kernel.


PCI EyeScope command
====================
Display the PCI EyeScope test result along with Horizontal, Vertical margin
values and PCIe link rating as per below table for PCIe Gen4.
PCI EyeScope (pci_eye_scope) and Ethernet eye diagram (ether_serdes_eye_diagram)
commands share resources on the NIC. Therefore, these commands cannot be run
concurrently. If Ethernet eye diagram is running and you attempt to run PCI
EyeScope, bnxtnvm will wait for Ethernet eye diagram to complete and then run
successfully.

                       --------------------------------------------------
                       | EH * EW   |      Rank      | Channel Loss (dB) |
                       --------------------------------------------------
                       | > 293     | Excellent (5)  |  < 11.5           |
                       --------------------------------------------------
                       | 265 - 293 |      4         |  11.5 - 15.5      |
                       --------------------------------------------------
                       | 208 - 264 |      3         |  15.5 - 19.5      |
                       --------------------------------------------------
                       | 153 - 207 |      2         |  19.5 - 23.5      |
                       --------------------------------------------------
                       | < 153     |      1         |  23.5 - 27.5      |
                       --------------------------------------------------

In case of full EyeScope query, eye plot is displayed. By default PCI EyeScope is plotted
with BER "1e-8". Supported Target BER values are "1e-8", "1e-9", "1e-10", "1e-11", "1e-12".
This command is supported only on BCM9575xxx devices.

Syntax:
    bnxtnvm -dev=<interface name> pci_eye_scope <PCI Lane Number>
    bnxtnvm -dev=<interface name> pci_eye_scope full_eye <PCI Lane number> [<Target BER>]
    bnxtnvm -dev=<interface name> pci_eye_scope stop

PRBS Test
=========
This command is used to configure and run PRBS test on a given port. The test can be run on a port or per lane
with a specific polynomial. This command will be used in port interface debug to analyze quality of link.
Supported prbs_modes are PRBS31/PRBS7/PRBS9/PRBS11/PRBS15/PRBS23/PRBS58 (Default PRBS31)

Note:
    1) The interface(s) should be fully initialized prior to the testing.
    2) During the testing, there should not be any queries or configs sent to the card.
       "ifdown" the interface(s) is recommended.

Syntax:
    bnxtnvm -dev=<interface name> prbs_test <enable/disable>

    Above command will enable/disable PRBS test with default parameters i.e. prbs mode is PRBS31
    for all the RX/TX lanes.

    bnxtnvm -dev=<interface name> prbs_test <enable> [prbs_mode <value> rx_lane_mask <value> tx_lane_mask <value> duration <value in seconds>]

    Above command will enable PRBS test with user specified prbs mode, RX/TX lanes and duration in seconds.
    Once duration timeout is reached PRBS test will be stoped.


Restore Factory Defaults
========================
Allow user to restore NVM configuration to factory defaults. This command is supported only on BCM9575xxx devices.

./bnxtnvm -dev=<interface name> restore_factory_defaults


loopback
========
Allow user to configure different loopback modes i.e. phy loopback, mac loopback and external loopback

Syntax:
    1) bnxtnvm -dev=<device interface name> loopback phy_remote

       Above command enables loopback of local PHY RX to peer PHY TX. The packets transmitted by the peer are looped back to the peer at the PHY.
       No packets will reach the host. Host will see a link down.

    2) bnxtnvm -dev=<device interface name> loopback phy_local

       Above command enables a loopback of local TX to local RX at the PHY. Any packets transmitted from the host are looped back to the host.
       No packets will be transmitted on the line. If any peer is connected, the peer should ignore the link status from host.

    3) bnxtnvm -dev=<device interface name> loopback mac_local
       Above command enables a loopback of local TX to local RX at the MAC. Any packets transmitted from the host are looped back to the host.
       No packets will be transmitted on the line. If any peer is connected, the peer should ignore the link status  from host.

    4) bnxtnvm -dev=<device interface name> loopback external

       Above command prepares the PHY from external loopback and suppresses NONCE generation for auto negotiation to work with an external loopback.
       This option should only be used if the same port external loopback dongle or equivalent is used.
       Without this option and AN enabled, the host may not see a link up.

    5) bnxtnvm -dev=<device interface name> loopback disable

       Above command disables any loopback setting.

    6) bnxtnvm -dev=<device interface name> loopback

       Above command is to query the configured loopback mode.

When bnxtnvm is used to change the device link parameters, ethtool link settings will be completely out-of-sync.

Device Health Check
===================
This command can be used to check the firmware health and nvm redundancy of the device.

./bnxtnvm -dev=<device interface name> device_health_check

DSC Dump command
=================
This command is used  to retrieves DSC dump data from a device. A <xxx>.dmp file will be
generated in the same directory where bnxtnvm executable is running.

Note: While the dscdump operation is running, FW does not service other
commands that operate on the PHY. System logs may indicate command timeouts
while the dscdump operation is in progress.

./bnxtnvm -dev=<interface name> dscdump <lane_number> [<diag_level>]

Above DSC dump command takes the following parameters as a input.

    lane_number : MRS lane number
    diag_level  : This parameter is an optional. If user doesn't specified the diag_level, by default DSC Dump will
                  be collected on all the supported diag levels. Supported diag level are as follows "diag_lane",
                  "diag_core", "diag_event", "diag_eye", "diag_reg_core", "diag_reg_lane", "diag_uc_core", "diag_uc_lane",
                  "diag_lane_debug", "diag_ber_vert", "diag_ber_horz", "diag_event_safe", "diag_timestamp"

FW sync command
===============
This command can be used to synchronize SBI, SRT and CRT Primary and Secondary FW images. This command is supported only
on BCM9575xx devices.

./bnxtnvm -dev=<device interface name> fw_sync

TX FIR Settings
===============

Below command is used to query TX FIR settings.

./bnxtnvm -dev=<interface name> get_txfir <type> <lane_number>

    type        : Modulation types of TX FIR. Supported values are "NRZ" and "PAM4"
    lane_number : MRS lane number

Below command is used to configure the TX FIR settings.

./bnxtnvm -dev=<interface name> set_txfir <type> <lane_mask> <v1> <v2> <v3> <v4>

    type        : Modulation types of TX FIR. Supported values are "NRZ" and "PAM4"
    lane_mask   : The lane mask of the lane TX FIR will be configured.
    v<1-4>      : Values of TX FIR required for "NRZ" or "PAM4"

MH PF Alloc
===========

To query and configure the number of PFs per PCIe endpoint.
This command is supported only on devices BCM9575xxx and above.

Syntax:

Below command is used to query the number of PF's for all the endpoints.

./bnxtnvm -dev=<interface name> mh_pf_alloc

Below command is used to configure number of PF's for each endpoint.

./bnxtnvm -dev=<interface name> mh_pf_alloc <ep0_pf_cnt> <ep1_pf_cnt> <ep2_pf_cnt> <ep3_pf_cnt>
        ep0_pf_cnt:  Number of PFs on endpoint 0
        ep1_pf_cnt:  Number of PFs on endpoint 1
        ep2_pf_cnt:  Number of PFs on endpoint 2
        ep3_pf_cnt:  Number of PFs on endpoint 3


MSIX Max Vectors
================

To query and configure the number of msix max vectors values for VF's per each PF.
This command is supported only on devices BCM9575xxx and above. This feature is only supported on Linux.
This command is supported only on BCM9575xxx devices.

Syntax:

Below command is used to query the msix max vector table.

./bnxtnvm -dev=<interface name> msix_max_vectors <pf_number>

    pf_number : PF Number to query the table of 8 rows for msix max vectors.

Below command is used to configure the msix ma vector table.

./bnxtnvm -dev=<interface name> msix_max_vectors <pf_number> <start_vf_0> <msix_val> ... <start_vf_N> <msix_val>

    pf_number  : PF Number to query the table of 8 rows for msix max vectors.
    start_vf_N : Starting VF ID for the range. User has to provide the start_vf for eight rows i.e. 0 to 7.
    msix_val   : Maximum number of MSI-X vectors allowed per VF. User has to provide the msix_val for each start_vf.


LivePatch
=========

To query, activate and deactivate the live patch from NVM.

Syntax:

Below commands are used to activate or deactivate the live patch from NVM.

./bnxtnvm -dev=<interface name> livepatch activate [target_fw]
./bnxtnvm -dev=<interface name> livepatch deactivate [target_fw]
    target_fw : Target firmware is an optional parameter to active/deactivate the livepatch.
                By default tool updates all the supported target firmwares. target_fw strings
                are "common_fw" or "secure_fw" are supported on BCM95750x devices.
                "chimp_fw" string is supported on BCM9574x devices.

Below command is used to query the livepatch supported target firmware versions.

./bnxtnvm -dev=<interface name> livepatch

Below command is used to update the patch file directly to the device i.e. without installing it on NVM.

./bnxtnvm -dev=<interface name> livepatch update [target_fw] <patch_file>

saveoptions command
===================
This command saves the bxntnvm supported NVM options to a file. If any NVM option is not supported
on specific platform, user will see the failure messages in the system log.

./bnxtnvm -dev=<interface name> saveoptions <filename>

TSIO Function PIN
=================
This command is used to enable/disable a TSIO function and set a function capability on the pin.

./bnxtnvm -dev=<device interface name> tsio_function_pin <pin_index> <enable/disable> <pin usage string>
    pin_index        : Pin index valid values are from 0 to 3.
    pin_usage_string : Supported strings are "none", "pps_in", "pps_out", "sync_in",
                       "sync_out, "synce_primary_clock_out" and "synce_secondary_clock_out""

./bnxtnvm -dev=<device interface name> tsio_function_pin

Above command is used to query the configured tsio function pins.

Duty Cycle on TSIO
==================
This command is used to set duty cycle on TSIO outgoing signal.

./bnxtnvm -dev=<device interface name> duty_cycle period <value> up <value>
    value : Given value will treated as in nanoseconds.
            And the period value should be larger than "up" value.

DLL Source for PHC
==================
This command is used to set the DLL source for PHC.

./bnxtnvm -dev=<device interface name> dll_source source <value> frequency <value>
    value : The valid values for source is 0 to 4.
            And the valid values for frequency is from 0 to 3.

Certificate Provision State
===========================
This command is used to get the imported certificate chain on the device. This command is supported only on BCM9575xxx devices.

./bnxtnvm -dev=<device interface name> cert_provision_state [slot number]

   slot number : Where certificate chain on the device is imported. The valid values are from 0 to 7.
                 Slot number is an optional parameter. And the default value is 0.


PTP Extended Commands
=====================
To Get/SET the PTP extended parameters. And below commands are only supported on BCM9574x and BCM9575xxx devices.

Below command is used to get the PTP extended parameters.

./bnxtnvm -dev=<device interface_name> get_ptp_extended

Below command is used to set the primary/secondary function as well as set the failover parameters. All the parameters are optional.
But any one of the parameter needs to provide along with the set_ptp_extended commmand to execute.

Incase of configuring {primary/secondary}_vf, user needs to provide the mandatory parameter {primary/secondary}_vf_pf.

./bnxtnvm -dev=<device interface name> set_ptp_extended [<primary_pf> <pf_no>] [<primary_vf_pf> <pf_no> <primary_vf> <vf_no>]
         [<secondary_pf> <pf_no> ] [<secondary_vf_pf> <pf_no> <secondary_vf> <vf_no>] [secondary_mode <mode>] [failover_timer <value>]
    pf_no : The active physical function number to configure primary/secondary functions.
    vf_no : The active virtual function number to configure primary/secondary functions.
    mode  : Supported modes are "switch", "all", "pf_only".
             1) When user selects the mode "switch", immediately failover happens to the current secondary function.
                If there is no secondary function available, failover does not happen.
             2) When user selects the mode "all", all functions (PF and VF) can be used during auto selection of a secondary function.
                This is not used in case of admin configured secondary function.
             3) When user selects the mode "pf_only", only PF's can be selected as a secondary function during auto selection.
                This is not used in case of admin configured secondary function.
    value : Failover timer value. Valid range is from 0 to 0xFFFFFFFF. The failover time units is in milliseconds.
             1) The value of 0 (zero) - Failover timer is automatically selected.
	     2) The value of 0xFFFFFFFF - If user specifies this value, then failover never happens.
                Admin or auto selected Master will always be used for conditioning PHC.
	     3) The value of X - If user specifies the 'X' value, this is admin indicated failover timeout.

Note: If the timeout expires, firmware will failover PTP configurability from current master to secondary function.

NVM Measurement
===============
This command is used to determine whether the NVM configuration that’s active in the system has been changed or not.
To facilitate this, a hash is generated based on nvm configuration. The hash represents the measurement of the configuration.
This command is supported only on BCM9575xxx devices.

./bnxtnvm -dev=<device interface name> nvm_measurement


Synchronous Ethernet (SyncE) commands
=====================================
Synchronous Ethernet (SyncE) specifies the transference of clock/frequency over the ethernet physical layer, which is also
known as physical layer timing. It is an extension to the Ethernet network to carry frequency as well as clock traceability
for the whole network. The frequency from SyncE usually is called a recovered clock and it is used as input to PLL providing
clocks for Ethernet. This command is supported only on BCM9575xxx devices.

Below command is used to set the SyncE frequency profile, primary and secondary clock state.

./bnxtnvm -dev=<device interface name> set_sync_ethernet <frequency_profile> <value> [<primary_clock_state> <value>] [<secondary_clock_state> <value>]
        frequency_profile     : Frequency profile for SyncE recovered clock. Supported profiles are "25MHz".
        primary_clock_state   : Enable or disable primary clock for PF/port, overriding previous primary clock setting.
        secondary_clock_state : Enable or disable secondary clock for PF/port, overriding previous secondary clock setting.

Below command is used to query the SyncE parameters.

./bnxtnvm -dev=<device interface name> get_sync_ethernet

VPD read and write commands
================================
This command is used to read the VPD contents from the NVM and write the VPD
contents into VPD directory in the NVM.

Below are the commands.

./bnxtnvm -dev=<device interface name> vpd read  <file name>
./bnxtnvm -dev=<device interface name> vpd write <file name>

/* End of file */
