€•OQŒ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Œ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”…””}”(hhõ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”…””}”hjsbah}”(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 ”…””}”(hjhžhhŸNh Nubhâ)”}”(hŒ``/lib/firmware/``”h]”hŒ/lib/firmware/”…””}”(hj%hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1háhjubhŒc). Drivers may send status updates to inform user space about the progress of the update operation.”…””}”(hjhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h KhhÄhžhubhÃ)”}”(hhh]”(hÈ)”}”(hŒOverwrite Mask”h]”hŒOverwrite Mask”…””}”(hj@hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÇhj=hž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 ”…””}”(hjNhžhhŸNh Nubhâ)”}”(hŒ``devlink-flash``”h]”hŒ devlink-flash”…””}”(hjVhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1háhjNubhŒÐ 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.”…””}”(hjNhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h Khj=hžhubhŒtable”“”)”}”(hhh]”(hÈ)”}”(hŒList of overwrite mask bits”h]”hŒList of overwrite mask bits”…””}”(hjshžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÇhŸh³h KhjpubhŒ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 hjubj¡)”}”(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 hjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥hjÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj¡)”}”(hhh]”(j¦)”}”(hhh]”hØ)”}”(hŒ'``DEVLINK_FLASH_OVERWRITE_IDENTIFIERS``”h]”hâ)”}”(hj#h]”hŒ#DEVLINK_FLASH_OVERWRITE_IDENTIFIERS”…””}”(hj%hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1háhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h K"hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥hjubj¦)”}”(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.”…””}”(hjAhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h K#hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j›hjƒubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jhjpubeh}”(h]”Œid2”ah ]”Œcolwidths-given”ah"]”h$]”h&]”uh1jnhj=hž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.”…””}”(hjphžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h×hŸh³h K(hj=hž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”…””}”(hj‰hž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 ”…””}”(hj9hžhhŸNh Nubhâ)”}”(hŒ``devlink-flash``”h]”hŒ devlink-flash”…””}”(hjAhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1háhj9ubhŒ and ”…””}”(hj9hžhhŸNh Nubhâ)”}”(hŒ``devlink-info``”h]”hŒ devlink-info”…””}”(hjShžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1háhj9ubhŒn functionality, which together allow for implementing vendor-independent automated firmware update facilities.”…””}”(hj9hž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”…””}”(hjohžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1háhjkubhŒ exposes the ”…””}”(hjkhžhhŸNh Nubhâ)”}”(hŒ ``driver``”h]”hŒdriver”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1háhjkubhŒ name and three version groups (”…””}”(hjkhžhhŸNh Nubhâ)”}”(hŒ ``fixed``”h]”hŒfixed”…””}”(hj“hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1háhjkubhŒ, ”…””}”(hjkhžhhŸNh Nubhâ)”}”(hŒ ``running``”h]”hŒrunning”…””}”(hj¥hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1háhjkubhŒ, ”…””}”hjksbhâ)”}”(hŒ ``stored``”h]”hŒstored”…””}”(hj·hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1háhjkubhŒ).”…””}”(hjkhž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”…””}”(hjûhž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”…””}”(hjhž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”…””}”(hj;hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1háhj7ubhŒ and ”…””}”(hj7hžhhŸNh Nubhâ)”}”(hŒ ``stored``”h]”hŒstored”…””}”(hjMhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1háhj7ubhŒ‚ firmware versions identify the firmware running on the device, and firmware which will be activated after reboot or device reset.”…””}”(hj7hž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:”…””}”(hjehž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()”…””}”hjssbah}”(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€j%j"jËjÈuŒ nametypes”}”(jÔˆjÓ‰jƒ‰j%‰jˉuh}”(hÁhÄjÐhÄj€j=j"j†jÈj(jjjpuŒ 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”“”}”j Ks…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)”}”(hhh]”hØ)”}”(hhh]”hŒ3Hyperlink target "devlink-flash" is not referenced.”…””}”hjgsbah}”(h]”h ]”h"]”h$]”h&]”uh1h×hjdubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”h³Œline”Kuh1jbubaŒ transformer”NŒ include_log”]”Œ decoration”Nhžhub.