221 lines · plain
1.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)2 3============4Devlink Info5============6 7The ``devlink-info`` mechanism enables device drivers to report device8(hardware and firmware) information in a standard, extensible fashion.9 10The original motivation for the ``devlink-info`` API was twofold:11 12 - making it possible to automate device and firmware management in a fleet13 of machines in a vendor-independent fashion (see also14 :ref:`Documentation/networking/devlink/devlink-flash.rst <devlink_flash>`);15 - name the per component FW versions (as opposed to the crowded ethtool16 version string).17 18``devlink-info`` supports reporting multiple types of objects. Reporting driver19versions is generally discouraged - here, and via any other Linux API.20 21.. list-table:: List of top level info objects22 :widths: 5 9523 24 * - Name25 - Description26 * - ``driver``27 - Name of the currently used device driver, also available through sysfs.28 29 * - ``serial_number``30 - Serial number of the device.31 32 This is usually the serial number of the ASIC, also often available33 in PCI config space of the device in the *Device Serial Number*34 capability.35 36 The serial number should be unique per physical device.37 Sometimes the serial number of the device is only 48 bits long (the38 length of the Ethernet MAC address), and since PCI DSN is 64 bits long39 devices pad or encode additional information into the serial number.40 One example is adding port ID or PCI interface ID in the extra two bytes.41 Drivers should make sure to strip or normalize any such padding42 or interface ID, and report only the part of the serial number43 which uniquely identifies the hardware. In other words serial number44 reported for two ports of the same device or on two hosts of45 a multi-host device should be identical.46 47 * - ``board.serial_number``48 - Board serial number of the device.49 50 This is usually the serial number of the board, often available in51 PCI *Vital Product Data*.52 53 * - ``fixed``54 - Group for hardware identifiers, and versions of components55 which are not field-updatable.56 57 Versions in this section identify the device design. For example,58 component identifiers or the board version reported in the PCI VPD.59 Data in ``devlink-info`` should be broken into the smallest logical60 components, e.g. PCI VPD may concatenate various information61 to form the Part Number string, while in ``devlink-info`` all parts62 should be reported as separate items.63 64 This group must not contain any frequently changing identifiers,65 such as serial numbers. See66 :ref:`Documentation/networking/devlink/devlink-flash.rst <devlink_flash>`67 to understand why.68 69 * - ``running``70 - Group for information about currently running software/firmware.71 These versions often only update after a reboot, sometimes device reset.72 73 * - ``stored``74 - Group for software/firmware versions in device flash.75 76 Stored values must update to reflect changes in the flash even77 if reboot has not yet occurred. If device is not capable of updating78 ``stored`` versions when new software is flashed, it must not report79 them.80 81Each version can be reported at most once in each version group. Firmware82components stored on the flash should feature in both the ``running`` and83``stored`` sections, if device is capable of reporting ``stored`` versions84(see :ref:`Documentation/networking/devlink/devlink-flash.rst <devlink_flash>`).85In case software/firmware components are loaded from the disk (e.g.86``/lib/firmware``) only the running version should be reported via87the kernel API.88 89Generic Versions90================91 92It is expected that drivers use the following generic names for exporting93version information. If a generic name for a given component doesn't exist yet,94driver authors should consult existing driver-specific versions and attempt95reuse. As last resort, if a component is truly unique, using driver-specific96names is allowed, but these should be documented in the driver-specific file.97 98All versions should try to use the following terminology:99 100.. list-table:: List of common version suffixes101 :widths: 10 90102 103 * - Name104 - Description105 * - ``id``, ``revision``106 - Identifiers of designs and revision, mostly used for hardware versions.107 108 * - ``api``109 - Version of API between components. API items are usually of limited110 value to the user, and can be inferred from other versions by the vendor,111 so adding API versions is generally discouraged as noise.112 113 * - ``bundle_id``114 - Identifier of a distribution package which was flashed onto the device.115 This is an attribute of a firmware package which covers multiple versions116 for ease of managing firmware images (see117 :ref:`Documentation/networking/devlink/devlink-flash.rst <devlink_flash>`).118 119 ``bundle_id`` can appear in both ``running`` and ``stored`` versions,120 but it must not be reported if any of the components covered by the121 ``bundle_id`` was changed and no longer matches the version from122 the bundle.123 124board.id125--------126 127Unique identifier of the board design.128 129board.rev130---------131 132Board design revision.133 134asic.id135-------136 137ASIC design identifier.138 139asic.rev140--------141 142ASIC design revision/stepping.143 144board.manufacture145-----------------146 147An identifier of the company or the facility which produced the part.148 149board.part_number150-----------------151 152Part number of the board and its components.153 154fw155--156 157Overall firmware version, often representing the collection of158fw.mgmt, fw.app, etc.159 160fw.mgmt161-------162 163Control unit firmware version. This firmware is responsible for house164keeping tasks, PHY control etc. but not the packet-by-packet data path165operation.166 167fw.mgmt.api168-----------169 170Firmware interface specification version of the software interfaces between171driver and firmware.172 173fw.app174------175 176Data path microcode controlling high-speed packet processing.177 178fw.undi179-------180 181UNDI software, may include the UEFI driver, firmware or both.182 183fw.ncsi184-------185 186Version of the software responsible for supporting/handling the187Network Controller Sideband Interface.188 189fw.psid190-------191 192Unique identifier of the firmware parameter set. These are usually193parameters of a particular board, defined at manufacturing time.194 195fw.roce196-------197 198RoCE firmware version which is responsible for handling roce199management.200 201fw.bundle_id202------------203 204Unique identifier of the entire firmware bundle.205 206fw.bootloader207-------------208 209Version of the bootloader.210 211Future work212===========213 214The following extensions could be useful:215 216 - on-disk firmware file names - drivers list the file names of firmware they217 may need to load onto devices via the ``MODULE_FIRMWARE()`` macro. These,218 however, are per module, rather than per device. It'd be useful to list219 the names of firmware files the driver will try to load for a given device,220 in order of priority.221