€•AŒ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”Œ'/translations/zh_CN/gpu/nova/core/vbios”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/zh_TW/gpu/nova/core/vbios”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/it_IT/gpu/nova/core/vbios”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ja_JP/gpu/nova/core/vbios”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ko_KR/gpu/nova/core/vbios”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/sp_SP/gpu/nova/core/vbios”Œ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Œ*SPDX-License-Identifier: (GPL-2.0+ OR MIT)”h]”hŒ*SPDX-License-Identifier: (GPL-2.0+ OR MIT)”…””}”hh£sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1h¡hhhžhhŸŒA/var/lib/git/docbuild/linux/Documentation/gpu/nova/core/vbios.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒVBIOS”h]”hŒVBIOS”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒ paragraph”“”)”}”(hX­This document describes the layout of the VBIOS image which is a series of concatenated images in the ROM of the GPU. The VBIOS is mirrored onto the BAR 0 space and is read by both Boot ROM firmware (also known as IFR or init-from-rom firmware) on the GPU to bootstrap various microcontrollers (PMU, SEC, GSP) with critical initialization before the driver loads, as well as by the nova-core driver in the kernel to boot the GSP.”h]”hX­This document describes the layout of the VBIOS image which is a series of concatenated images in the ROM of the GPU. The VBIOS is mirrored onto the BAR 0 space and is read by both Boot ROM firmware (also known as IFR or init-from-rom firmware) on the GPU to bootstrap various microcontrollers (PMU, SEC, GSP) with critical initialization before the driver loads, as well as by the nova-core driver in the kernel to boot the GSP.”…””}”(hhËhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhÊ)”}”(hŒëThe format of the images in the ROM follow the "BIOS Specification" part of the PCI specification, with Nvidia-specific extensions. The ROM images of type FwSec are the ones that contain Falcon ucode and what we are mainly looking for.”h]”hŒïThe format of the images in the ROM follow the “BIOS Specification†part of the PCI specification, with Nvidia-specific extensions. The ROM images of type FwSec are the ones that contain Falcon ucode and what we are mainly looking for.”…””}”(hhÙhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hh¶hžhubhÊ)”}”(hŒœAs an example, the following are the different image types that can be found in the VBIOS of an Ampere GA102 GPU which is supported by the nova-core driver.”h]”hŒœAs an example, the following are the different image types that can be found in the VBIOS of an Ampere GA102 GPU which is supported by the nova-core driver.”…””}”(hhçhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒzPciAt Image (Type 0x00) - This is the standard PCI BIOS image, whose name likely comes from the "IBM PC/AT" architecture. ”h]”hÊ)”}”(hŒyPciAt Image (Type 0x00) - This is the standard PCI BIOS image, whose name likely comes from the "IBM PC/AT" architecture.”h]”hŒ}PciAt Image (Type 0x00) - This is the standard PCI BIOS image, whose name likely comes from the “IBM PC/AT†architecture.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khhüubah}”(h]”h ]”h"]”h$]”h&]”uh1húhh÷hžhhŸh³h Nubhû)”}”(hŒ‚EFI Image (Type 0x03) - This is the EFI BIOS image. It contains the UEFI GOP driver that is used to display UEFI graphics output. ”h]”hÊ)”}”(hŒEFI Image (Type 0x03) - This is the EFI BIOS image. It contains the UEFI GOP driver that is used to display UEFI graphics output.”h]”hŒEFI Image (Type 0x03) - This is the EFI BIOS image. It contains the UEFI GOP driver that is used to display UEFI graphics output.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1húhh÷hžhhŸh³h Nubhû)”}”(hŒHFirst FwSec Image (Type 0xE0) - The first FwSec image (Secure Firmware) ”h]”hÊ)”}”(hŒGFirst FwSec Image (Type 0xE0) - The first FwSec image (Secure Firmware)”h]”hŒGFirst FwSec Image (Type 0xE0) - The first FwSec image (Secure Firmware)”…””}”(hj0hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1húhh÷hžhhŸh³h Nubhû)”}”(hXoSecond FwSec Image (Type 0xE0) - The second FwSec image (Secure Firmware) contains various microcodes (also known as an applications) that do a range of different functions. The FWSEC ucode is run in heavy-secure mode and typically runs directly on the GSP (it could be running on a different designated processor in future generations but as of Ampere, it is the GSP). This firmware then loads other firmware ucodes onto the PMU and SEC2 microcontrollers for gfw initialization after GPU reset and before the driver loads (see devinit.rst). The DEVINIT ucode is itself another ucode that is stored in this ROM partition. ”h]”hÊ)”}”(hXnSecond FwSec Image (Type 0xE0) - The second FwSec image (Secure Firmware) contains various microcodes (also known as an applications) that do a range of different functions. The FWSEC ucode is run in heavy-secure mode and typically runs directly on the GSP (it could be running on a different designated processor in future generations but as of Ampere, it is the GSP). This firmware then loads other firmware ucodes onto the PMU and SEC2 microcontrollers for gfw initialization after GPU reset and before the driver loads (see devinit.rst). The DEVINIT ucode is itself another ucode that is stored in this ROM partition.”h]”hXnSecond FwSec Image (Type 0xE0) - The second FwSec image (Secure Firmware) contains various microcodes (also known as an applications) that do a range of different functions. The FWSEC ucode is run in heavy-secure mode and typically runs directly on the GSP (it could be running on a different designated processor in future generations but as of Ampere, it is the GSP). This firmware then loads other firmware ucodes onto the PMU and SEC2 microcontrollers for gfw initialization after GPU reset and before the driver loads (see devinit.rst). The DEVINIT ucode is itself another ucode that is stored in this ROM partition.”…””}”(hjHhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1húhh÷hžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1hõhŸh³h Khh¶hžhubhÊ)”}”(hX¬Once located, the Falcon ucodes have "Application Interfaces" in their data memory (DMEM). For FWSEC, the application interface we use for FWSEC is the "DMEM mapper" interface which is configured to run the "FRTS" command. This command carves out the WPR2 (Write-Protected Region) in VRAM. It then places important power-management data, called 'FRTS', into this region. The WPR2 region is only accessible to heavy-secure ucode.”h]”hX¼Once located, the Falcon ucodes have “Application Interfaces†in their data memory (DMEM). For FWSEC, the application interface we use for FWSEC is the “DMEM mapper†interface which is configured to run the “FRTS†command. This command carves out the WPR2 (Write-Protected Region) in VRAM. It then places important power-management data, called ‘FRTS’, into this region. The WPR2 region is only accessible to heavy-secure ucode.”…””}”(hjdhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K%hh¶hžhubhŒnote”“”)”}”(hŒµIt is not clear why FwSec has 2 different partitions in the ROM, but they both are of type 0xE0 and can be identified as such. This could be subject to change in future generations.”h]”hÊ)”}”(hŒµIt is not clear why FwSec has 2 different partitions in the ROM, but they both are of type 0xE0 and can be identified as such. This could be subject to change in future generations.”h]”hŒµIt is not clear why FwSec has 2 different partitions in the ROM, but they both are of type 0xE0 and can be identified as such. This could be subject to change in future generations.”…””}”(hjxhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K-hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jrhh¶hžhhŸh³h Nubhµ)”}”(hhh]”(hº)”}”(hŒVBIOS ROM Layout”h]”hŒVBIOS ROM Layout”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjŒhžhhŸh³h K2ubhÊ)”}”(hŒQThe VBIOS layout is roughly a series of concatenated images laid out as follows::”h]”hŒPThe VBIOS layout is roughly a series of concatenated images laid out as follows:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K3hjŒhžhubhŒ literal_block”“”)”}”(hXS!+----------------------------------------------------------------------------+ | VBIOS (Starting at ROM_OFFSET: 0x300000) | +----------------------------------------------------------------------------+ | +-----------------------------------------------+ | | | PciAt Image (Type 0x00) | | | +-----------------------------------------------+ | | | +-------------------+ | | | | | ROM Header | | | | | | (Signature 0xAA55)| | | | | +-------------------+ | | | | | rom header's pci_data_struct_offset | | | | | points to the PCIR structure | | | | V | | | | +-------------------+ | | | | | PCIR Structure | | | | | | (Signature "PCIR")| | | | | | last_image: 0x80 | | | | | | image_len: size | | | | | | in 512-byte units | | | | | +-------------------+ | | | | | | | | | | NPDE immediately follows PCIR | | | | V | | | | +-------------------+ | | | | | NPDE Structure | | | | | | (Signature "NPDE")| | | | | | last_image: 0x00 | | | | | +-------------------+ | | | | | | | | +-------------------+ | | | | | BIT Header | (Signature scanning | | | | | (Signature "BIT") | provides the location | | | | +-------------------+ of the BIT table) | | | | | header is | | | | | followed by a table of tokens | | | | V one of which is for falcon data. | | | | +-------------------+ | | | | | BIT Tokens | | | | | | ______________ | | | | | | | Falcon Data | | | | | | | | Token (0x70)|---+------------>------------+--+ | | | | +-------------+ | falcon_data_ptr() | | | | | +-------------------+ | V | | +-----------------------------------------------+ | | | (no gap between images) | | | +-----------------------------------------------+ | | | | EFI Image (Type 0x03) | | | | +-----------------------------------------------+ | | | | Contains the UEFI GOP driver (Graphics Output)| | | | | +-------------------+ | | | | | | ROM Header | | | | | | +-------------------+ | | | | | | PCIR Structure | | | | | | +-------------------+ | | | | | | NPDE Structure | | | | | | +-------------------+ | | | | | | Image data | | | | | | +-------------------+ | | | | +-----------------------------------------------+ | | | (no gap between images) | | | +-----------------------------------------------+ | | | | First FwSec Image (Type 0xE0) | | | | +-----------------------------------------------+ | | | | +-------------------+ | | | | | | ROM Header | | | | | | +-------------------+ | | | | | | PCIR Structure | | | | | | +-------------------+ | | | | | | NPDE Structure | | | | | | +-------------------+ | | | | | | Image data | | | | | | +-------------------+ | | | | +-----------------------------------------------+ | | | (no gap between images) | | | +-----------------------------------------------+ | | | | Second FwSec Image (Type 0xE0) | | | | +-----------------------------------------------+ | | | | +-------------------+ | | | | | | ROM Header | | | | | | +-------------------+ | | | | | | PCIR Structure | | | | | | +-------------------+ | | | | | | NPDE Structure | | | | | | +-------------------+ | | | | | | | | | | +-------------------+ | | | | | | PMU Lookup Table | <- falcon_data_offset <----+ | | | | +-------------+ | pmu_lookup_table | | | | | | Entry 0x85 | | | | | | | | FWSEC_PROD | | | | | | | +-------------+ | | | | | +-------------------+ | | | | | | | | | | points to | | | | V | | | | +-------------------+ | | | | | FalconUCodeDescV3 | <- falcon_ucode_offset | | | | | (FWSEC Firmware) | fwsec_header() | | | | +-------------------+ | | | | | immediately followed by... | | | | V | | | | +----------------------------+ | | | | | Signatures + FWSEC Ucode | | | | | | fwsec_sigs(), fwsec_ucode()| | | | | +----------------------------+ | | | +-----------------------------------------------+ | | | +----------------------------------------------------------------------------+”h]”hXS!+----------------------------------------------------------------------------+ | VBIOS (Starting at ROM_OFFSET: 0x300000) | +----------------------------------------------------------------------------+ | +-----------------------------------------------+ | | | PciAt Image (Type 0x00) | | | +-----------------------------------------------+ | | | +-------------------+ | | | | | ROM Header | | | | | | (Signature 0xAA55)| | | | | +-------------------+ | | | | | rom header's pci_data_struct_offset | | | | | points to the PCIR structure | | | | V | | | | +-------------------+ | | | | | PCIR Structure | | | | | | (Signature "PCIR")| | | | | | last_image: 0x80 | | | | | | image_len: size | | | | | | in 512-byte units | | | | | +-------------------+ | | | | | | | | | | NPDE immediately follows PCIR | | | | V | | | | +-------------------+ | | | | | NPDE Structure | | | | | | (Signature "NPDE")| | | | | | last_image: 0x00 | | | | | +-------------------+ | | | | | | | | +-------------------+ | | | | | BIT Header | (Signature scanning | | | | | (Signature "BIT") | provides the location | | | | +-------------------+ of the BIT table) | | | | | header is | | | | | followed by a table of tokens | | | | V one of which is for falcon data. | | | | +-------------------+ | | | | | BIT Tokens | | | | | | ______________ | | | | | | | Falcon Data | | | | | | | | Token (0x70)|---+------------>------------+--+ | | | | +-------------+ | falcon_data_ptr() | | | | | +-------------------+ | V | | +-----------------------------------------------+ | | | (no gap between images) | | | +-----------------------------------------------+ | | | | EFI Image (Type 0x03) | | | | +-----------------------------------------------+ | | | | Contains the UEFI GOP driver (Graphics Output)| | | | | +-------------------+ | | | | | | ROM Header | | | | | | +-------------------+ | | | | | | PCIR Structure | | | | | | +-------------------+ | | | | | | NPDE Structure | | | | | | +-------------------+ | | | | | | Image data | | | | | | +-------------------+ | | | | +-----------------------------------------------+ | | | (no gap between images) | | | +-----------------------------------------------+ | | | | First FwSec Image (Type 0xE0) | | | | +-----------------------------------------------+ | | | | +-------------------+ | | | | | | ROM Header | | | | | | +-------------------+ | | | | | | PCIR Structure | | | | | | +-------------------+ | | | | | | NPDE Structure | | | | | | +-------------------+ | | | | | | Image data | | | | | | +-------------------+ | | | | +-----------------------------------------------+ | | | (no gap between images) | | | +-----------------------------------------------+ | | | | Second FwSec Image (Type 0xE0) | | | | +-----------------------------------------------+ | | | | +-------------------+ | | | | | | ROM Header | | | | | | +-------------------+ | | | | | | PCIR Structure | | | | | | +-------------------+ | | | | | | NPDE Structure | | | | | | +-------------------+ | | | | | | | | | | +-------------------+ | | | | | | PMU Lookup Table | <- falcon_data_offset <----+ | | | | +-------------+ | pmu_lookup_table | | | | | | Entry 0x85 | | | | | | | | FWSEC_PROD | | | | | | | +-------------+ | | | | | +-------------------+ | | | | | | | | | | points to | | | | V | | | | +-------------------+ | | | | | FalconUCodeDescV3 | <- falcon_ucode_offset | | | | | (FWSEC Firmware) | fwsec_header() | | | | +-------------------+ | | | | | immediately followed by... | | | | V | | | | +----------------------------+ | | | | | Signatures + FWSEC Ucode | | | | | | fwsec_sigs(), fwsec_ucode()| | | | | +----------------------------+ | | | +-----------------------------------------------+ | | | +----------------------------------------------------------------------------+”…””}”hj­sbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1j«hŸh³h K5hjŒhžhubjs)”}”(hŒlThis diagram is created based on an GA-102 Ampere GPU as an example and could vary for future or other GPUs.”h]”hÊ)”}”(hŒlThis diagram is created based on an GA-102 Ampere GPU as an example and could vary for future or other GPUs.”h]”hŒlThis diagram is created based on an GA-102 Ampere GPU as an example and could vary for future or other GPUs.”…””}”(hj¿hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K£hj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒhžhhŸh³h Nubjs)”}”(hŒOFor more explanations of acronyms, see the detailed descriptions in `vbios.rs`.”h]”hÊ)”}”(hjÕh]”(hŒDFor more explanations of acronyms, see the detailed descriptions in ”…””}”(hj×hžhhŸNh NubhŒtitle_reference”“”)”}”(hŒ `vbios.rs`”h]”hŒvbios.rs”…””}”(hjàhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj×ubhŒ.”…””}”(hj×hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K§hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jrhjŒhžhhŸh³h Nubeh}”(h]”Œvbios-rom-layout”ah ]”h"]”Œvbios rom layout”ah$]”h&]”uh1h´hh¶hžhhŸh³h K2ubhµ)”}”(hhh]”(hº)”}”(hŒFalcon data Lookup”h]”hŒFalcon data Lookup”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhžhhŸh³h KªubhÊ)”}”(hŒçA key part of the VBIOS extraction code (vbios.rs) is to find the location of the Falcon data in the VBIOS which contains the PMU lookup table. This lookup table is used to find the required Falcon ucode based on an application ID.”h]”hŒçA key part of the VBIOS extraction code (vbios.rs) is to find the location of the Falcon data in the VBIOS which contains the PMU lookup table. This lookup table is used to find the required Falcon ucode based on an application ID.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K«hjhžhubhÊ)”}”(hX—The location of the PMU lookup table is found by scanning the BIT (`BIOS Information Table`_) tokens for a token with the id `BIT_TOKEN_ID_FALCON_DATA` (0x70) which indicates the offset of the same from the start of the VBIOS image. Unfortunately, the offset does not account for the EFI image located between the PciAt and FwSec images. The `vbios.rs` code compensates for this with appropriate arithmetic.”h]”(hŒCThe location of the PMU lookup table is found by scanning the BIT (”…””}”(hj%hžhhŸNh NubhŒ reference”“”)”}”(hŒ`BIOS Information Table`_”h]”hŒBIOS Information Table”…””}”(hj/hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒBIOS Information Table”Œrefuri”Œ]https://download.nvidia.com/open-gpu-doc/BIOS-Information-Table/1/BIOS-Information-Table.html”uh1j-hj%Œresolved”KubhŒ!) tokens for a token with the id ”…””}”(hj%hžhhŸNh Nubjß)”}”(hŒ`BIT_TOKEN_ID_FALCON_DATA`”h]”hŒBIT_TOKEN_ID_FALCON_DATA”…””}”(hjFhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj%ubhŒ¿ (0x70) which indicates the offset of the same from the start of the VBIOS image. Unfortunately, the offset does not account for the EFI image located between the PciAt and FwSec images. The ”…””}”(hj%hžhhŸNh Nubjß)”}”(hŒ `vbios.rs`”h]”hŒvbios.rs”…””}”(hjXhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj%ubhŒ7 code compensates for this with appropriate arithmetic.”…””}”(hj%hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K¯hjhžhubhŒtarget”“”)”}”(hŒ{.. _`BIOS Information Table`: https://download.nvidia.com/open-gpu-doc/BIOS-Information-Table/1/BIOS-Information-Table.html”h]”h}”(h]”Œbios-information-table”ah ]”h"]”Œbios information table”ah$]”h&]”j?j@uh1jph KµhjhžhhŸh³Œ referenced”Kubeh}”(h]”Œfalcon-data-lookup”ah ]”h"]”Œfalcon data lookup”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kªubeh}”(h]”Œvbios”ah ]”h"]”Œvbios”ah$]”h&]”uh1h´hhhžhhŸh³h Kubeh}”(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”Œentry”Œ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”}”Œbios information table”]”j/asŒrefids”}”Œnameids”}”(jŒj‰jjj„jj{jxuŒ nametypes”}”(jŒ‰j‰j„‰j{ˆuh}”(j‰h¶jjŒjjjxjruŒ 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”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.