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_pcodemodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/zh_TW/gpu/xe/xe_pcodemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/it_IT/gpu/xe/xe_pcodemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ja_JP/gpu/xe/xe_pcodemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ko_KR/gpu/xe/xe_pcodemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/pt_BR/gpu/xe/xe_pcodemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/sp_SP/gpu/xe/xe_pcodemodnameN 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_pcode.rsthKubhsection)}(hhh](htitle)}(hPcodeh]hPcode}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hX+Xe PCODE is the component responsible for interfacing with the PCODE firmware. It shall provide a very simple ABI to other Xe components, but be the single and consolidated place that will communicate with PCODE. All read and write operations to PCODE will be internal and private to this component.h]hX+Xe PCODE is the component responsible for interfacing with the PCODE firmware. It shall provide a very simple ABI to other Xe components, but be the single and consolidated place that will communicate with PCODE. All read and write operations to PCODE will be internal and private to this component.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:7: ./drivers/gpu/drm/xe/xe_pcode.chKhhhhubh)}(h>What's next: - PCODE hw metrics - PCODE for display operationsh]h@What’s next: - PCODE hw metrics - PCODE for display operations}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:7: ./drivers/gpu/drm/xe/xe_pcode.chKhhhhubh)}(hhh](h)}(h Internal APIh]h Internal API}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlexe_pcode_request (C function)c.xe_pcode_requesthNtauh1jhhhhhNhNubhdesc)}(hhh](hdesc_signature)}(hrint xe_pcode_request (struct xe_tile *tile, u32 mbox, u32 request, u32 reply_mask, u32 reply, int timeout_base_ms)h]hdesc_signature_line)}(hqint xe_pcode_request(struct xe_tile *tile, u32 mbox, u32 request, u32 reply_mask, u32 reply, int timeout_base_ms)h](hdesc_sig_keyword_type)}(hinth]hint}(hj2hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j0hj,hhh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKubhdesc_sig_space)}(h h]h }(hjDhhhNhNubah}(h]h ]wah"]h$]h&]uh1jBhj,hhhjAhKubh desc_name)}(hxe_pcode_requesth]h desc_sig_name)}(hxe_pcode_requesth]hxe_pcode_request}(hj[hhhNhNubah}(h]h ]nah"]h$]h&]uh1jYhjUubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jShj,hhhjAhKubhdesc_parameterlist)}(h](struct xe_tile *tile, u32 mbox, u32 request, u32 reply_mask, u32 reply, int timeout_base_ms)h](hdesc_parameter)}(hstruct xe_tile *tileh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1j~hjzubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjzubh)}(hhh]jZ)}(hxe_tileh]hxe_tile}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jj]sbc.xe_pcode_requestasbuh1hhjzubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjzubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjzubjZ)}(htileh]htile}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjzubeh}(h]h ]h"]h$]h&]noemphhhuh1jxhjtubjy)}(hu32 mboxh](h)}(hhh]jZ)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.xe_pcode_requestasbuh1hhjubjC)}(h h]h }(hj"hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjZ)}(hmboxh]hmbox}(hj0hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jxhjtubjy)}(h u32 requesth](h)}(hhh]jZ)}(hu32h]hu32}(hjLhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNjj)}j]jc.xe_pcode_requestasbuh1hhjEubjC)}(h h]h }(hjjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjEubjZ)}(hrequesth]hrequest}(hjxhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjEubeh}(h]h ]h"]h$]h&]noemphhhuh1jxhjtubjy)}(hu32 reply_maskh](h)}(hhh]jZ)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.xe_pcode_requestasbuh1hhjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjZ)}(h reply_maskh]h reply_mask}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jxhjtubjy)}(h u32 replyh](h)}(hhh]jZ)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.xe_pcode_requestasbuh1hhjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjZ)}(hreplyh]hreply}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jxhjtubjy)}(hint timeout_base_msh](j1)}(hinth]hint}(hj!hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjubjC)}(h h]h }(hj/hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjZ)}(htimeout_base_msh]htimeout_base_ms}(hj=hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jxhjtubeh}(h]h ]h"]h$]h&]hhuh1jrhj,hhhjAhKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1j*sphinx_line_type declaratorhj&hhhjAhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j$hjAhKhj!hhubh desc_content)}(hhh]h)}(h'send PCODE request until acknowledgmenth]h'send PCODE request until acknowledgment}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjnhhubah}(h]h ]h"]h$]h&]uh1jlhj!hhhjAhKubeh}(h]h ](jfunctioneh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhhhNhNubh container)}(hXg**Parameters** ``struct xe_tile *tile`` tile ``u32 mbox`` PCODE mailbox ID the request is targeted for ``u32 request`` request ID ``u32 reply_mask`` mask used to check for request acknowledgment ``u32 reply`` value used to check for request acknowledgment ``int timeout_base_ms`` timeout for polling with preemption enabled **Description** Keep resending the **request** to **mbox** until PCODE acknowledges it, PCODE reports an error or an overall timeout of **timeout_base_ms**+50 ms expires. The request is acknowledged once the PCODE reply dword equals **reply** after applying **reply_mask**. Polling is first attempted with preemption enabled for **timeout_base_ms** and if this times out for another 50 ms with preemption disabled. Returns 0 on success, ``-ETIMEDOUT`` in case of a timeout, <0 in case of some other error as reported by PCODE.h](h)}(h**Parameters**h]hstrong)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjubhdefinition_list)}(hhh](hdefinition_list_item)}(h``struct xe_tile *tile`` tile h](hterm)}(h``struct xe_tile *tile``h]hliteral)}(hjh]hstruct xe_tile *tile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjubh definition)}(hhh]h)}(htileh]htile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h:``u32 mbox`` PCODE mailbox ID the request is targeted for h](j)}(h ``u32 mbox``h]j)}(hjh]hu32 mbox}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjubj)}(hhh]h)}(h,PCODE mailbox ID the request is targeted forh]h,PCODE mailbox ID the request is targeted for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``u32 request`` request ID h](j)}(h``u32 request``h]j)}(hj8h]h u32 request}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhj2ubj)}(hhh]h)}(h request IDh]h request ID}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhKhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhKhjubj)}(hA``u32 reply_mask`` mask used to check for request acknowledgment h](j)}(h``u32 reply_mask``h]j)}(hjqh]hu32 reply_mask}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjkubj)}(hhh]h)}(h-mask used to check for request acknowledgmenth]h-mask used to check for request acknowledgment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h=``u32 reply`` value used to check for request acknowledgment h](j)}(h ``u32 reply``h]j)}(hjh]h u32 reply}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjubj)}(hhh]h)}(h.value used to check for request acknowledgmenth]h.value used to check for request acknowledgment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hD``int timeout_base_ms`` timeout for polling with preemption enabled h](j)}(h``int timeout_base_ms``h]j)}(hjh]hint timeout_base_ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjubj)}(hhh]h)}(h+timeout for polling with preemption enabledh]h+timeout for polling with preemption enabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjubh)}(hXKeep resending the **request** to **mbox** until PCODE acknowledges it, PCODE reports an error or an overall timeout of **timeout_base_ms**+50 ms expires. The request is acknowledged once the PCODE reply dword equals **reply** after applying **reply_mask**. Polling is first attempted with preemption enabled for **timeout_base_ms** and if this times out for another 50 ms with preemption disabled.h](hKeep resending the }(hj4hhhNhNubj)}(h **request**h]hrequest}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh to }(hj4hhhNhNubj)}(h**mbox**h]hmbox}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubhN until PCODE acknowledges it, PCODE reports an error or an overall timeout of }(hj4hhhNhNubj)}(hj**timeout_base_ms**+50 ms expires. The request is acknowledged once the PCODE reply dword equals **reply**h]hftimeout_base_ms**+50 ms expires. The request is acknowledged once the PCODE reply dword equals **reply}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh after applying }(hj4hhhNhNubj)}(h**reply_mask**h]h reply_mask}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh9. Polling is first attempted with preemption enabled for }(hj4hhhNhNubj)}(h**timeout_base_ms**h]htimeout_base_ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubhB and if this times out for another 50 ms with preemption disabled.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjubh)}(hoReturns 0 on success, ``-ETIMEDOUT`` in case of a timeout, <0 in case of some other error as reported by PCODE.h](hReturns 0 on success, }(hjhhhNhNubj)}(h``-ETIMEDOUT``h]h -ETIMEDOUT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhK in case of a timeout, <0 in case of some other error as reported by PCODE.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_pcode_init_min_freq_table (C function)c.xe_pcode_init_min_freq_tablehNtauh1jhhhhhNhNubj )}(hhh](j%)}(hYint xe_pcode_init_min_freq_table (struct xe_tile *tile, u32 min_gt_freq, u32 max_gt_freq)h]j+)}(hXint xe_pcode_init_min_freq_table(struct xe_tile *tile, u32 min_gt_freq, u32 max_gt_freq)h](j1)}(hinth]hint}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjhhh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjhhhjhKubjT)}(hxe_pcode_init_min_freq_tableh]jZ)}(hxe_pcode_init_min_freq_tableh]hxe_pcode_init_min_freq_table}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubah}(h]h ](jmjneh"]h$]h&]hhuh1jShjhhhjhKubjs)}(h8(struct xe_tile *tile, u32 min_gt_freq, u32 max_gt_freq)h](jy)}(hstruct xe_tile *tileh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubjC)}(h h]h }(hj(hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubh)}(hhh]jZ)}(hxe_tileh]hxe_tile}(hj9hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]j)}jjsbc.xe_pcode_init_min_freq_tableasbuh1hhjubjC)}(h h]h }(hjYhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubj)}(hjh]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjZ)}(htileh]htile}(hjthhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jxhjubjy)}(hu32 min_gt_freqh](h)}(hhh]jZ)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jUc.xe_pcode_init_min_freq_tableasbuh1hhjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjZ)}(h min_gt_freqh]h min_gt_freq}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jxhjubjy)}(hu32 max_gt_freqh](h)}(hhh]jZ)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jUc.xe_pcode_init_min_freq_tableasbuh1hhjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjZ)}(h max_gt_freqh]h max_gt_freq}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jxhjubeh}(h]h ]h"]h$]h&]hhuh1jrhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj^uh1j*j_j`hjhhhjhKubah}(h]jah ](jdjeeh"]h$]h&]jijj)jkhuh1j$hjhKhjhhubjm)}(hhh]h)}(h&Initialize PCODE's QOS frequency tableh]h(Initialize PCODE’s QOS frequency table}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhj+hhubah}(h]h ]h"]h$]h&]uh1jlhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct xe_tile *tile`` tile instance ``u32 min_gt_freq`` Minimal (RPn) GT frequency in units of 50MHz. ``u32 max_gt_freq`` Maximal (RP0) GT frequency in units of 50MHz. **Description** This function initialize PCODE's QOS frequency table for a proper minimal frequency/power steering decision, depending on the current requested GT frequency. For older platforms this was a more complete table including the IA freq. However for the latest platforms this table become a simple 1-1 Ring vs GT frequency. Even though, without setting it, PCODE might not take the right decisions for some memory frequencies and affect latency. It returns 0 on success, and -ERROR number on failure, -EINVAL if max frequency is higher then the minimal, and other errors directly translated from the PCODE Error returns: - -ENXIO: "Illegal Command" - -ETIMEDOUT: "Timed out" - -EINVAL: "Illegal Data" - -ENXIO, "Illegal Subcommand" - -EBUSY: "PCODE Locked" - -EOVERFLOW, "GT ratio out of range" - -EACCES, "PCODE Rejected" - -EPROTO, "Unknown"h](h)}(h**Parameters**h]j)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjJubj)}(hhh](j)}(h'``struct xe_tile *tile`` tile instance h](j)}(h``struct xe_tile *tile``h]j)}(hjoh]hstruct xe_tile *tile}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjiubj)}(hhh]h)}(h tile instanceh]h tile instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhKhjfubj)}(hB``u32 min_gt_freq`` Minimal (RPn) GT frequency in units of 50MHz. h](j)}(h``u32 min_gt_freq``h]j)}(hjh]hu32 min_gt_freq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjubj)}(hhh]h)}(h-Minimal (RPn) GT frequency in units of 50MHz.h]h-Minimal (RPn) GT frequency in units of 50MHz.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjfubj)}(hB``u32 max_gt_freq`` Maximal (RP0) GT frequency in units of 50MHz. h](j)}(h``u32 max_gt_freq``h]j)}(hjh]hu32 max_gt_freq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjubj)}(hhh]h)}(h-Maximal (RP0) GT frequency in units of 50MHz.h]h-Maximal (RP0) GT frequency in units of 50MHz.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjfubeh}(h]h ]h"]h$]h&]uh1jhjJubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjJubh)}(hXThis function initialize PCODE's QOS frequency table for a proper minimal frequency/power steering decision, depending on the current requested GT frequency. For older platforms this was a more complete table including the IA freq. However for the latest platforms this table become a simple 1-1 Ring vs GT frequency. Even though, without setting it, PCODE might not take the right decisions for some memory frequencies and affect latency.h]hXThis function initialize PCODE’s QOS frequency table for a proper minimal frequency/power steering decision, depending on the current requested GT frequency. For older platforms this was a more complete table including the IA freq. However for the latest platforms this table become a simple 1-1 Ring vs GT frequency. Even though, without setting it, PCODE might not take the right decisions for some memory frequencies and affect latency.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjJubh)}(hXIt returns 0 on success, and -ERROR number on failure, -EINVAL if max frequency is higher then the minimal, and other errors directly translated from the PCODE Error returns: - -ENXIO: "Illegal Command" - -ETIMEDOUT: "Timed out" - -EINVAL: "Illegal Data" - -ENXIO, "Illegal Subcommand" - -EBUSY: "PCODE Locked" - -EOVERFLOW, "GT ratio out of range" - -EACCES, "PCODE Rejected" - -EPROTO, "Unknown"h]hXIt returns 0 on success, and -ERROR number on failure, -EINVAL if max frequency is higher then the minimal, and other errors directly translated from the PCODE Error returns: - -ENXIO: “Illegal Command” - -ETIMEDOUT: “Timed out” - -EINVAL: “Illegal Data” - -ENXIO, “Illegal Subcommand” - -EBUSY: “PCODE Locked” - -EOVERFLOW, “GT ratio out of range” - -EACCES, “PCODE Rejected” - -EPROTO, “Unknown”}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chKhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jxe_pcode_ready (C function)c.xe_pcode_readyhNtauh1jhhhhhNhNubj )}(hhh](j%)}(h6int xe_pcode_ready (struct xe_device *xe, bool locked)h]j+)}(h5int xe_pcode_ready(struct xe_device *xe, bool locked)h](j1)}(hinth]hint}(hjphhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjlhhh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjlhhhj~hMubjT)}(hxe_pcode_readyh]jZ)}(hxe_pcode_readyh]hxe_pcode_ready}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubah}(h]h ](jmjneh"]h$]h&]hhuh1jShjlhhhj~hMubjs)}(h#(struct xe_device *xe, bool locked)h](jy)}(hstruct xe_device *xeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubh)}(hhh]jZ)}(h xe_deviceh]h xe_device}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.xe_pcode_readyasbuh1hhjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjZ)}(hxeh]hxe}(hj hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jxhjubjy)}(h bool lockedh](j1)}(hboolh]hbool}(hj hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hj ubjC)}(h h]h }(hj- hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj ubjZ)}(hlockedh]hlocked}(hj; hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jxhjubeh}(h]h ]h"]h$]h&]hhuh1jrhjlhhhj~hMubeh}(h]h ]h"]h$]h&]hhj^uh1j*j_j`hjhhhhj~hMubah}(h]jcah ](jdjeeh"]h$]h&]jijj)jkhuh1j$hj~hMhjehhubjm)}(hhh]h)}(hEnsure PCODE is initializedh]hEnsure PCODE is initialized}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMhjb hhubah}(h]h ]h"]h$]h&]uh1jlhjehhhj~hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj} jj} jjjuh1jhhhhhNhNubj)}(hX**Parameters** ``struct xe_device *xe`` xe instance ``bool locked`` true if lock held, false otherwise **Description** PCODE init mailbox is polled only on root gt of root tile as the root tile provides the initialization is complete only after all the tiles have completed the initialization. Called only on early probe without locks and with locks in resume path. Returns 0 on success, and -error number on failure.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMhj ubj)}(hhh](j)}(h%``struct xe_device *xe`` xe instance h](j)}(h``struct xe_device *xe``h]j)}(hj h]hstruct xe_device *xe}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMhj ubj)}(hhh]h)}(h xe instanceh]h xe instance}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h3``bool locked`` true if lock held, false otherwise h](j)}(h``bool locked``h]j)}(hj h]h bool locked}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMhj ubj)}(hhh]h)}(h"true if lock held, false otherwiseh]h"true if lock held, false otherwise}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMhj ubh)}(hPCODE init mailbox is polled only on root gt of root tile as the root tile provides the initialization is complete only after all the tiles have completed the initialization. Called only on early probe without locks and with locks in resume path.h]hPCODE init mailbox is polled only on root gt of root tile as the root tile provides the initialization is complete only after all the tiles have completed the initialization. Called only on early probe without locks and with locks in resume path.}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMhj ubh)}(h3Returns 0 on success, and -error number on failure.h]h3Returns 0 on success, and -error number on failure.}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chM#hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jxe_pcode_init (C function)c.xe_pcode_inithNtauh1jhhhhhNhNubj )}(hhh](j%)}(h)void xe_pcode_init (struct xe_tile *tile)h]j+)}(h(void xe_pcode_init(struct xe_tile *tile)h](j1)}(hvoidh]hvoid}(hjn hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjj hhh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMFubjC)}(h h]h }(hj} hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjj hhhj| hMFubjT)}(h xe_pcode_inith]jZ)}(h xe_pcode_inith]h xe_pcode_init}(hj hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj ubah}(h]h ](jmjneh"]h$]h&]hhuh1jShjj hhhj| hMFubjs)}(h(struct xe_tile *tile)h]jy)}(hstruct xe_tile *tileh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubjC)}(h h]h }(hj hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj ubh)}(hhh]jZ)}(hxe_tileh]hxe_tile}(hj hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj sbc.xe_pcode_initasbuh1hhj ubjC)}(h h]h }(hj hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjZ)}(htileh]htile}(hj hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jxhj ubah}(h]h ]h"]h$]h&]hhuh1jrhjj hhhj| hMFubeh}(h]h ]h"]h$]h&]hhj^uh1j*j_j`hjf hhhj| hMFubah}(h]ja ah ](jdjeeh"]h$]h&]jijj)jkhuh1j$hj| hMFhjc hhubjm)}(hhh]h)}(hinitialize components of PCODEh]hinitialize components of PCODE}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMFhj+ hhubah}(h]h ]h"]h$]h&]uh1jlhjc hhhj| hMFubeh}(h]h ](jfunctioneh"]h$]h&]jjjjF jjF jjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct xe_tile *tile`` tile instance **Description** This function initializes the xe_pcode component. To be called once only during probe.h](h)}(h**Parameters**h]j)}(hjP h]h Parameters}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMJhjJ ubj)}(hhh]j)}(h'``struct xe_tile *tile`` tile instance h](j)}(h``struct xe_tile *tile``h]j)}(hjo h]hstruct xe_tile *tile}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMGhji ubj)}(hhh]h)}(h tile instanceh]h tile instance}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMGhj ubah}(h]h ]h"]h$]h&]uh1jhji ubeh}(h]h ]h"]h$]h&]uh1jhj hMGhjf ubah}(h]h ]h"]h$]h&]uh1jhjJ ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMIhjJ ubh)}(hVThis function initializes the xe_pcode component. To be called once only during probe.h]hVThis function initializes the xe_pcode component. To be called once only during probe.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMHhjJ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!xe_pcode_probe_early (C function)c.xe_pcode_probe_earlyhNtauh1jhhhhhNhNubj )}(hhh](j%)}(h/int xe_pcode_probe_early (struct xe_device *xe)h]j+)}(h.int xe_pcode_probe_early(struct xe_device *xe)h](j1)}(hinth]hint}(hj hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hj hhh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMRubjC)}(h h]h }(hj hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj hhhj hMRubjT)}(hxe_pcode_probe_earlyh]jZ)}(hxe_pcode_probe_earlyh]hxe_pcode_probe_early}(hj hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj ubah}(h]h ](jmjneh"]h$]h&]hhuh1jShj hhhj hMRubjs)}(h(struct xe_device *xe)h]jy)}(hstruct xe_device *xeh](j)}(hjh]hstruct}(hj, hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj( ubjC)}(h h]h }(hj9 hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj( ubh)}(hhh]jZ)}(h xe_deviceh]h xe_device}(hjJ hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjG ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjL modnameN classnameNjj)}j]j)}jj sbc.xe_pcode_probe_earlyasbuh1hhj( ubjC)}(h h]h }(hjj hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj( ubj)}(hjh]h*}(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj( ubjZ)}(hxeh]hxe}(hj hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj( ubeh}(h]h ]h"]h$]h&]noemphhhuh1jxhj$ ubah}(h]h ]h"]h$]h&]hhuh1jrhj hhhj hMRubeh}(h]h ]h"]h$]h&]hhj^uh1j*j_j`hj hhhj hMRubah}(h]j ah ](jdjeeh"]h$]h&]jijj)jkhuh1j$hj hMRhj hhubjm)}(hhh]h)}(hinitializes PCODEh]hinitializes PCODE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMRhj hhubah}(h]h ]h"]h$]h&]uh1jlhj hhhj hMRubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhhhNhNubj)}(h**Parameters** ``struct xe_device *xe`` xe instance **Description** This function checks the initialization status of PCODE To be called once only during early probe without locks. Returns 0 on success, error code otherwiseh](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMVhj ubj)}(hhh]j)}(h%``struct xe_device *xe`` xe instance h](j)}(h``struct xe_device *xe``h]j)}(hj h]hstruct xe_device *xe}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMShj ubj)}(hhh]h)}(h xe instanceh]h xe instance}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMShj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMShj ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj+ h]h Description}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj) ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMUhj ubh)}(hpThis function checks the initialization status of PCODE To be called once only during early probe without locks.h]hpThis function checks the initialization status of PCODE To be called once only during early probe without locks.}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMThj ubh)}(h*Returns 0 on success, error code otherwiseh]h*Returns 0 on success, error code otherwise}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:13: ./drivers/gpu/drm/xe/xe_pcode.chMWhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubhtarget)}(h.. _xe-survivability-mode:h]h}(h]h ]h"]h$]h&]refidxe-survivability-modeuh1jf hKhhhhhhubeh}(h] internal-apiah ]h"] internal apiah$]h&]uh1hhhhhhhhK ubeh}(h]pcodeah ]h"]pcodeah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hSurvivability Modeh]hSurvivability Mode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hSurvivability Mode is a software based workflow for recovering a system in a failed boot state Here system recoverability is concerned with recovering the firmware responsible for boot.h]hSurvivability Mode is a software based workflow for recovering a system in a failed boot state Here system recoverability is concerned with recovering the firmware responsible for boot.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chKhj hhubh)}(hhh](h)}(hBoot Survivabilityh]hBoot Survivability}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hNhNubh)}(hX;Boot Survivability is implemented by loading the driver with bare minimum (no drm card) to allow the firmware to be flashed through mei driver and collect telemetry. The driver's probe flow is modified such that it enters survivability mode when pcode initialization is incomplete and boot status denotes a failure.h]hX=Boot Survivability is implemented by loading the driver with bare minimum (no drm card) to allow the firmware to be flashed through mei driver and collect telemetry. The driver’s probe flow is modified such that it enters survivability mode when pcode initialization is incomplete and boot status denotes a failure.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chKhj ubh)}(hXpSurvivability mode can also be entered manually using the survivability mode attribute available through configfs which is beneficial in several usecases. It can be used to address scenarios where pcode does not detect failure or for validation purposes. It can also be used in In-Field-Repair (IFR) to repair a single card without impacting the other cards in a node.h]hXpSurvivability mode can also be entered manually using the survivability mode attribute available through configfs which is beneficial in several usecases. It can be used to address scenarios where pcode does not detect failure or for validation purposes. It can also be used in In-Field-Repair (IFR) to repair a single card without impacting the other cards in a node.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chK"hj ubh)}(h6Use below command enable survivability mode manually::h]h5Use below command enable survivability mode manually:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chK'hj ubh literal_block)}(h@# echo 1 > /sys/kernel/config/xe/0000:03:00.0/survivability_modeh]h@# echo 1 > /sys/kernel/config/xe/0000:03:00.0/survivability_mode}hj sbah}(h]h ]h"]h$]h&]hhuh1j hj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chK)hj ubh)}(hWIt is the responsibility of the user to clear the mode once firmware flash is complete.h]hWIt is the responsibility of the user to clear the mode once firmware flash is complete.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chK+hj ubh)}(h@Refer :ref:`xe_configfs` for more details on how to use configfsh](hRefer }(hjhhhNhNubh)}(h:ref:`xe_configfs`h]hinline)}(hj h]h xe_configfs}(hjhhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocgpu/xe/xe_pcode refdomainjreftyperef refexplicitrefwarn reftarget xe_configfsuh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chK-hjubh( for more details on how to use configfs}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hK-hj ubh)}(hSurvivability mode is indicated by the below admin-only readable sysfs entry. It provides information about the type of survivability mode (Boot/Runtime).h]hSurvivability mode is indicated by the below admin-only readable sysfs entry. It provides information about the type of survivability mode (Boot/Runtime).}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chK/hj ubj )}(h=# cat /sys/bus/pci/devices//survivability_mode Booth]h=# cat /sys/bus/pci/devices//survivability_mode Boot}hjIsbah}(h]h ]h"]h$]h&]hhƌforcelanguageshellhighlight_args}uh1j hj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chK2hj ubh)}(hhAny additional debug information if present will be visible under the directory ``survivability_info``::h](hPAny additional debug information if present will be visible under the directory }(hj]hhhNhNubj)}(h``survivability_info``h]hsurvivability_info}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh:}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chK8hj ubj )}(h/sys/bus/pci/devices//survivability_info/ ├── aux_info0 ├── aux_info1 ├── aux_info2 ├── aux_info3 ├── aux_info4 ├── capability_info ├── fdo_mode ├── postcode_trace └── postcode_trace_overflowh]h/sys/bus/pci/devices//survivability_info/ ├── aux_info0 ├── aux_info1 ├── aux_info2 ├── aux_info3 ├── aux_info4 ├── capability_info ├── fdo_mode ├── postcode_trace └── postcode_trace_overflow}hj~sbah}(h]h ]h"]h$]h&]hhuh1j hj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chK;hj ubh)}(h+This directory has the following attributesh]h+This directory has the following attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chKFhj ubh bullet_list)}(hhh](h list_item)}(hS``capability_info`` : Indicates Boot status and support for additional information h]h)}(hR``capability_info`` : Indicates Boot status and support for additional informationh](j)}(h``capability_info``h]hcapability_info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh? : Indicates Boot status and support for additional information}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chKHhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h``postcode_trace``, ``postcode_trace_overflow`` : Each postcode is a 8bit value and represents a boot failure event. When a new failure event is logged by PCODE the existing postcodes are shifted left. These entries provide a history of 8 postcodes. h]h)}(h``postcode_trace``, ``postcode_trace_overflow`` : Each postcode is a 8bit value and represents a boot failure event. When a new failure event is logged by PCODE the existing postcodes are shifted left. These entries provide a history of 8 postcodes.h](j)}(h``postcode_trace``h]hpostcode_trace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h``postcode_trace_overflow``h]hpostcode_trace_overflow}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh : Each postcode is a 8bit value and represents a boot failure event. When a new failure event is logged by PCODE the existing postcodes are shifted left. These entries provide a history of 8 postcodes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chKJhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hB``aux_info`` : Some failures have additional debug information h]h)}(hA``aux_info`` : Some failures have additional debug informationh](j)}(h``aux_info``h]h aux_info}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh2 : Some failures have additional debug information}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chKNhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hXb``fdo_mode`` : To allow recovery in scenarios where MEI itself fails, a new SPI Flash Descriptor Override (FDO) mode is added in v2 survivability breadcrumbs. This mode is enabled by PCODE and provides the ability to directly update the firmware via SPI Driver without any dependency on MEI. Xe KMD initializes the nvm aux driver if FDO mode is enabled. h]h)}(hXa``fdo_mode`` : To allow recovery in scenarios where MEI itself fails, a new SPI Flash Descriptor Override (FDO) mode is added in v2 survivability breadcrumbs. This mode is enabled by PCODE and provides the ability to directly update the firmware via SPI Driver without any dependency on MEI. Xe KMD initializes the nvm aux driver if FDO mode is enabled.h](j)}(h ``fdo_mode``h]hfdo_mode}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubhXU : To allow recovery in scenarios where MEI itself fails, a new SPI Flash Descriptor Override (FDO) mode is added in v2 survivability breadcrumbs. This mode is enabled by PCODE and provides the ability to directly update the firmware via SPI Driver without any dependency on MEI. Xe KMD initializes the nvm aux driver if FDO mode is enabled.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chKPhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhjhKHhj ubeh}(h]boot-survivabilityah ]h"]boot survivabilityah$]h&]uh1hhj hhhNhNubh)}(hhh](h)}(hRuntime Survivabilityh]hRuntime Survivability}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahNhNubh)}(hXCertain runtime firmware errors can cause the device to enter a wedged state (:ref:`xe-device-wedging`) requiring a firmware flash to restore normal operation. Runtime Survivability Mode indicates that a firmware flash is necessary to recover the device and is indicated by the presence of survivability mode sysfs. Survivability mode sysfs provides information about the type of survivability mode.h](hNCertain runtime firmware errors can cause the device to enter a wedged state (}(hjrhhhNhNubh)}(h:ref:`xe-device-wedging`h]j)}(hj|h]hxe-device-wedging}(hj~hhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]refdocj' refdomainjreftyperef refexplicitrefwarnj-xe-device-wedginguh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chKXhjrubhX)) requiring a firmware flash to restore normal operation. Runtime Survivability Mode indicates that a firmware flash is necessary to recover the device and is indicated by the presence of survivability mode sysfs. Survivability mode sysfs provides information about the type of survivability mode.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKXhjaubj )}(h@# cat /sys/bus/pci/devices//survivability_mode Runtimeh]h@# cat /sys/bus/pci/devices//survivability_mode Runtime}hjsbah}(h]h ]h"]h$]h&]hhjWjXshelljZ}uh1j hj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chK^hjaubh)}(hWhen such errors occur, userspace is notified with the drm device wedged uevent and runtime survivability mode. User can then initiate a firmware flash using userspace tools like fwupd to restore device to normal operation.h]hWhen such errors occur, userspace is notified with the drm device wedged uevent and runtime survivability mode. User can then initiate a firmware flash using userspace tools like fwupd to restore device to normal operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_pcode:22: ./drivers/gpu/drm/xe/xe_survivability_mode.chKchjaubeh}(h]runtime-survivabilityah ]h"]runtime survivabilityah$]h&]uh1hhj hhhNhNubeh}(h](survivability-modejs eh ]h"](survivability modexe-survivability-modeeh$]h&]uh1hhhhhhhhKexpect_referenced_by_name}jjh sexpect_referenced_by_id}js jh subeh}(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_handlerjerror_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}js ]jh asnameids}(j j~ jy jv jjs jjj^j[jju nametypes}(j jy jjj^juh}(j~ hjv hjj&jjjcjhja jf j j js j jj j[j jjau 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]hsystem_message)}(hhh]h)}(hhh]h;Hyperlink target "xe-survivability-mode" is not referenced.}hjgsbah}(h]h ]h"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehnjlineKuh1jbuba transformerN include_log] decorationNhhub.