€•2RŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ4/translations/zh_CN/networking/devlink/devlink-flash”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/zh_TW/networking/devlink/devlink-flash”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/it_IT/networking/devlink/devlink-flash”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/ja_JP/networking/devlink/devlink-flash”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/ko_KR/networking/devlink/devlink-flash”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/pt_BR/networking/devlink/devlink-flash”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/sp_SP/networking/devlink/devlink-flash”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ7SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)”h]”hŒ7SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/networking/devlink/devlink-flash.rst”h´KubhŒtarget”“”)”}”(hŒ.. _devlink_flash:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œ devlink-flash”uh1hÈh´Khhh²hh³hÇubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ Devlink Flash”h]”hŒ Devlink Flash”…””}”(hhÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhhØh²hh³hÇh´KubhŒ paragraph”“”)”}”(hŒÖThe ``devlink-flash`` API allows updating device firmware. It replaces the older ``ethtool-flash`` mechanism, and doesn't require taking any networking locks in the kernel to perform the flash update. Example use::”h]”(hŒThe ”…””}”(hhíh²hh³Nh´NubhŒliteral”“”)”}”(hŒ``devlink-flash``”h]”hŒ devlink-flash”…””}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhhíubhŒ< API allows updating device firmware. It replaces the older ”…””}”(hhíh²hh³Nh´Nubhö)”}”(hŒ``ethtool-flash``”h]”hŒ ethtool-flash”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhhíubhŒu mechanism, and doesn’t require taking any networking locks in the kernel to perform the flash update. Example use:”…””}”(hhíh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K hhØh²hubhŒ literal_block”“”)”}”(hŒ8$ devlink dev flash pci/0000:05:00.0 file flash-boot.bin”h]”hŒ8$ devlink dev flash pci/0000:05:00.0 file flash-boot.bin”…””}”hj#sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j!h³hÇh´K hhØh²hubhì)”}”(hŒÆNote that the file name is a path relative to the firmware loading path (usually ``/lib/firmware/``). Drivers may send status updates to inform user space about the progress of the update operation.”h]”(hŒQNote that the file name is a path relative to the firmware loading path (usually ”…””}”(hj1h²hh³Nh´Nubhö)”}”(hŒ``/lib/firmware/``”h]”hŒ/lib/firmware/”…””}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj1ubhŒc). Drivers may send status updates to inform user space about the progress of the update operation.”…””}”(hj1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KhhØh²hubh×)”}”(hhh]”(hÜ)”}”(hŒOverwrite Mask”h]”hŒOverwrite Mask”…””}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjQh²hh³hÇh´Kubhì)”}”(hŒåThe ``devlink-flash`` command allows optionally specifying a mask indicating how the device should handle subsections of flash components when updating. This mask indicates the set of sections which are allowed to be overwritten.”h]”(hŒThe ”…””}”(hjbh²hh³Nh´Nubhö)”}”(hŒ``devlink-flash``”h]”hŒ devlink-flash”…””}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjbubhŒÐ command allows optionally specifying a mask indicating how the device should handle subsections of flash components when updating. This mask indicates the set of sections which are allowed to be overwritten.”…””}”(hjbh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KhjQh²hubhŒtable”“”)”}”(hhh]”(hÜ)”}”(hŒList of overwrite mask bits”h]”hŒList of overwrite mask bits”…””}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛh³hÇh´Khj„ubhŒtgroup”“”)”}”(hhh]”(hŒcolspec”“”)”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jšhj—ubj›)”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”j¥K_uh1jšhj—ubhŒtbody”“”)”}”(hhh]”(hŒrow”“”)”}”(hhh]”(hŒentry”“”)”}”(hhh]”hì)”}”(hŒName”h]”hŒName”…””}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Khj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj¶ubjº)”}”(hhh]”hì)”}”(hŒ Description”h]”hŒ Description”…””}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j´hj±ubjµ)”}”(hhh]”(jº)”}”(hhh]”hì)”}”(hŒ$``DEVLINK_FLASH_OVERWRITE_SETTINGS``”h]”hö)”}”(hj÷h]”hŒ DEVLINK_FLASH_OVERWRITE_SETTINGS”…””}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Khjòubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hjïubjº)”}”(hhh]”hì)”}”(hŒ‚Indicates that the device should overwrite settings in the components being updated with the settings found in the provided image.”h]”hŒ‚Indicates that the device should overwrite settings in the components being updated with the settings found in the provided image.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hjïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j´hj±ubjµ)”}”(hhh]”(jº)”}”(hhh]”hì)”}”(hŒ'``DEVLINK_FLASH_OVERWRITE_IDENTIFIERS``”h]”hö)”}”(hj7h]”hŒ#DEVLINK_FLASH_OVERWRITE_IDENTIFIERS”…””}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K"hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj/ubjº)”}”(hhh]”hì)”}”(hŒÑIndicates that the device should overwrite identifiers in the components being updated with the identifiers found in the provided image. This includes MAC addresses, serial IDs, and similar device identifiers.”h]”hŒÑIndicates that the device should overwrite identifiers in the components being updated with the identifiers found in the provided image. This includes MAC addresses, serial IDs, and similar device identifiers.”…””}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K#hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j´hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj—ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j•hj„ubeh}”(h]”Œid2”ah ]”Œcolwidths-given”ah"]”h$]”h&]”uh1j‚hjQh²hh³Nh´Nubhì)”}”(hXMultiple overwrite bits may be combined and requested together. If no bits are provided, it is expected that the device only update firmware binaries in the components being updated. Settings and identifiers are expected to be preserved across the update. A device may not support every combination and the driver for such a device must reject any combination which cannot be faithfully implemented.”h]”hXMultiple overwrite bits may be combined and requested together. If no bits are provided, it is expected that the device only update firmware binaries in the components being updated. Settings and identifiers are expected to be preserved across the update. A device may not support every combination and the driver for such a device must reject any combination which cannot be faithfully implemented.”…””}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K(hjQh²hubeh}”(h]”Œoverwrite-mask”ah ]”h"]”Œoverwrite mask”ah$]”h&]”uh1hÖhhØh²hh³hÇh´Kubh×)”}”(hhh]”(hÜ)”}”(hŒFirmware Loading”h]”hŒFirmware Loading”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjšh²hh³hÇh´K0ubhì)”}”(hX6Devices which require firmware to operate usually store it in non-volatile memory on the board, e.g. flash. Some devices store only basic firmware on the board, and the driver loads the rest from disk during probing. ``devlink-info`` allows users to query firmware information (loaded components and versions).”h]”(hŒÙDevices which require firmware to operate usually store it in non-volatile memory on the board, e.g. flash. Some devices store only basic firmware on the board, and the driver loads the rest from disk during probing. ”…””}”(hj«h²hh³Nh´Nubhö)”}”(hŒ``devlink-info``”h]”hŒ devlink-info”…””}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhj«ubhŒM allows users to query firmware information (loaded components and versions).”…””}”(hj«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K2hjšh²hubhì)”}”(hX#In other cases the device can both store the image on the board, load from disk, or automatically flash a new image from disk. The ``fw_load_policy`` devlink parameter can be used to control this behavior (:ref:`Documentation/networking/devlink/devlink-params.rst `).”h]”(hŒƒIn other cases the device can both store the image on the board, load from disk, or automatically flash a new image from disk. The ”…””}”(hjËh²hh³Nh´Nubhö)”}”(hŒ``fw_load_policy``”h]”hŒfw_load_policy”…””}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjËubhŒ9 devlink parameter can be used to control this behavior (”…””}”(hjËh²hh³Nh´Nubh)”}”(hŒS:ref:`Documentation/networking/devlink/devlink-params.rst `”h]”hŒinline”“”)”}”(hjçh]”hŒ3Documentation/networking/devlink/devlink-params.rst”…””}”(hjëh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1jéhjåubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ networking/devlink/devlink-flash”Œ refdomain”jöŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œdevlink_params_generic”uh1hh³hÇh´K8hjËubhŒ).”…””}”(hjËh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K8hjšh²hubhì)”}”(hŒ@On-disk firmware files are usually stored in ``/lib/firmware/``.”h]”(hŒ-On-disk firmware files are usually stored in ”…””}”(hjh²hh³Nh´Nubhö)”}”(hŒ``/lib/firmware/``”h]”hŒ/lib/firmware/”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubhŒ.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´K=hjšh²hubeh}”(h]”Œfirmware-loading”ah ]”h"]”Œfirmware loading”ah$]”h&]”uh1hÖhhØh²hh³hÇh´K0ubh×)”}”(hhh]”(hÜ)”}”(hŒFirmware Version Management”h]”hŒFirmware Version Management”…””}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhj<h²hh³hÇh´K@ubhì)”}”(hŒ¶Drivers are expected to implement ``devlink-flash`` and ``devlink-info`` functionality, which together allow for implementing vendor-independent automated firmware update facilities.”h]”(hŒ"Drivers are expected to implement ”…””}”(hjMh²hh³Nh´Nubhö)”}”(hŒ``devlink-flash``”h]”hŒ devlink-flash”…””}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjMubhŒ and ”…””}”(hjMh²hh³Nh´Nubhö)”}”(hŒ``devlink-info``”h]”hŒ devlink-info”…””}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjMubhŒn functionality, which together allow for implementing vendor-independent automated firmware update facilities.”…””}”(hjMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KBhj<h²hubhì)”}”(hŒk``devlink-info`` exposes the ``driver`` name and three version groups (``fixed``, ``running``, ``stored``).”h]”(hö)”}”(hŒ``devlink-info``”h]”hŒ devlink-info”…””}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubhŒ exposes the ”…””}”(hjh²hh³Nh´Nubhö)”}”(hŒ ``driver``”h]”hŒdriver”…””}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubhŒ name and three version groups (”…””}”(hjh²hh³Nh´Nubhö)”}”(hŒ ``fixed``”h]”hŒfixed”…””}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubhŒ, ”…””}”(hjh²hh³Nh´Nubhö)”}”(hŒ ``running``”h]”hŒrunning”…””}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubhŒ, ”…””}”hjsbhö)”}”(hŒ ``stored``”h]”hŒstored”…””}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjubhŒ).”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KFhj<h²hubhì)”}”(hX&The ``driver`` attribute and ``fixed`` group identify the specific device design, e.g. for looking up applicable firmware updates. This is why ``serial_number`` is not part of the ``fixed`` versions (even though it is fixed) - ``fixed`` versions should identify the design, not a single device.”h]”(hŒThe ”…””}”(hjãh²hh³Nh´Nubhö)”}”(hŒ ``driver``”h]”hŒdriver”…””}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjãubhŒ attribute and ”…””}”(hjãh²hh³Nh´Nubhö)”}”(hŒ ``fixed``”h]”hŒfixed”…””}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjãubhŒi group identify the specific device design, e.g. for looking up applicable firmware updates. This is why ”…””}”(hjãh²hh³Nh´Nubhö)”}”(hŒ``serial_number``”h]”hŒ serial_number”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjãubhŒ is not part of the ”…””}”(hjãh²hh³Nh´Nubhö)”}”(hŒ ``fixed``”h]”hŒfixed”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjãubhŒ& versions (even though it is fixed) - ”…””}”(hjãh²hh³Nh´Nubhö)”}”(hŒ ``fixed``”h]”hŒfixed”…””}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjãubhŒ: versions should identify the design, not a single device.”…””}”(hjãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KIhj<h²hubhì)”}”(hŒœ``running`` and ``stored`` firmware versions identify the firmware running on the device, and firmware which will be activated after reboot or device reset.”h]”(hö)”}”(hŒ ``running``”h]”hŒrunning”…””}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjKubhŒ and ”…””}”(hjKh²hh³Nh´Nubhö)”}”(hŒ ``stored``”h]”hŒstored”…””}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjKubhŒ‚ firmware versions identify the firmware running on the device, and firmware which will be activated after reboot or device reset.”…””}”(hjKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KOhj<h²hubhì)”}”(hŒŽThe firmware update agent is supposed to be able to follow this simple algorithm to update firmware contents, regardless of the device vendor:”h]”hŒŽThe firmware update agent is supposed to be able to follow this simple algorithm to update firmware contents, regardless of the device vendor:”…””}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´KShj<h²hubj")”}”(hX0# Get unique HW design identifier $hw_id = devlink-dev-info['fixed'] # Find out which FW flash we want to use for this NIC $want_flash_vers = some-db-backed.lookup($hw_id, 'flash') # Update flash if necessary if $want_flash_vers != devlink-dev-info['stored']: $file = some-db-backed.download($hw_id, 'flash') devlink-dev-flash($file) # Find out the expected overall firmware versions $want_fw_vers = some-db-backed.lookup($hw_id, 'all') # Update on-disk file if necessary if $want_fw_vers != devlink-dev-info['running']: $file = some-db-backed.download($hw_id, 'disk') write($file, '/lib/firmware/') # Try device reset, if available if $want_fw_vers != devlink-dev-info['running']: devlink-reset() # Reboot, if reset wasn't enough if $want_fw_vers != devlink-dev-info['running']: reboot()”h]”hX0# Get unique HW design identifier $hw_id = devlink-dev-info['fixed'] # Find out which FW flash we want to use for this NIC $want_flash_vers = some-db-backed.lookup($hw_id, 'flash') # Update flash if necessary if $want_flash_vers != devlink-dev-info['stored']: $file = some-db-backed.download($hw_id, 'flash') devlink-dev-flash($file) # Find out the expected overall firmware versions $want_fw_vers = some-db-backed.lookup($hw_id, 'all') # Update on-disk file if necessary if $want_fw_vers != devlink-dev-info['running']: $file = some-db-backed.download($hw_id, 'disk') write($file, '/lib/firmware/') # Try device reset, if available if $want_fw_vers != devlink-dev-info['running']: devlink-reset() # Reboot, if reset wasn't enough if $want_fw_vers != devlink-dev-info['running']: reboot()”…””}”hj‡sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒforce”‰Œlanguage”Œsh”Œhighlight_args”}”uh1j!h³hÇh´KVhj<h²hubhì)”}”(hŒNote that each reference to ``devlink-dev-info`` in this pseudo-code is expected to fetch up-to-date information from the kernel.”h]”(hŒNote that each reference to ”…””}”(hjšh²hh³Nh´Nubhö)”}”(hŒ``devlink-dev-info``”h]”hŒdevlink-dev-info”…””}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjšubhŒQ in this pseudo-code is expected to fetch up-to-date information from the kernel.”…””}”(hjšh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Kshj<h²hubhì)”}”(hX For the convenience of identifying firmware files some vendors add ``bundle_id`` information to the firmware versions. This meta-version covers multiple per-component versions and can be used e.g. in firmware file names (all component versions could get rather long.)”h]”(hŒCFor the convenience of identifying firmware files some vendors add ”…””}”(hjºh²hh³Nh´Nubhö)”}”(hŒ ``bundle_id``”h]”hŒ bundle_id”…””}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hõhjºubhŒ» information to the firmware versions. This meta-version covers multiple per-component versions and can be used e.g. in firmware file names (all component versions could get rather long.)”…””}”(hjºh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÇh´Kvhj<h²hubeh}”(h]”Œfirmware-version-management”ah ]”h"]”Œfirmware version management”ah$]”h&]”uh1hÖhhØh²hh³hÇh´K@ubeh}”(h]”(hÕŒid1”eh ]”h"]”(Œ devlink flash”Œ devlink_flash”eh$]”h&]”uh1hÖhhh²hh³hÇh´KŒexpect_referenced_by_name”}”jèhÊsŒexpect_referenced_by_id”}”hÕhÊsubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hÛNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”j¹Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”hÕ]”hÊasŒnameids”}”(jèhÕjçjäj—j”j9j6jßjÜuŒ nametypes”}”(jèˆjç‰j—‰j9‰j߉uh}”(hÕhØjähØj”jQj6jšjÜj<j~j„uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jKs…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)”}”(hhh]”hì)”}”(hhh]”hŒ3Hyperlink target "devlink-flash" is not referenced.”…””}”hj{sbah}”(h]”h ]”h"]”h$]”h&]”uh1hëhjxubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1jvubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.