sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget%/translations/zh_CN/gpu/nova/core/tlvmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/zh_TW/gpu/nova/core/tlvmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/it_IT/gpu/nova/core/tlvmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ja_JP/gpu/nova/core/tlvmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ko_KR/gpu/nova/core/tlvmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/pt_BR/gpu/nova/core/tlvmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/sp_SP/gpu/nova/core/tlvmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h*SPDX-License-Identifier: (GPL-2.0+ OR MIT)h]h*SPDX-License-Identifier: (GPL-2.0+ OR MIT)}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh?/var/lib/git/docbuild/linux/Documentation/gpu/nova/core/tlv.rsthKubhsection)}(hhh](htitle)}(h TLV Tags in Nova Firmware Imagesh]h TLV Tags in Nova Firmware Images}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hNova firmware images use a Type-Length-Value (TLV) format to encapsulate firmware components and metadata. The TLV file begins with a 4-byte "magic" header that contains the string "NVFW". Following the header is a sequence of TLV blocks.h]hNova firmware images use a Type-Length-Value (TLV) format to encapsulate firmware components and metadata. The TLV file begins with a 4-byte “magic” header that contains the string “NVFW”. Following the header is a sequence of TLV blocks.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hEach block consists of a 4-byte tag of ASCII characters, a 4-byte length encoded as a little-endian unsigned integer, and a sequence of bytes, the size of which is equal to the length rounded up to the next multiple of 4.h]hEach block consists of a 4-byte tag of ASCII characters, a 4-byte length encoded as a little-endian unsigned integer, and a sequence of bytes, the size of which is equal to the length rounded up to the next multiple of 4.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hThe driver code that reads the TLV and uses its contents is called the parser. It is the responsibility of the parser to handle missing or malformed tags, lengths, and values in the TLV.h]hThe driver code that reads the TLV and uses its contents is called the parser. It is the responsibility of the parser to handle missing or malformed tags, lengths, and values in the TLV.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh literal_block)}(hX+------+------+------+------+ | 'N' | 'V' | 'F' | 'W' | Magic header +------+------+------+------+ | Tag (4 bytes, ASCII) | TLV block 0 +---------------------------+ | Length (4 bytes, LE) | +---------------------------+ | | | Value (length bytes, | | padded to 4-byte align) | | | +---------------------------+ | Tag (4 bytes, ASCII) | TLV block 1 +---------------------------+ | Length (4 bytes, LE) | +---------------------------+ | | | Value (length bytes, | | padded to 4-byte align) | | | +---------------------------+ | ... | More TLV blocks +---------------------------+h]hX+------+------+------+------+ | 'N' | 'V' | 'F' | 'W' | Magic header +------+------+------+------+ | Tag (4 bytes, ASCII) | TLV block 0 +---------------------------+ | Length (4 bytes, LE) | +---------------------------+ | | | Value (length bytes, | | padded to 4-byte align) | | | +---------------------------+ | Tag (4 bytes, ASCII) | TLV block 1 +---------------------------+ | Length (4 bytes, LE) | +---------------------------+ | | | Value (length bytes, | | padded to 4-byte align) | | | +---------------------------+ | ... | More TLV blocks +---------------------------+}hj sbah}(h]h ]h"]h$]h&]hhuh1j hhhKhhhhubh)}(hhh](h)}(hTags and Lengthh]hTags and Length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK/ubh)}(hlTLV tags are always four-character words, with all letters being upper case. Duplicate tags are not allowed.h]hlTLV tags are always four-character words, with all letters being upper case. Duplicate tags are not allowed.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hjhhubh)}(hFA TLV file may contain additional tags not described in this document.h]hFA TLV file may contain additional tags not described in this document.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjhhubeh}(h]tags-and-lengthah ]h"]tags and lengthah$]h&]uh1hhhhhhhhK/ubh)}(hhh](h)}(hValuesh]hValues}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhhhhhK6ubh)}(hValues are one of four types. The type is not encoded in the format; rather, the parser expects a given tag to have a value of a given type.h]hValues are one of four types. The type is not encoded in the format; rather, the parser expects a given tag to have a value of a given type.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjNhhubhenumerated_list)}(hhh](h list_item)}(h;Integers, encoded in 32-bit or 64-bit little-endian format.h]h)}(hjvh]h;Integers, encoded in 32-bit or 64-bit little-endian format.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjtubah}(h]h ]h"]h$]h&]uh1jrhjohhhhhNubjs)}(hhStrings, encoded as-is and required to be only printable ASCII characters and without a null terminator.h]h)}(hhStrings, encoded as-is and required to be only printable ASCII characters and without a null terminator.h]hhStrings, encoded as-is and required to be only printable ASCII characters and without a null terminator.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjubah}(h]h ]h"]h$]h&]uh1jrhjohhhhhNubjs)}(h#An array of bytes, for binary data.h]h)}(hjh]h#An array of bytes, for binary data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK=hjubah}(h]h ]h"]h$]h&]uh1jrhjohhhhhNubjs)}(hLBoolean, encoded as single byte, with a value of 0 for False or 1 for True. h]h)}(hKBoolean, encoded as single byte, with a value of 0 for False or 1 for True.h]hKBoolean, encoded as single byte, with a value of 0 for False or 1 for True.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK>hjubah}(h]h ]h"]h$]h&]uh1jrhjohhhhhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1jmhjNhhhhhK:ubeh}(h]valuesah ]h"]valuesah$]h&]uh1hhhhhhhhK6ubh)}(hhh](h)}(h Common Tagsh]h Common Tags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKAubh)}(hThese tags are shared across firmware types and carry the same meaning wherever they appear. Unlike the firmware-specific tags below, a common tag is reserved: its meaning is fixed and may never be redefined for a particular firmware type.h]hThese tags are shared across firmware types and carry the same meaning wherever they appear. Unlike the firmware-specific tags below, a common tag is reserved: its meaning is fixed and may never be redefined for a particular firmware type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKBhjhhubhdefinition_list)}(hhh]hdefinition_list_item)}(hU``VERS`` (string) Human-readable firmware version string. Present in all TLV files. h](hterm)}(h``VERS`` (string)h](hliteral)}(h``VERS``h]hVERS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (string)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKHhj ubh definition)}(hhh]h)}(hBHuman-readable firmware version string. Present in all TLV files.h]hBHuman-readable firmware version string. Present in all TLV files.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhj1ubah}(h]h ]h"]h$]h&]uh1j/hj ubeh}(h]h ]h"]h$]h&]uh1j hhhKHhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubh)}(hA TLV image must contain either a single ``BLOB`` tag (firmware embedded inline) or a ``SIZE``/``FILE`` pair (firmware stored in a separate file).h](h)A TLV image must contain either a single }(hjThhhNhNubj)}(h``BLOB``h]hBLOB}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh% tag (firmware embedded inline) or a }(hjThhhNhNubj)}(h``SIZE``h]hSIZE}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh/}(hjThhhNhNubj)}(h``FILE``h]hFILE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh+ pair (firmware stored in a separate file).}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKJhjhhubj)}(hhh](j )}(h{``BLOB`` (bytes) If the firmware microcode binary is stored in the TLV, this tag contains the actual firmware image bytes. h](j)}(h``BLOB`` (bytes)h](j)}(h``BLOB``h]hBLOB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (bytes)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKOhjubj0)}(hhh]h)}(hiIf the firmware microcode binary is stored in the TLV, this tag contains the actual firmware image bytes.h]hiIf the firmware microcode binary is stored in the TLV, this tag contains the actual firmware image bytes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhjubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1j hhhKOhjubj )}(hXK``FILE`` (string) If the firmware binary is stored as a separate file, this tag contains the name of that file, which is required to be in the same directory as the TLV, so no paths are allowed in the filename. This tag is always paired with ``SIZE``, so as to allow the driver to pre-allocate the buffer before loading the file. h](j)}(h``FILE`` (string)h](j)}(h``FILE``h]hFILE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (string)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKVhjubj0)}(hhh]h)}(hX8If the firmware binary is stored as a separate file, this tag contains the name of that file, which is required to be in the same directory as the TLV, so no paths are allowed in the filename. This tag is always paired with ``SIZE``, so as to allow the driver to pre-allocate the buffer before loading the file.h](hIf the firmware binary is stored as a separate file, this tag contains the name of that file, which is required to be in the same directory as the TLV, so no paths are allowed in the filename. This tag is always paired with }(hjhhhNhNubj)}(h``SIZE``h]hSIZE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhO, so as to allow the driver to pre-allocate the buffer before loading the file.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKRhjubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1j hhhKVhjhhubj )}(hXC``SIZE`` (u32) Total size in bytes of the firmware image to be loaded from the companion file named by ``FILE``. This tag is mandatory if ``FILE`` exists, so the size of the firmware image must be known when the TLV is created. If the firmware image is updated and its size changes, then the TLV must be updated with it. h](j)}(h``SIZE`` (u32)h](j)}(h``SIZE``h]hSIZE}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh (u32)}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhK]hj'ubj0)}(hhh]h)}(hX3Total size in bytes of the firmware image to be loaded from the companion file named by ``FILE``. This tag is mandatory if ``FILE`` exists, so the size of the firmware image must be known when the TLV is created. If the firmware image is updated and its size changes, then the TLV must be updated with it.h](hXTotal size in bytes of the firmware image to be loaded from the companion file named by }(hjJhhhNhNubj)}(h``FILE``h]hFILE}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh. This tag is mandatory if }(hjJhhhNhNubj)}(h``FILE``h]hFILE}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh exists, so the size of the firmware image must be known when the TLV is created. If the firmware image is updated and its size changes, then the TLV must be updated with it.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKYhjGubah}(h]h ]h"]h$]h&]uh1j/hj'ubeh}(h]h ]h"]h$]h&]uh1j hhhK]hjhhubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h] common-tagsah ]h"] common tagsah$]h&]uh1hhhhhhhhKAubh)}(hhh](h)}(hGSP Firmware Tagsh]hGSP Firmware Tags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK`ubj)}(hhh](j )}(h?``SIGN`` (bytes) Cryptographic signature for the GSP firmware. h](j)}(h``SIGN`` (bytes)h](j)}(h``SIGN``h]hSIGN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (bytes)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKbhjubj0)}(hhh]h)}(h-Cryptographic signature for the GSP firmware.h]h-Cryptographic signature for the GSP firmware.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhjubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1j hhhKbhjubj )}(hQ``BLID`` (string) The build ID, extracted from the ".note.gnu.build-id" section. h](j)}(h``BLID`` (string)h](j)}(h``BLID``h]hBLID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (string)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKehjubj0)}(hhh]h)}(h>The build ID, extracted from the ".note.gnu.build-id" section.h]hBThe build ID, extracted from the “.note.gnu.build-id” section.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKehjubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1j hhhKehjhhubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]gsp-firmware-tagsah ]h"]gsp firmware tagsah$]h&]uh1hhhhhhhhK`ubh)}(hhh](h)}(hBooter Firmware Tagsh]hBooter Firmware Tags}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hhhhhKhubj)}(hhh](j )}(h``DAOF`` (u32) - ``os_data_offset`` OS data section offset within the firmware image (absolute byte offset). Maps to the DMEM load source. h](j)}(h#``DAOF`` (u32) - ``os_data_offset``h](j)}(h``DAOF``h]hDAOF}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh (u32) - }(hjJhhhNhNubj)}(h``os_data_offset``h]hos_data_offset}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhhhKkhjFubj0)}(hhh]h)}(hfOS data section offset within the firmware image (absolute byte offset). Maps to the DMEM load source.h]hfOS data section offset within the firmware image (absolute byte offset). Maps to the DMEM load source.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKjhjtubah}(h]h ]h"]h$]h&]uh1j/hjFubeh}(h]h ]h"]h$]h&]uh1j hhhKkhjCubj )}(hA``DASZ`` (u32) - ``os_data_size`` OS data section size in bytes. h](j)}(h!``DASZ`` (u32) - ``os_data_size``h](j)}(h``DASZ``h]hDASZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (u32) - }(hjhhhNhNubj)}(h``os_data_size``h]h os_data_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKnhjubj0)}(hhh]h)}(hOS data section size in bytes.h]hOS data section size in bytes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKnhjubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1j hhhKnhjChhubj )}(h``CDOF`` (u32) - ``os_code_offset`` OS code section offset within the firmware image (absolute byte offset). Maps to the non-secure IMEM load source. h](j)}(h#``CDOF`` (u32) - ``os_code_offset``h](j)}(h``CDOF``h]hCDOF}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (u32) - }(hjhhhNhNubj)}(h``os_code_offset``h]hos_code_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKrhjubj0)}(hhh]h)}(hqOS code section offset within the firmware image (absolute byte offset). Maps to the non-secure IMEM load source.h]hqOS code section offset within the firmware image (absolute byte offset). Maps to the non-secure IMEM load source.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKqhj ubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1j hhhKrhjChhubj )}(hA``CDSZ`` (u32) - ``os_code_size`` OS code section size in bytes. h](j)}(h!``CDSZ`` (u32) - ``os_code_size``h](j)}(h``CDSZ``h]hCDSZ}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh (u32) - }(hj+hhhNhNubj)}(h``os_code_size``h]h os_code_size}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhhhKuhj'ubj0)}(hhh]h)}(hOS code section size in bytes.h]hOS code section size in bytes.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhjUubah}(h]h ]h"]h$]h&]uh1j/hj'ubeh}(h]h ]h"]h$]h&]uh1j hhhKuhjChhubj )}(h``PLOC`` (u32) - ``patch_loc`` Signature patch location -- byte offset within the firmware image where the selected signature should be written. h](j)}(h``PLOC`` (u32) - ``patch_loc``h](j)}(h``PLOC``h]hPLOC}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh (u32) - }(hjvhhhNhNubj)}(h ``patch_loc``h]h patch_loc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhhhKyhjrubj0)}(hhh]h)}(hqSignature patch location -- byte offset within the firmware image where the selected signature should be written.h]hqSignature patch location -- byte offset within the firmware image where the selected signature should be written.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhjubah}(h]h ]h"]h$]h&]uh1j/hjrubeh}(h]h ]h"]h$]h&]uh1j hhhKyhjChhubj )}(h``FUSE`` (u32) - ``fuse_version`` Fuse version of the firmware, used with the hardware fuse register to select the correct signature index. h](j)}(h!``FUSE`` (u32) - ``fuse_version``h](j)}(h``FUSE``h]hFUSE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (u32) - }(hjhhhNhNubj)}(h``fuse_version``h]h fuse_version}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhK}hjubj0)}(hhh]h)}(hiFuse version of the firmware, used with the hardware fuse register to select the correct signature index.h]hiFuse version of the firmware, used with the hardware fuse register to select the correct signature index.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK|hjubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1j hhhK}hjChhubj )}(hc``ENID`` (u32) - ``engine_id`` Engine ID mask identifying the falcon engine this firmware targets. h](j)}(h``ENID`` (u32) - ``engine_id``h](j)}(h``ENID``h]hENID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh (u32) - }(hj hhhNhNubj)}(h ``engine_id``h]h engine_id}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubj0)}(hhh]h)}(hCEngine ID mask identifying the falcon engine this firmware targets.h]hCEngine ID mask identifying the falcon engine this firmware targets.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj6ubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1j hhhKhjChhubj )}(hx``UCID`` (u32) - ``ucode_id`` Microcode ID used together with the engine ID to query hardware signature fuse registers. h](j)}(h``UCID`` (u32) - ``ucode_id``h](j)}(h``UCID``h]hUCID}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh (u32) - }(hjWhhhNhNubj)}(h ``ucode_id``h]hucode_id}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhhhKhjSubj0)}(hhh]h)}(hYMicrocode ID used together with the engine ID to query hardware signature fuse registers.h]hYMicrocode ID used together with the engine ID to query hardware signature fuse registers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j/hjSubeh}(h]h ]h"]h$]h&]uh1j hhhKhjChhubj )}(h``A0CO`` (u32) - ``app0_code_offset`` App0 code offset -- start of the secure code region within the firmware image. Used as the IMEM secure section source. h](j)}(h%``A0CO`` (u32) - ``app0_code_offset``h](j)}(h``A0CO``h]hA0CO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (u32) - }(hjhhhNhNubj)}(h``app0_code_offset``h]happ0_code_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubj0)}(hhh]h)}(hvApp0 code offset -- start of the secure code region within the firmware image. Used as the IMEM secure section source.h]hvApp0 code offset -- start of the secure code region within the firmware image. Used as the IMEM secure section source.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1j hhhKhjChhubj )}(h=``A0CS`` (u32) - ``app0_code_size`` App0 code size in bytes. h](j)}(h#``A0CS`` (u32) - ``app0_code_size``h](j)}(h``A0CS``h]hA0CS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (u32) - }(hjhhhNhNubj)}(h``app0_code_size``h]happ0_code_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubj0)}(hhh]h)}(hApp0 code size in bytes.h]hApp0 code size in bytes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1j hhhKhjChhubj )}(hQ``NSIG`` (u32) - ``num_sigs`` Number of signatures included in the ``SIGN`` tag. h](j)}(h``NSIG`` (u32) - ``num_sigs``h](j)}(h``NSIG``h]hNSIG}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh (u32) - }(hj8hhhNhNubj)}(h ``num_sigs``h]hnum_sigs}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhhhKhj4ubj0)}(hhh]h)}(h2Number of signatures included in the ``SIGN`` tag.h](h%Number of signatures included in the }(hjehhhNhNubj)}(h``SIGN``h]hSIGN}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh tag.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjbubah}(h]h ]h"]h$]h&]uh1j/hj4ubeh}(h]h ]h"]h$]h&]uh1j hhhKhjChhubj )}(h``SIGN`` (bytes) Concatenated array of firmware signatures. The size of each signature is the total length of the ``SIGN`` value divided by ``NSIG``. The correct signature is selected using the fuse-version-derived index. h](j)}(h``SIGN`` (bytes)h](j)}(h``SIGN``h]hSIGN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (bytes)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubj0)}(hhh]h)}(hConcatenated array of firmware signatures. The size of each signature is the total length of the ``SIGN`` value divided by ``NSIG``. The correct signature is selected using the fuse-version-derived index.h](haConcatenated array of firmware signatures. The size of each signature is the total length of the }(hjhhhNhNubj)}(h``SIGN``h]hSIGN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh value divided by }(hjhhhNhNubj)}(h``NSIG``h]hNSIG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhI. The correct signature is selected using the fuse-version-derived index.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1j hhhKhjChhubeh}(h]h ]h"]h$]h&]uh1jhj2hhhhhNubeh}(h]booter-firmware-tagsah ]h"]booter firmware tagsah$]h&]uh1hhhhhhhhKhubh)}(hhh](h)}(hGeneric Bootloader Tagsh]hGeneric Bootloader Tags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj)}(hhh](j )}(h``CDSZ`` (u32) - ``code_size`` Size in bytes of the bootloader code to copy from the ``BLOB`` tag and PIO-load into falcon IMEM. h](j)}(h``CDSZ`` (u32) - ``code_size``h](j)}(h``CDSZ``h]hCDSZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (u32) - }(hjhhhNhNubj)}(h ``code_size``h]h code_size}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubj0)}(hhh]h)}(haSize in bytes of the bootloader code to copy from the ``BLOB`` tag and PIO-load into falcon IMEM.h](h6Size in bytes of the bootloader code to copy from the }(hjEhhhNhNubj)}(h``BLOB``h]hBLOB}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh# tag and PIO-load into falcon IMEM.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjBubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1j hhhKhjubj )}(h``STRT`` (u32) - ``start_tag`` Start tag identifying the IMEM block where execution begins. The falcon boot address is derived as ``start_tag << 8``. h](j)}(h``STRT`` (u32) - ``start_tag``h](j)}(h``STRT``h]hSTRT}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh (u32) - }(hjuhhhNhNubj)}(h ``start_tag``h]h start_tag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhhhKhjqubj0)}(hhh]h)}(hwStart tag identifying the IMEM block where execution begins. The falcon boot address is derived as ``start_tag << 8``.h](hdStart tag identifying the IMEM block where execution begins. The falcon boot address is derived as }(hjhhhNhNubj)}(h``start_tag << 8``h]hstart_tag << 8}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j/hjqubeh}(h]h ]h"]h$]h&]uh1j hhhKhjhhubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]generic-bootloader-tagsah ]h"]generic bootloader tagsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hGSP Bootloader Tagsh]hGSP Bootloader Tags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj)}(hhh](j )}(hd``CDOF`` (u32) - ``code_offset`` Offset within the firmware image at which the code section starts. h](j)}(h ``CDOF`` (u32) - ``code_offset``h](j)}(h``CDOF``h]hCDOF}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh (u32) - }(hjhhhNhNubj)}(h``code_offset``h]h code_offset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubj0)}(hhh]h)}(hBOffset within the firmware image at which the code section starts.h]hBOffset within the firmware image at which the code section starts.}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1j hhhKhjubj )}(hd``DAOF`` (u32) - ``data_offset`` Offset within the firmware image at which the data section starts. h](j)}(h ``DAOF`` (u32) - ``data_offset``h](j)}(h``DAOF``h]hDAOF}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj? ubh (u32) - }(hj? hhhNhNubj)}(h``data_offset``h]h data_offset}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj? ubeh}(h]h ]h"]h$]h&]uh1jhhhKhj; ubj0)}(hhh]h)}(hBOffset within the firmware image at which the data section starts.h]hBOffset within the firmware image at which the data section starts.}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhji ubah}(h]h ]h"]h$]h&]uh1j/hj; ubeh}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj )}(hd``MFOF`` (u32) - ``manifest_offset`` Offset within the firmware image at which the manifest starts. h](j)}(h$``MFOF`` (u32) - ``manifest_offset``h](j)}(h``MFOF``h]hMFOF}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh (u32) - }(hj hhhNhNubj)}(h``manifest_offset``h]hmanifest_offset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhhhKhj ubj0)}(hhh]h)}(h>Offset within the firmware image at which the manifest starts.h]h>Offset within the firmware image at which the manifest starts.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j/hj ubeh}(h]h ]h"]h$]h&]uh1j hhhKhjhhubj )}(hF``APPV`` (u32) - ``app_version`` Application version of the firmware. h](j)}(h ``APPV`` (u32) - ``app_version``h](j)}(h``APPV``h]hAPPV}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh (u32) - }(hj hhhNhNubj)}(h``app_version``h]h app_version}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhhhKhj ubj0)}(hhh]h)}(h$Application version of the firmware.h]h$Application version of the firmware.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j/hj ubeh}(h]h ]h"]h$]h&]uh1j hhhKhjhhubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]gsp-bootloader-tagsah ]h"]gsp bootloader tagsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hFMC Firmware Tagsh]hFMC Firmware Tags}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj* hhhhhKubj)}(hhh](j )}(hJ``HASH`` (bytes) SHA-384 hash of the FMC firmware, exactly 48 bytes long. h](j)}(h``HASH`` (bytes)h](j)}(h``HASH``h]hHASH}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB ubh (bytes)}(hjB hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj> ubj0)}(hhh]h)}(h8SHA-384 hash of the FMC firmware, exactly 48 bytes long.h]h8SHA-384 hash of the FMC firmware, exactly 48 bytes long.}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj^ ubah}(h]h ]h"]h$]h&]uh1j/hj> ubeh}(h]h ]h"]h$]h&]uh1j hhhKhj; ubj )}(ho``PKEY`` (bytes) Public key used to verify the FMC firmware. At most 384 bytes (RSA-3072), but may be shorter. h](j)}(h``PKEY`` (bytes)h](j)}(h``PKEY``h]hPKEY}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh (bytes)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj{ ubj0)}(hhh]h)}(h]Public key used to verify the FMC firmware. At most 384 bytes (RSA-3072), but may be shorter.h]h]Public key used to verify the FMC firmware. At most 384 bytes (RSA-3072), but may be shorter.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j/hj{ ubeh}(h]h ]h"]h$]h&]uh1j hhhKhj; hhubj )}(ha``SIGN`` (bytes) Signature of the FMC firmware. At most 384 bytes (RSA-3072), but may be shorter.h](j)}(h``SIGN`` (bytes)h](j)}(h``SIGN``h]hSIGN}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh (bytes)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj ubj0)}(hhh]h)}(hPSignature of the FMC firmware. At most 384 bytes (RSA-3072), but may be shorter.h]hPSignature of the FMC firmware. At most 384 bytes (RSA-3072), but may be shorter.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j/hj ubeh}(h]h ]h"]h$]h&]uh1j hhhKhj; hhubeh}(h]h ]h"]h$]h&]uh1jhj* hhhhhNubeh}(h]fmc-firmware-tagsah ]h"]fmc firmware tagsah$]h&]uh1hhhhhhhhKubeh}(h] tlv-tags-in-nova-firmware-imagesah ]h"] tlv tags in nova firmware imagesah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj. error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j jKjHjjjjj/j,jjjjj' j$ j j u nametypes}(j jKjjj/jjj' j uh}(j hjHjjjNjjj,jjj2jjj$ jj j* u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.