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/arch/x86/ifsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/zh_TW/arch/x86/ifsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/it_IT/arch/x86/ifsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/ja_JP/arch/x86/ifsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/ko_KR/arch/x86/ifsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/sp_SP/arch/x86/ifsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh:/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs.rsthKubhtarget)}(h.. _In-Field Scan:h]h}(h]h ]h"]h$]h&]refid in-field-scanuh1hhKhhhhhNubh paragraph)}(h**In-Field Scan**h]hstrong)}(hhh]h In-Field Scan}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubah}(h]hah ]h"] in-field scanah$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKhhhhexpect_referenced_by_name}hhsexpect_referenced_by_id}hhsubhsection)}(hhh](htitle)}(h In-Field Scanh]h In-Field Scan}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhNhNubh)}(hhh](h)}(h Introductionh]h Introduction}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhNhNubh)}(hXIn Field Scan (IFS) is a hardware feature to run circuit level tests on a CPU core to detect problems that are not caught by parity or ECC checks. Future CPUs will support more than one type of test which will show up with a new platform-device instance-id.h]hXIn Field Scan (IFS) is a hardware feature to run circuit level tests on a CPU core to detect problems that are not caught by parity or ECC checks. Future CPUs will support more than one type of test which will show up with a new platform-device instance-id.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKhhubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhubh)}(hhh](h)}(h IFS Imageh]h IFS Image}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hNhNubh)}(hXIntel provides firmware files containing the scan tests via the webpage [#f1]_. Look under "In-Field Scan Test Images Download" section towards the end of the page. Similar to microcode, there are separate files for each family-model-stepping. IFS Images are not applicable for some test types. Wherever applicable the sysfs directory would provide a "current_batch" file (see below) for loading the image.h](hHIntel provides firmware files containing the scan tests via the webpage }(hj1hhhNhNubhfootnote_reference)}(h[#f1]_h]h1}(hj;hhhNhNubah}(h]id2ah ]h"]h$]h&]autoKhf1docname arch/x86/ifsuh1j9hj1resolvedKubhXP. Look under “In-Field Scan Test Images Download” section towards the end of the page. Similar to microcode, there are separate files for each family-model-stepping. IFS Images are not applicable for some test types. Wherever applicable the sysfs directory would provide a “current_batch” file (see below) for loading the image.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKhj ubhfootnote)}(hhttps://intel.com/InFieldScan h](hlabel)}(hhh]h1}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj\hhhNhNubh)}(hhttps://intel.com/InFieldScanh]h reference)}(hjqh]hhttps://intel.com/InFieldScan}(hjuhhhNhNubah}(h]h ]h"]h$]h&]refurijquh1jshjoubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKhj\ubeh}(h]jKah ]h"]f1ah$]h&]jEajJKjLjMuh1jZhjhKhj ubeh}(h] ifs-imageah ]h"] ifs imageah$]h&]uh1hhhubh)}(hhh](h)}(hIFS Image Loadingh]hIFS Image Loading}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhNhNubh)}(hXThe driver loads the tests into memory reserved BIOS local to each CPU socket in a two step process using writes to MSRs to first load the SHA hashes for the test. Then the tests themselves. Status MSRs provide feedback on the success/failure of these steps.h]hXThe driver loads the tests into memory reserved BIOS local to each CPU socket in a two step process using writes to MSRs to first load the SHA hashes for the test. Then the tests themselves. Status MSRs provide feedback on the success/failure of these steps.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhK$hjubh)}(hXThe test files are kept in a fixed location: /lib/firmware/intel/ifs_/ For e.g if there are 3 test files, they would be named in the following fashion: ff-mm-ss-01.scan ff-mm-ss-02.scan ff-mm-ss-03.scan (where ff refers to family, mm indicates model and ss indicates stepping)h]hXThe test files are kept in a fixed location: /lib/firmware/intel/ifs_/ For e.g if there are 3 test files, they would be named in the following fashion: ff-mm-ss-01.scan ff-mm-ss-02.scan ff-mm-ss-03.scan (where ff refers to family, mm indicates model and ss indicates stepping)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhK)hjubh)}(hA different test file can be loaded by writing the numerical portion (e.g 1, 2 or 3 in the above scenario) into the curent_batch file. To load ff-mm-ss-02.scan, the following command can be used::h]hA different test file can be loaded by writing the numerical portion (e.g 1, 2 or 3 in the above scenario) into the curent_batch file. To load ff-mm-ss-02.scan, the following command can be used:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhK1hjubh literal_block)}(h@# echo 2 > /sys/devices/virtual/misc/intel_ifs_/current_batchh]h@# echo 2 > /sys/devices/virtual/misc/intel_ifs_/current_batch}hjsbah}(h]h ]h"]h$]h&]hhuh1jh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhK5hjubh)}(hCThe above file can also be read to know the currently loaded image.h]hCThe above file can also be read to know the currently loaded image.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhK7hjubeh}(h]ifs-image-loadingah ]h"]ifs image loadingah$]h&]uh1hhhubh)}(hhh](h)}(h Running testsh]h Running tests}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhNhNubh)}(hTests are run by the driver synchronizing execution of all threads on a core and then writing to the ACTIVATE_SCAN MSR on all threads. Instruction execution continues when:h]hTests are run by the driver synchronizing execution of all threads on a core and then writing to the ACTIVATE_SCAN MSR on all threads. Instruction execution continues when:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKubah}(h]h ]h"]h$]h&]uh1j$hj!ubj%)}(hA test detected a problem. h]h)}(hA test detected a problem.h]hA test detected a problem.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKBhjVubah}(h]h ]h"]h$]h&]uh1j$hj!ubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1jhjubh)}(hXNote that ALL THREADS ON THE CORE ARE EFFECTIVELY OFFLINE FOR THE DURATION OF THE TEST. This can be up to 200 milliseconds. If the system is running latency sensitive applications that cannot tolerate an interruption of this magnitude, the system administrator must arrange to migrate those applications to other cores before running a core test. It may also be necessary to redirect interrupts to other CPUs.h]hXNote that ALL THREADS ON THE CORE ARE EFFECTIVELY OFFLINE FOR THE DURATION OF THE TEST. This can be up to 200 milliseconds. If the system is running latency sensitive applications that cannot tolerate an interruption of this magnitude, the system administrator must arrange to migrate those applications to other cores before running a core test. It may also be necessary to redirect interrupts to other CPUs.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKDhjubh)}(hIn all cases reading the corresponding test's STATUS MSR provides details on what happened. The driver makes the value of this MSR visible to applications via the "details" file (see below). Interrupted tests may be restarted.h]hIn all cases reading the corresponding test’s STATUS MSR provides details on what happened. The driver makes the value of this MSR visible to applications via the “details” file (see below). Interrupted tests may be restarted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKKhjubh)}(hkThe IFS driver provides sysfs interfaces via /sys/devices/virtual/misc/intel_ifs_/ to control execution:h]hkThe IFS driver provides sysfs interfaces via /sys/devices/virtual/misc/intel_ifs_/ to control execution:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKOhjubh)}(hTest a specific core::h]hTest a specific core:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKRhjubj)}(h@# echo > /sys/devices/virtual/misc/intel_ifs_/run_testh]h@# echo > /sys/devices/virtual/misc/intel_ifs_/run_test}hjsbah}(h]h ]h"]h$]h&]hhuh1jh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKThjubh)}(hXwhen HT is enabled any of the sibling cpu# can be specified to test its corresponding physical core. Since the tests are per physical core, the result of testing any thread is same. All siblings must be online to run a core test. It is only necessary to test one thread.h]hXwhen HT is enabled any of the sibling cpu# can be specified to test its corresponding physical core. Since the tests are per physical core, the result of testing any thread is same. All siblings must be online to run a core test. It is only necessary to test one thread.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKVhjubh)}(h+For e.g. to test core corresponding to cpu5h]h+For e.g. to test core corresponding to cpu5}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhK[hjubh block_quote)}(h<# echo 5 > /sys/devices/virtual/misc/intel_ifs_/run_test h]h)}(h;# echo 5 > /sys/devices/virtual/misc/intel_ifs_/run_testh]h;# echo 5 > /sys/devices/virtual/misc/intel_ifs_/run_test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhK]hjubah}(h]h ]h"]h$]h&]uh1jhjhK]hjubh)}(h.Results of the last test is provided in /sys::h]h-Results of the last test is provided in /sys:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhK_hjubj)}(h9$ cat /sys/devices/virtual/misc/intel_ifs_/status passh]h9$ cat /sys/devices/virtual/misc/intel_ifs_/status pass}hj sbah}(h]h ]h"]h$]h&]hhuh1jh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKahjubh)}(h)Status can be one of pass, fail, untestedh]h)Status can be one of pass, fail, untested}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKdhjubh)}(hEAdditional details of the last test is provided by the details file::h]hDAdditional details of the last test is provided by the details file:}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKfhjubj)}(h<$ cat /sys/devices/virtual/misc/intel_ifs_/details 0x8081h]h<$ cat /sys/devices/virtual/misc/intel_ifs_/details 0x8081}hj:sbah}(h]h ]h"]h$]h&]hhuh1jh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKhhjubh)}(hXThe details file reports the hex value of the test specific status MSR. Hardware defined error codes are documented in volume 4 of the Intel Software Developer's Manual but the error_code field may contain one of the following driver defined software codes:h]hXThe details file reports the hex value of the test specific status MSR. Hardware defined error codes are documented in volume 4 of the Intel Software Developer’s Manual but the error_code field may contain one of the following driver defined software codes:}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKkhjubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jbhj_ubjc)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jbhj_ubhtbody)}(hhh](hrow)}(hhh](hentry)}(hhh]h)}(h0xFDh]h0xFD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKqhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hSoftware timeouth]hSoftware timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j}hjzubj~)}(hhh](j)}(hhh]h)}(h0xFEh]h0xFE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKshjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hPartial completionh]hPartial completion}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j}hjzubeh}(h]h ]h"]h$]h&]uh1jxhj_ubeh}(h]h ]h"]h$]h&]colsKuh1j]hjZubah}(h]h ]h"]h$]h&]uh1jXhjubeh}(h] running-testsah ]h"] running testsah$]h&]uh1hhhubh)}(hhh](h)}(hDriver design choicesh]hDriver design choices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hNhNubh)}(h1) The ACTIVATE_SCAN MSR allows for running any consecutive subrange of available tests. But the driver always tries to run all tests and only uses the subrange feature to restart an interrupted test.h]h1) The ACTIVATE_SCAN MSR allows for running any consecutive subrange of available tests. But the driver always tries to run all tests and only uses the subrange feature to restart an interrupted test.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKyhj ubh)}(h2) Hardware allows for some number of cores to be tested in parallel. The driver does not make use of this, it only tests one core at a time.h]h2) Hardware allows for some number of cores to be tested in parallel. The driver does not make use of this, it only tests one core at a time.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhK}hj ubeh}(h]driver-design-choicesah ]h"]driver design choicesah$]h&]uh1hhhubh)}(hhh](h)}(h1Structural Based Functional Test at Field (SBAF):h]h1Structural Based Functional Test at Field (SBAF):}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChNhNubh)}(hX9SBAF is a new type of testing that provides comprehensive core test coverage complementing Scan at Field (SAF) testing. SBAF mimics the manufacturing screening environment and leverages the same test suite. It makes use of Design For Test (DFT) observation sites and features to maximize coverage in minimum time.h]hX9SBAF is a new type of testing that provides comprehensive core test coverage complementing Scan at Field (SAF) testing. SBAF mimics the manufacturing screening environment and leverages the same test suite. It makes use of Design For Test (DFT) observation sites and features to maximize coverage in minimum time.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKhjCubh)}(hXPSimilar to the SAF test, SBAF isolates the core under test from the rest of the system during execution. Upon completion, the core seamlessly resets to its pre-test state and resumes normal operation. Any machine checks or hangs encountered during the test are confined to the isolated core, preventing disruption to the overall system.h]hXPSimilar to the SAF test, SBAF isolates the core under test from the rest of the system during execution. Upon completion, the core seamlessly resets to its pre-test state and resumes normal operation. Any machine checks or hangs encountered during the test are confined to the isolated core, preventing disruption to the overall system.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKhjCubh)}(hXLike the SAF test, the SBAF test is also divided into multiple batches, and each batch test can take hundreds of milliseconds (100-200 ms) to complete. If such a lengthy interruption is undesirable, it is recommended to relocate the time-sensitive applications to other cores.h]hXLike the SAF test, the SBAF test is also divided into multiple batches, and each batch test can take hundreds of milliseconds (100-200 ms) to complete. If such a lengthy interruption is undesirable, it is recommended to relocate the time-sensitive applications to other cores.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKhjCubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleifs_test_msrs (C struct)c.ifs_test_msrshNtauh1jhjCubhdesc)}(hhh](hdesc_signature)}(h ifs_test_msrsh]hdesc_signature_line)}(hstruct ifs_test_msrsh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(h ifs_test_msrsh]h desc_sig_name)}(hjh]h ifs_test_msrs}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h)}(hMSRs used in IFS testsh]hMSRs used in IFS tests}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMLhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjCubh container)}(hX**Definition**:: struct ifs_test_msrs { u32 copy_hashes; u32 copy_hashes_status; u32 copy_chunks; u32 copy_chunks_status; u32 test_ctrl; }; **Members** ``copy_hashes`` Copy test hash data ``copy_hashes_status`` Status of copied test hash data ``copy_chunks`` Copy chunks of the test data ``copy_chunks_status`` Status of the copied test data chunks ``test_ctrl`` Control the test attributesh](h)}(h**Definition**::h](h)}(h**Definition**h]h Definition}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubh:}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMPhj"ubj)}(hstruct ifs_test_msrs { u32 copy_hashes; u32 copy_hashes_status; u32 copy_chunks; u32 copy_chunks_status; u32 test_ctrl; };h]hstruct ifs_test_msrs { u32 copy_hashes; u32 copy_hashes_status; u32 copy_chunks; u32 copy_chunks_status; u32 test_ctrl; };}hjCsbah}(h]h ]h"]h$]h&]hhuh1jh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMRhj"ubh)}(h **Members**h]h)}(hjTh]hMembers}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMZhj"ubhdefinition_list)}(hhh](hdefinition_list_item)}(h$``copy_hashes`` Copy test hash data h](hterm)}(h``copy_hashes``h]hliteral)}(hjyh]h copy_hashes}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjwubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMNhjqubh definition)}(hhh]h)}(hCopy test hash datah]hCopy test hash data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1johjhMNhjlubjp)}(h7``copy_hashes_status`` Status of copied test hash data h](jv)}(h``copy_hashes_status``h]j|)}(hjh]hcopy_hashes_status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMOhjubj)}(hhh]h)}(hStatus of copied test hash datah]hStatus of copied test hash data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMOhjlubjp)}(h-``copy_chunks`` Copy chunks of the test data h](jv)}(h``copy_chunks``h]j|)}(hjh]h copy_chunks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMPhjubj)}(hhh]h)}(hCopy chunks of the test datah]hCopy chunks of the test data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMPhjlubjp)}(h=``copy_chunks_status`` Status of the copied test data chunks h](jv)}(h``copy_chunks_status``h]j|)}(hj(h]hcopy_chunks_status}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj&ubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMQhj"ubj)}(hhh]h)}(h%Status of the copied test data chunksh]h%Status of the copied test data chunks}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMQhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1johj=hMQhjlubjp)}(h)``test_ctrl`` Control the test attributesh](jv)}(h ``test_ctrl``h]j|)}(hjah]h test_ctrl}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj_ubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMQhj[ubj)}(hhh]h)}(hControl the test attributesh]hControl the test attributes}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMRhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1johjvhMQhjlubeh}(h]h ]h"]h$]h&]uh1jjhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjCubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jifs_data (C struct) c.ifs_datahNtauh1jhjCubj)}(hhh](j)}(hifs_datah]j)}(hstruct ifs_datah](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMXubj)}(hifs_datah]j)}(hjh]hifs_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhMXubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMXubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMXhjhhubj)}(hhh]h)}(h&attributes related to intel IFS driverh]h&attributes related to intel IFS driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhM\hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMXubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjCubj!)}(hX**Definition**:: struct ifs_data { int loaded_version; bool loaded; bool loading_error; int valid_chunks; int status; u64 scan_details; u32 cur_batch; u32 generation; u32 chunk_size; u32 array_gen; u32 max_bundle; }; **Members** ``loaded_version`` stores the currently loaded ifs image version. ``loaded`` If a valid test binary has been loaded into the memory ``loading_error`` Error occurred on another CPU while loading image ``valid_chunks`` number of chunks which could be validated. ``status`` it holds simple status pass/fail/untested ``scan_details`` opaque scan status code from h/w ``cur_batch`` number indicating the currently loaded test file ``generation`` IFS test generation enumerated by hardware ``chunk_size`` size of a test chunk ``array_gen`` test generation of array test ``max_bundle`` maximum bundle indexh](h)}(h**Definition**::h](h)}(h**Definition**h]h Definition}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhM`hjubj)}(hstruct ifs_data { int loaded_version; bool loaded; bool loading_error; int valid_chunks; int status; u64 scan_details; u32 cur_batch; u32 generation; u32 chunk_size; u32 array_gen; u32 max_bundle; };h]hstruct ifs_data { int loaded_version; bool loaded; bool loading_error; int valid_chunks; int status; u64 scan_details; u32 cur_batch; u32 generation; u32 chunk_size; u32 array_gen; u32 max_bundle; };}hj:sbah}(h]h ]h"]h$]h&]hhuh1jh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMbhjubh)}(h **Members**h]h)}(hjKh]hMembers}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMphjubjk)}(hhh](jp)}(hB``loaded_version`` stores the currently loaded ifs image version. h](jv)}(h``loaded_version``h]j|)}(hjjh]hloaded_version}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhM^hjdubj)}(hhh]h)}(h.stores the currently loaded ifs image version.h]h.stores the currently loaded ifs image version.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1johjhM^hjaubjp)}(hB``loaded`` If a valid test binary has been loaded into the memory h](jv)}(h ``loaded``h]j|)}(hjh]hloaded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhM_hjubj)}(hhh]h)}(h6If a valid test binary has been loaded into the memoryh]h6If a valid test binary has been loaded into the memory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM_hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhM_hjaubjp)}(hD``loading_error`` Error occurred on another CPU while loading image h](jv)}(h``loading_error``h]j|)}(hjh]h loading_error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhM`hjubj)}(hhh]h)}(h1Error occurred on another CPU while loading imageh]h1Error occurred on another CPU while loading image}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM`hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhM`hjaubjp)}(h<``valid_chunks`` number of chunks which could be validated. h](jv)}(h``valid_chunks``h]j|)}(hjh]h valid_chunks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMahjubj)}(hhh]h)}(h*number of chunks which could be validated.h]h*number of chunks which could be validated.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMahj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johj*hMahjaubjp)}(h5``status`` it holds simple status pass/fail/untested h](jv)}(h ``status``h]j|)}(hjNh]hstatus}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjLubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMbhjHubj)}(hhh]h)}(h)it holds simple status pass/fail/untestedh]h)it holds simple status pass/fail/untested}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMbhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1johjchMbhjaubjp)}(h2``scan_details`` opaque scan status code from h/w h](jv)}(h``scan_details``h]j|)}(hjh]h scan_details}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMchjubj)}(hhh]h)}(h opaque scan status code from h/wh]h opaque scan status code from h/w}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMchjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMchjaubjp)}(h?``cur_batch`` number indicating the currently loaded test file h](jv)}(h ``cur_batch``h]j|)}(hjh]h cur_batch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMdhjubj)}(hhh]h)}(h0number indicating the currently loaded test fileh]h0number indicating the currently loaded test file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johjhMdhjaubjp)}(h:``generation`` IFS test generation enumerated by hardware h](jv)}(h``generation``h]j|)}(hjh]h generation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMehjubj)}(hhh]h)}(h*IFS test generation enumerated by hardwareh]h*IFS test generation enumerated by hardware}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMehj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1johj hMehjaubjp)}(h$``chunk_size`` size of a test chunk h](jv)}(h``chunk_size``h]j|)}(hj2 h]h chunk_size}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj0 ubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMfhj, ubj)}(hhh]h)}(hsize of a test chunkh]hsize of a test chunk}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG hMfhjH ubah}(h]h ]h"]h$]h&]uh1jhj, ubeh}(h]h ]h"]h$]h&]uh1johjG hMfhjaubjp)}(h,``array_gen`` test generation of array test h](jv)}(h ``array_gen``h]j|)}(hjk h]h array_gen}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hji ubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMghje ubj)}(hhh]h)}(htest generation of array testh]htest generation of array test}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMghj ubah}(h]h ]h"]h$]h&]uh1jhje ubeh}(h]h ]h"]h$]h&]uh1johj hMghjaubjp)}(h#``max_bundle`` maximum bundle indexh](jv)}(h``max_bundle``h]j|)}(hj h]h max_bundle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj ubah}(h]h ]h"]h$]h&]uh1juh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMghj ubj)}(hhh]h)}(hmaximum bundle indexh]hmaximum bundle index}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hhMhhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1johj hMghjaubeh}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j hjCubeh}(h].structural-based-functional-test-at-field-sbafah ]h"]1structural based functional test at field (sbaf):ah$]h&]uh1hhhubeh}(h]id1ah ]h"]h$] in-field scanah&]uh1hhh referencedKhhhNhNubeh}(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}f1]j;asrefids}(h]hajK]j;aunameids}(hhjjjjjjKjjj jj@j=j j u nametypes}(hۈjjjjj j@j uh}(hhj hjhjj jEj;jKj\jjjjj=j j jCjjjju footnote_refs}jX ]j;as citation_refs} autofootnotes]j\aautofootnote_refs]j;asymbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j& KsRparse_messages]hsystem_message)}(hhh]h)}(h0Duplicate implicit target name: "in-field scan".h]h4Duplicate implicit target name: “in-field scan”.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]j alevelKtypeINFOsource`/var/lib/git/docbuild/linux/Documentation/arch/x86/ifs:2: ./drivers/platform/x86/intel/ifs/ifs.hlineMkuh1j hhubatransform_messages]j )}(hhh]h)}(hhh]h3Hyperlink target "in-field-scan" is not referenced.}hj sbah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]levelKtypej lineKsourcehuh1j uba transformerN include_log] decorationNhhub.