| .. SPDX-License-Identifier: GPL-2.0 | 
 |  | 
 | =================== | 
 | ice devlink support | 
 | =================== | 
 |  | 
 | This document describes the devlink features implemented by the ``ice`` | 
 | device driver. | 
 |  | 
 | Info versions | 
 | ============= | 
 |  | 
 | The ``ice`` driver reports the following versions | 
 |  | 
 | .. list-table:: devlink info versions implemented | 
 |     :widths: 5 5 5 90 | 
 |  | 
 |     * - Name | 
 |       - Type | 
 |       - Example | 
 |       - Description | 
 |     * - ``board.id`` | 
 |       - fixed | 
 |       - K65390-000 | 
 |       - The Product Board Assembly (PBA) identifier of the board. | 
 |     * - ``fw.mgmt`` | 
 |       - running | 
 |       - 2.1.7 | 
 |       - 3-digit version number of the management firmware that controls the | 
 |         PHY, link, etc. | 
 |     * - ``fw.mgmt.api`` | 
 |       - running | 
 |       - 1.5.1 | 
 |       - 3-digit version number (major.minor.patch) of the API exported over | 
 |         the AdminQ by the management firmware. Used by the driver to | 
 |         identify what commands are supported. Historical versions of the | 
 |         kernel only displayed a 2-digit version number (major.minor). | 
 |     * - ``fw.mgmt.build`` | 
 |       - running | 
 |       - 0x305d955f | 
 |       - Unique identifier of the source for the management firmware. | 
 |     * - ``fw.undi`` | 
 |       - running | 
 |       - 1.2581.0 | 
 |       - Version of the Option ROM containing the UEFI driver. The version is | 
 |         reported in ``major.minor.patch`` format. The major version is | 
 |         incremented whenever a major breaking change occurs, or when the | 
 |         minor version would overflow. The minor version is incremented for | 
 |         non-breaking changes and reset to 1 when the major version is | 
 |         incremented. The patch version is normally 0 but is incremented when | 
 |         a fix is delivered as a patch against an older base Option ROM. | 
 |     * - ``fw.psid.api`` | 
 |       - running | 
 |       - 0.80 | 
 |       - Version defining the format of the flash contents. | 
 |     * - ``fw.bundle_id`` | 
 |       - running | 
 |       - 0x80002ec0 | 
 |       - Unique identifier of the firmware image file that was loaded onto | 
 |         the device. Also referred to as the EETRACK identifier of the NVM. | 
 |     * - ``fw.app.name`` | 
 |       - running | 
 |       - ICE OS Default Package | 
 |       - The name of the DDP package that is active in the device. The DDP | 
 |         package is loaded by the driver during initialization. Each | 
 |         variation of the DDP package has a unique name. | 
 |     * - ``fw.app`` | 
 |       - running | 
 |       - 1.3.1.0 | 
 |       - The version of the DDP package that is active in the device. Note | 
 |         that both the name (as reported by ``fw.app.name``) and version are | 
 |         required to uniquely identify the package. | 
 |     * - ``fw.app.bundle_id`` | 
 |       - running | 
 |       - 0xc0000001 | 
 |       - Unique identifier for the DDP package loaded in the device. Also | 
 |         referred to as the DDP Track ID. Can be used to uniquely identify | 
 |         the specific DDP package. | 
 |     * - ``fw.netlist`` | 
 |       - running | 
 |       - 1.1.2000-6.7.0 | 
 |       - The version of the netlist module. This module defines the device's | 
 |         Ethernet capabilities and default settings, and is used by the | 
 |         management firmware as part of managing link and device | 
 |         connectivity. | 
 |     * - ``fw.netlist.build`` | 
 |       - running | 
 |       - 0xee16ced7 | 
 |       - The first 4 bytes of the hash of the netlist module contents. | 
 |  | 
 | Flash Update | 
 | ============ | 
 |  | 
 | The ``ice`` driver implements support for flash update using the | 
 | ``devlink-flash`` interface. It supports updating the device flash using a | 
 | combined flash image that contains the ``fw.mgmt``, ``fw.undi``, and | 
 | ``fw.netlist`` components. | 
 |  | 
 | .. list-table:: List of supported overwrite modes | 
 |    :widths: 5 95 | 
 |  | 
 |    * - Bits | 
 |      - Behavior | 
 |    * - ``DEVLINK_FLASH_OVERWRITE_SETTINGS`` | 
 |      - Do not preserve settings stored in the flash components being | 
 |        updated. This includes overwriting the port configuration that | 
 |        determines the number of physical functions the device will | 
 |        initialize with. | 
 |    * - ``DEVLINK_FLASH_OVERWRITE_SETTINGS`` and ``DEVLINK_FLASH_OVERWRITE_IDENTIFIERS`` | 
 |      - Do not preserve either settings or identifiers. Overwrite everything | 
 |        in the flash with the contents from the provided image, without | 
 |        performing any preservation. This includes overwriting device | 
 |        identifying fields such as the MAC address, VPD area, and device | 
 |        serial number. It is expected that this combination be used with an | 
 |        image customized for the specific device. | 
 |  | 
 | The ice hardware does not support overwriting only identifiers while | 
 | preserving settings, and thus ``DEVLINK_FLASH_OVERWRITE_IDENTIFIERS`` on its | 
 | own will be rejected. If no overwrite mask is provided, the firmware will be | 
 | instructed to preserve all settings and identifying fields when updating. | 
 |  | 
 | Regions | 
 | ======= | 
 |  | 
 | The ``ice`` driver implements the following regions for accessing internal | 
 | device data. | 
 |  | 
 | .. list-table:: regions implemented | 
 |     :widths: 15 85 | 
 |  | 
 |     * - Name | 
 |       - Description | 
 |     * - ``nvm-flash`` | 
 |       - The contents of the entire flash chip, sometimes referred to as | 
 |         the device's Non Volatile Memory. | 
 |     * - ``device-caps`` | 
 |       - The contents of the device firmware's capabilities buffer. Useful to | 
 |         determine the current state and configuration of the device. | 
 |  | 
 | Users can request an immediate capture of a snapshot via the | 
 | ``DEVLINK_CMD_REGION_NEW`` | 
 |  | 
 | .. code:: shell | 
 |  | 
 |     $ devlink region new pci/0000:01:00.0/nvm-flash snapshot 1 | 
 |     $ devlink region dump pci/0000:01:00.0/nvm-flash snapshot 1 | 
 |  | 
 |     $ devlink region dump pci/0000:01:00.0/nvm-flash snapshot 1 | 
 |     0000000000000000 0014 95dc 0014 9514 0035 1670 0034 db30 | 
 |     0000000000000010 0000 0000 ffff ff04 0029 8c00 0028 8cc8 | 
 |     0000000000000020 0016 0bb8 0016 1720 0000 0000 c00f 3ffc | 
 |     0000000000000030 bada cce5 bada cce5 bada cce5 bada cce5 | 
 |  | 
 |     $ devlink region read pci/0000:01:00.0/nvm-flash snapshot 1 address 0 length 16 | 
 |     0000000000000000 0014 95dc 0014 9514 0035 1670 0034 db30 | 
 |  | 
 |     $ devlink region delete pci/0000:01:00.0/nvm-flash snapshot 1 | 
 |  | 
 |     $ devlink region new pci/0000:01:00.0/device-caps snapshot 1 | 
 |     $ devlink region dump pci/0000:01:00.0/device-caps snapshot 1 | 
 |     0000000000000000 01 00 01 00 00 00 00 00 01 00 00 00 00 00 00 00 | 
 |     0000000000000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000020 02 00 02 01 32 03 00 00 0a 00 00 00 25 00 00 00 | 
 |     0000000000000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000040 04 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000060 05 00 01 00 03 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000080 06 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     00000000000000a0 08 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     00000000000000b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     00000000000000c0 12 00 01 00 01 00 00 00 01 00 01 00 00 00 00 00 | 
 |     00000000000000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     00000000000000e0 13 00 01 00 00 01 00 00 00 00 00 00 00 00 00 00 | 
 |     00000000000000f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000100 14 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000120 15 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000140 16 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000160 17 00 01 00 06 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000180 18 00 01 00 01 00 00 00 01 00 00 00 08 00 00 00 | 
 |     0000000000000190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     00000000000001a0 22 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 | 
 |     00000000000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     00000000000001c0 40 00 01 00 00 08 00 00 08 00 00 00 00 00 00 00 | 
 |     00000000000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     00000000000001e0 41 00 01 00 00 08 00 00 00 00 00 00 00 00 00 00 | 
 |     00000000000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000200 42 00 01 00 00 08 00 00 00 00 00 00 00 00 00 00 | 
 |     0000000000000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 
 |  | 
 |     $ devlink region delete pci/0000:01:00.0/device-caps snapshot 1 |