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/xe/xe_firmwaremodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/zh_TW/gpu/xe/xe_firmwaremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/it_IT/gpu/xe/xe_firmwaremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/ja_JP/gpu/xe/xe_firmwaremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/ko_KR/gpu/xe/xe_firmwaremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/sp_SP/gpu/xe/xe_firmwaremodnameN 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/xe/xe_firmware.rsthKubhsection)}(hhh](htitle)}(hFirmwareh]hFirmware}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hFirmware Layouth]hFirmware Layout}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hThe CSS-based firmware structure is used for GuC releases on all platforms and for HuC releases up to DG1. Starting from DG2/MTL the HuC uses the GSC layout instead. The CSS firmware layout looks like this::h]hThe CSS-based firmware structure is used for GuC releases on all platforms and for HuC releases up to DG1. Starting from DG2/MTL the HuC uses the GSC layout instead. The CSS firmware layout looks like this:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:10: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhK hhhhubh literal_block)}(hX+======================================================================+ | Firmware blob | +===============+===============+============+============+============+ | CSS header | uCode | RSA key | modulus | exponent | +===============+===============+============+============+============+ <-header size-> <---header size continued -----------> <--- size -----------------------------------------------------------> <-key size-> <-mod size-> <-exp size->h]hX+======================================================================+ | Firmware blob | +===============+===============+============+============+============+ | CSS header | uCode | RSA key | modulus | exponent | +===============+===============+============+============+============+ <-header size-> <---header size continued -----------> <--- size -----------------------------------------------------------> <-key size-> <-mod size-> <-exp size->}hhsbah}(h]h ]h"]h$]h&]hhuh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:10: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhKhhhhubh)}(hXbThe firmware may or may not have modulus key and exponent data. The header, uCode and RSA signature are must-have components that will be used by driver. Length of each components, which is all in dwords, can be found in header. In the case that modulus and exponent are not present in fw, a.k.a truncated image, the length value still appears in header.h]hXbThe firmware may or may not have modulus key and exponent data. The header, uCode and RSA signature are must-have components that will be used by driver. Length of each components, which is all in dwords, can be found in header. In the case that modulus and exponent are not present in fw, a.k.a truncated image, the length value still appears in header.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:10: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhKhhhhubh)}(hJDriver will do some basic fw size validation based on the following rules:h]hJDriver will do some basic fw size validation based on the following rules:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:10: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhK#hhhhubhenumerated_list)}(hhh](h list_item)}(h/Header, uCode and RSA are must-have components.h]h)}(hj#h]h/Header, uCode and RSA are must-have components.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:10: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhK%hj!ubah}(h]h ]h"]h$]h&]uh1jhjubj )}(hdAll firmware components, if they present, are in the sequence illustrated in the layout table above.h]h)}(hdAll firmware components, if they present, are in the sequence illustrated in the layout table above.h]hdAll firmware components, if they present, are in the sequence illustrated in the layout table above.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:10: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhK&hj9ubah}(h]h ]h"]h$]h&]uh1jhjubj )}(h@Length info of each component can be found in header, in dwords.h]h)}(hjTh]h@Length info of each component can be found in header, in dwords.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:10: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhK(hjRubah}(h]h ]h"]h$]h&]uh1jhjubj )}(hModulus and exponent key are not required by driver. They may not appear in fw. So driver will load a truncated firmware in this case. h]h)}(hModulus and exponent key are not required by driver. They may not appear in fw. So driver will load a truncated firmware in this case.h]hModulus and exponent key are not required by driver. They may not appear in fw. So driver will load a truncated firmware in this case.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:10: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhK)hjjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jhhhhhNhNubh)}(hXThe GSC-based firmware structure is used for GSC releases on all platforms and for HuC releases starting from DG2/MTL. Older HuC releases use the CSS-based layout instead. Differently from the CSS headers, the GSC headers uses a directory + entries structure (i.e., there is array of addresses pointing to specific header extensions identified by a name). Although the header structures are the same, some of the entries are specific to GSC while others are specific to HuC. The manifest header entry, which includes basic information about the binary (like the version) is always present, but it is named differently based on the binary type.h]hXThe GSC-based firmware structure is used for GSC releases on all platforms and for HuC releases starting from DG2/MTL. Older HuC releases use the CSS-based layout instead. Differently from the CSS headers, the GSC headers uses a directory + entries structure (i.e., there is array of addresses pointing to specific header extensions identified by a name). Although the header structures are the same, some of the entries are specific to GSC while others are specific to HuC. The manifest header entry, which includes basic information about the binary (like the version) is always present, but it is named differently based on the binary type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:13: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhKYhhhhubh)}(h~The HuC binary starts with a Code Partition Directory (CPD) header. The entries we're interested in for use in the driver are:h]hThe HuC binary starts with a Code Partition Directory (CPD) header. The entries we’re interested in for use in the driver are:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:13: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhKchhhhubj)}(hhh](j )}(h6"HUCP.man": points to the manifest header for the HuC.h]h)}(hjh]h:“HUCP.man”: points to the manifest header for the HuC.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:13: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhKfhjubah}(h]h ]h"]h$]h&]uh1jhjubj )}(hX"huc_fw": points to the FW code. On platforms that support load via DMA and 2-step HuC authentication (i.e. MTL+) this is a full CSS-based binary, while if the GSC is the one doing the load (which only happens on DG2) this section only contains the uCode. h]h)}(h"huc_fw": points to the FW code. On platforms that support load via DMA and 2-step HuC authentication (i.e. MTL+) this is a full CSS-based binary, while if the GSC is the one doing the load (which only happens on DG2) this section only contains the uCode.h]hX“huc_fw”: points to the FW code. On platforms that support load via DMA and 2-step HuC authentication (i.e. MTL+) this is a full CSS-based binary, while if the GSC is the one doing the load (which only happens on DG2) this section only contains the uCode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:13: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhKghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jjjhjjuh1jhhhhhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:13: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhNubh)}(h3The GSC-based HuC firmware layout looks like this::h]h2The GSC-based HuC firmware layout looks like this:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:13: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhKlhhhhubh)}(hX+================================================+ | CPD Header | +================================================+ | CPD entries[] | | entry1 | | ... | | entryX | | "HUCP.man" | | ... | | offset >----------------------------|------o | ... | | | entryY | | | "huc_fw" | | | ... | | | offset >----------------------------|----------o +================================================+ | | | | +================================================+ | | | Manifest Header |<-----o | | ... | | | FW version | | | ... | | +================================================+ | | +================================================+ | | FW binary |<---------o | CSS (MTL+ only) | | uCode | | RSA Key (MTL+ only) | | ... | +================================================+h]hX+================================================+ | CPD Header | +================================================+ | CPD entries[] | | entry1 | | ... | | entryX | | "HUCP.man" | | ... | | offset >----------------------------|------o | ... | | | entryY | | | "huc_fw" | | | ... | | | offset >----------------------------|----------o +================================================+ | | | | +================================================+ | | | Manifest Header |<-----o | | ... | | | FW version | | | ... | | +================================================+ | | +================================================+ | | FW binary |<---------o | CSS (MTL+ only) | | uCode | | RSA Key (MTL+ only) | | ... | +================================================+}hjsbah}(h]h ]h"]h$]h&]hhuh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:13: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhKnhhhhubh)}(hXThe GSC binary starts instead with a layout header, which contains the locations of the various partitions of the binary. The one we're interested in is the boot1 partition, where we can find a BPDT header followed by entries, one of which points to the RBE sub-section of the partition, which contains the CPD. The GSC blob does not contain a CSS-based binary, so we only need to look for the manifest, which is under the "RBEP.man" CPD entry. Note that we have no need to find where the actual FW code is inside the image because the GSC ROM will itself parse the headers to find it and load it. The GSC firmware header layout looks like this::h]hXThe GSC binary starts instead with a layout header, which contains the locations of the various partitions of the binary. The one we’re interested in is the boot1 partition, where we can find a BPDT header followed by entries, one of which points to the RBE sub-section of the partition, which contains the CPD. The GSC blob does not contain a CSS-based binary, so we only need to look for the manifest, which is under the “RBEP.man” CPD entry. Note that we have no need to find where the actual FW code is inside the image because the GSC ROM will itself parse the headers to find it and load it. The GSC firmware header layout looks like this:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:13: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhKhhhhubh)}(hXu+================================================+ | Layout Pointers | | ... | | Boot1 offset >---------------------------|------o | ... | | +================================================+ | | +================================================+ | | BPDT header |<-----o +================================================+ | BPDT entries[] | | entry1 | | ... | | entryX | | type == GSC_RBE | | offset >-----------------------------|------o | ... | | +================================================+ | | +================================================+ | | CPD Header |<-----o +================================================+ | CPD entries[] | | entry1 | | ... | | entryX | | "RBEP.man" | | ... | | offset >----------------------------|------o | ... | | +================================================+ | | +================================================+ | | Manifest Header |<-----o | ... | | FW version | | ... | | Security version | | ... | +================================================+h]hXu+================================================+ | Layout Pointers | | ... | | Boot1 offset >---------------------------|------o | ... | | +================================================+ | | +================================================+ | | BPDT header |<-----o +================================================+ | BPDT entries[] | | entry1 | | ... | | entryX | | type == GSC_RBE | | offset >-----------------------------|------o | ... | | +================================================+ | | +================================================+ | | CPD Header |<-----o +================================================+ | CPD entries[] | | entry1 | | ... | | entryX | | "RBEP.man" | | ... | | offset >----------------------------|------o | ... | | +================================================+ | | +================================================+ | | Manifest Header |<-----o | ... | | FW version | | ... | | Security version | | ... | +================================================+}hjsbah}(h]h ]h"]h$]h&]hhuh1hhd/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:13: ./drivers/gpu/drm/xe/xe_uc_fw_abi.hhKhhhhubeh}(h]firmware-layoutah ]h"]firmware layoutah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h2Write Once Protected Content Memory (WOPCM) Layouth]h2Write Once Protected Content Memory (WOPCM) Layout}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hhhhhKubh)}(hThe layout of the WOPCM will be fixed after writing to GuC WOPCM size and offset registers whose values are calculated and determined by HuC/GuC firmware size and set of hardware requirements/restrictions as shown below:h]hThe layout of the WOPCM will be fixed after writing to GuC WOPCM size and offset registers whose values are calculated and determined by HuC/GuC firmware size and set of hardware requirements/restrictions as shown below:}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:19: ./drivers/gpu/drm/xe/xe_wopcm.chKhj+hhubh)}(hX +=========> +====================+ <== WOPCM Top ^ | HW contexts RSVD | | +===> +====================+ <== GuC WOPCM Top | ^ | | | | | | | | | | | GuC | | | WOPCM | | | Size +--------------------+ WOPCM | | GuC FW RSVD | | | +--------------------+ | | | GuC Stack RSVD | | | +------------------- + | v | GuC WOPCM RSVD | | +===> +====================+ <== GuC WOPCM base | | WOPCM RSVD | | +------------------- + <== HuC Firmware Top v | HuC FW | +=========> +====================+ <== WOPCM Baseh]hX +=========> +====================+ <== WOPCM Top ^ | HW contexts RSVD | | +===> +====================+ <== GuC WOPCM Top | ^ | | | | | | | | | | | GuC | | | WOPCM | | | Size +--------------------+ WOPCM | | GuC FW RSVD | | | +--------------------+ | | | GuC Stack RSVD | | | +------------------- + | v | GuC WOPCM RSVD | | +===> +====================+ <== GuC WOPCM base | | WOPCM RSVD | | +------------------- + <== HuC Firmware Top v | HuC FW | +=========> +====================+ <== WOPCM Base}hjKsbah}(h]h ]h"]h$]h&]hhuh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:19: ./drivers/gpu/drm/xe/xe_wopcm.chKhj+hhubh)}(hGuC accessible WOPCM starts at GuC WOPCM base and ends at GuC WOPCM top. The top part of the WOPCM is reserved for hardware contexts (e.g. RC6 context).h]hGuC accessible WOPCM starts at GuC WOPCM base and ends at GuC WOPCM top. The top part of the WOPCM is reserved for hardware contexts (e.g. RC6 context).}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:19: ./drivers/gpu/drm/xe/xe_wopcm.chK,hj+hhubeh}(h]0write-once-protected-content-memory-wopcm-layoutah ]h"]2write once protected content memory (wopcm) layoutah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h GuC CTB Blobh]h GuC CTB Blob}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhhhhhKubh)}(hAWe allocate single blob to hold both CTB descriptors and buffers:h]hAWe allocate single blob to hold both CTB descriptors and buffers:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:25: ./drivers/gpu/drm/xe/xe_guc_ct.chKzhjqhhubh block_quote)}(hXZ+--------+-----------------------------------------------+------+ | offset | contents | size | +========+===============================================+======+ | 0x0000 | H2G CTB Descriptor (send) | | +--------+-----------------------------------------------+ 4K | | 0x0800 | G2H CTB Descriptor (g2h) | | +--------+-----------------------------------------------+------+ | 0x1000 | H2G CT Buffer (send) | n*4K | | | | | +--------+-----------------------------------------------+------+ | 0x1000 | G2H CT Buffer (g2h) | m*4K | | + n*4K | | | +--------+-----------------------------------------------+------+ h]htable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK/uh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:25: ./drivers/gpu/drm/xe/xe_guc_ct.chK}hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hcontentsh]hcontents}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK}hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubhtbody)}(hhh](j)}(hhh](j)}(hhh]h)}(h0x0000h]h0x0000}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:25: ./drivers/gpu/drm/xe/xe_guc_ct.chKhj'ubah}(h]h ]h"]h$]h&]uh1jhj$ubj)}(hhh]h)}(hH2G CTB Descriptor (send)h]hH2G CTB Descriptor (send)}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKhj?ubah}(h]h ]h"]h$]h&]uh1jhj$ubj)}(hhh]h)}(h4Kh]h4K}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:25: ./drivers/gpu/drm/xe/xe_guc_ct.chKhjVubah}(h]h ]h"]h$]h&]morerowsKuh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj!ubj)}(hhh](j)}(hhh]h)}(h0x0800h]h0x0800}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:25: ./drivers/gpu/drm/xe/xe_guc_ct.chKhjxubah}(h]h ]h"]h$]h&]uh1jhjuubj)}(hhh]h)}(hG2H CTB Descriptor (g2h)h]hG2H CTB Descriptor (g2h)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhj!ubj)}(hhh](j)}(hhh]h)}(h0x1000h]h0x1000}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:25: ./drivers/gpu/drm/xe/xe_guc_ct.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hH2G CT Buffer (send)h]hH2G CT Buffer (send)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hn*4Kh]hn*4K}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!ubj)}(hhh](j)}(hhh]h)}(h 0x1000 + n*4Kh]h 0x1000 + n*4K}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:25: ./drivers/gpu/drm/xe/xe_guc_ct.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hG2H CT Buffer (g2h)h]hG2H CT Buffer (g2h)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hm*4Kh]hm*4K}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:25: ./drivers/gpu/drm/xe/xe_guc_ct.chK|hjqhhubh)}(hXSize of each ``CT Buffer`` must be multiple of 4K. We don't expect too many messages in flight at any time, unless we are using the GuC submission. In that case each request requires a minimum 2 dwords which gives us a maximum 256 queue'd requests. Hopefully this enough space to avoid backpressure on the driver. We increase the size of the receive buffer (relative to the send) to ensure a G2H response CTB has a landing spot.h](h Size of each }(hjehhhNhNubhliteral)}(h ``CT Buffer``h]h CT Buffer}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jmhjeubhX must be multiple of 4K. We don’t expect too many messages in flight at any time, unless we are using the GuC submission. In that case each request requires a minimum 2 dwords which gives us a maximum 256 queue’d requests. Hopefully this enough space to avoid backpressure on the driver. We increase the size of the receive buffer (relative to the send) to ensure a G2H response CTB has a landing spot.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:25: ./drivers/gpu/drm/xe/xe_guc_ct.chKhjqhhubh)}(hXIn addition to submissions, the G2H buffer needs to be able to hold enough space for recoverable page fault notifications. The number of page faults is interrupt driven and can be as much as the number of compute resources available. However, most of the actual work for these is in a separate page fault worker thread. Therefore we only need to make sure the queue has enough space to handle all of the submissions and responses and an extra buffer for incoming page faults.h]hXIn addition to submissions, the G2H buffer needs to be able to hold enough space for recoverable page fault notifications. The number of page faults is interrupt driven and can be as much as the number of compute resources available. However, most of the actual work for these is in a separate page fault worker thread. Therefore we only need to make sure the queue has enough space to handle all of the submissions and responses and an extra buffer for incoming page faults.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:25: ./drivers/gpu/drm/xe/xe_guc_ct.chKhjqhhubeh}(h] guc-ctb-blobah ]h"] guc ctb blobah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hGuC Power Conservation (PC)h]hGuC Power Conservation (PC)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hGuC Power Conservation (PC) supports multiple features for the most efficient and performing use of the GT when GuC submission is enabled, including frequency management, Render-C states management, and various algorithms for power balancing.h]hGuC Power Conservation (PC) supports multiple features for the most efficient and performing use of the GT when GuC submission is enabled, including frequency management, Render-C states management, and various algorithms for power balancing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:31: ./drivers/gpu/drm/xe/xe_guc_pc.chK;hjhhubh)}(hSingle Loop Power Conservation (SLPC) is the name given to the suite of connected power conservation features in the GuC firmware. The firmware exposes a programming interface to the host for the control of SLPC.h]hSingle Loop Power Conservation (SLPC) is the name given to the suite of connected power conservation features in the GuC firmware. The firmware exposes a programming interface to the host for the control of SLPC.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_firmware:31: ./drivers/gpu/drm/xe/xe_guc_pc.chK@hjhhubeh}(h]guc-power-conservation-pcah ]h"]guc power conservation (pc)ah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Internal APIh]h Internal API}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK#ubh)}(hTODOh]hTODO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjhhubeh}(h] internal-apiah ]h"] internal apiah$]h&]uh1hhhhhhhhK#ubeh}(h]firmwareah ]h"]firmwareah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksjfootnote_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_sourceh _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}(jjj(j%jnjkjjjjjju nametypes}(jj(jnjjjuh}(jhj%hjkj+jjqjjjju 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.