Dsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget+/translations/zh_CN/driver-api/mmc/mmc-testmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/zh_TW/driver-api/mmc/mmc-testmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/it_IT/driver-api/mmc/mmc-testmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ja_JP/driver-api/mmc/mmc-testmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ko_KR/driver-api/mmc/mmc-testmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/pt_BR/driver-api/mmc/mmc-testmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/sp_SP/driver-api/mmc/mmc-testmodnameN 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:spacepreserveuh1hhhhhhE/var/lib/git/docbuild/linux/Documentation/driver-api/mmc/mmc-test.rsthKubhsection)}(hhh](htitle)}(hMMC Test Frameworkh]hMMC Test Framework}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hOverviewh]hOverview}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hThe `mmc_test` framework is designed to test the performance and reliability of host controller drivers and all devices handled by the MMC subsystem. This includes not only MMC devices but also SD cards and other devices supported by the subsystem.h](hThe }(hhhhhNhNubhtitle_reference)}(h `mmc_test`h]hmmc_test}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh framework is designed to test the performance and reliability of host controller drivers and all devices handled by the MMC subsystem. This includes not only MMC devices but also SD cards and other devices supported by the subsystem.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hX0The framework provides a variety of tests to evaluate different aspects of the host controller and device interactions, such as read and write performance, data integrity, and error handling. These tests help ensure that the host controller drivers and devices operate correctly under various conditions.h]hX0The framework provides a variety of tests to evaluate different aspects of the host controller and device interactions, such as read and write performance, data integrity, and error handling. These tests help ensure that the host controller drivers and devices operate correctly under various conditions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(h4The `mmc_test` framework is particularly useful for:h](hThe }(hj hhhNhNubh)}(h `mmc_test`h]hmmc_test}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh& framework is particularly useful for:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh bullet_list)}(hhh](h list_item)}(hRVerifying the functionality and performance of MMC and SD host controller drivers.h]h)}(hjIh]hRVerifying the functionality and performance of MMC and SD host controller drivers.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjGubah}(h]h ]h"]h$]h&]uh1jEhjBhhhhhNubjF)}(h=Ensuring compatibility and reliability of MMC and SD devices.h]h)}(hj`h]h=Ensuring compatibility and reliability of MMC and SD devices.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj^ubah}(h]h ]h"]h$]h&]uh1jEhjBhhhhhNubjF)}(h8Identifying and diagnosing issues in the MMC subsystem. h]h)}(h7Identifying and diagnosing issues in the MMC subsystem.h]h7Identifying and diagnosing issues in the MMC subsystem.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjuubah}(h]h ]h"]h$]h&]uh1jEhjBhhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1j@hhhKhhhhubh)}(hThe results of the tests are logged in the kernel log, providing detailed information about the test outcomes and any encountered issues.h]hThe results of the tests are logged in the kernel log, providing detailed information about the test outcomes and any encountered issues.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hBNote: whatever is on your card will be overwritten by these tests.h]hBNote: whatever is on your card will be overwritten by these tests.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]overviewah ]h"]overviewah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hInitializationh]hInitialization}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h6To use the ``mmc_test`` framework, follow these steps:h](h To use the }(hjhhhNhNubhliteral)}(h ``mmc_test``h]hmmc_test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh framework, follow these steps:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubhenumerated_list)}(hhh](jF)}(hX**Enable the MMC Test Framework**: Ensure that the ``CONFIG_MMC_TEST`` kernel configuration option is enabled. This can be done by configuring the kernel: .. code-block:: none make menuconfig Navigate to: Device Drivers ---> <*> MMC/SD/SDIO card support ---> [*] MMC host test driver Alternatively, you can enable it directly in the kernel configuration file: .. code-block:: none echo "CONFIG_MMC_TEST=y" >> .config Rebuild and install the kernel if necessary. h](h)}(h"**Enable the MMC Test Framework**:h](hstrong)}(h!**Enable the MMC Test Framework**h]hEnable the MMC Test Framework}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hwEnsure that the ``CONFIG_MMC_TEST`` kernel configuration option is enabled. This can be done by configuring the kernel:h](hEnsure that the }(hjhhhNhNubj)}(h``CONFIG_MMC_TEST``h]hCONFIG_MMC_TEST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhT kernel configuration option is enabled. This can be done by configuring the kernel:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh literal_block)}(hmake menuconfigh]hmake menuconfig}hj5sbah}(h]h ]h"]h$]h&]hhƌforcelanguagenonehighlight_args}uh1j3hhhK!hjubh)}(h Navigate to:h]h Navigate to:}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjubhdefinition_list)}(hhh]hdefinition_list_item)}(hUDevice Drivers ---> <*> MMC/SD/SDIO card support ---> [*] MMC host test driver h](hterm)}(hDevice Drivers --->h]hDevice Drivers --->}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jahhhK)hj]ubh definition)}(hhh]jW)}(hhh]j\)}(h><*> MMC/SD/SDIO card support ---> [*] MMC host test driver h](jb)}(h"<*> MMC/SD/SDIO card support --->h]h"<*> MMC/SD/SDIO card support --->}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jahhhK)hjyubjr)}(hhh]h)}(h[*] MMC host test driverh]h[*] MMC host test driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjubah}(h]h ]h"]h$]h&]uh1jqhjyubeh}(h]h ]h"]h$]h&]uh1j[hhhK)hjvubah}(h]h ]h"]h$]h&]uh1jVhjsubah}(h]h ]h"]h$]h&]uh1jqhj]ubeh}(h]h ]h"]h$]h&]uh1j[hhhK)hjXubah}(h]h ]h"]h$]h&]uh1jVhjubh)}(hKAlternatively, you can enable it directly in the kernel configuration file:h]hKAlternatively, you can enable it directly in the kernel configuration file:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjubj4)}(h#echo "CONFIG_MMC_TEST=y" >> .configh]h#echo "CONFIG_MMC_TEST=y" >> .config}hjsbah}(h]h ]h"]h$]h&]hhjCjDnonejF}uh1j3hhhK-hjubh)}(h,Rebuild and install the kernel if necessary.h]h,Rebuild and install the kernel if necessary.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjubeh}(h]h ]h"]h$]h&]uh1jEhjhhhhhNubjF)}(h**Load the MMC Test Module**: If the ``mmc_test`` framework is built as a module, you need to load it using ``modprobe``: .. code-block:: none modprobe mmc_test h](h)}(h**Load the MMC Test Module**:h](j)}(h**Load the MMC Test Module**h]hLoad the MMC Test Module}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK3hjubh)}(h[If the ``mmc_test`` framework is built as a module, you need to load it using ``modprobe``:h](hIf the }(hjhhhNhNubj)}(h ``mmc_test``h]hmmc_test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh; framework is built as a module, you need to load it using }(hjhhhNhNubj)}(h ``modprobe``h]hmodprobe}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK5hjubj4)}(hmodprobe mmc_testh]hmodprobe mmc_test}hjDsbah}(h]h ]h"]h$]h&]hhjCjDnonejF}uh1j3hhhK7hjubeh}(h]h ]h"]h$]h&]uh1jEhjhhhNhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jhjhhhhhKubeh}(h]initializationah ]h"]initializationah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Binding the MMC Card for Testingh]h Binding the MMC Card for Testing}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhhhhhKhjmhhubj)}(hhh](jF)}(hIdentify the MMC card: .. code-block:: sh ls /sys/bus/mmc/devices/ This will list the MMC devices, such as ``mmc0:0001``. h](h)}(hIdentify the MMC card:h]hIdentify the MMC card:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK@hjubj4)}(hls /sys/bus/mmc/devices/h]hls /sys/bus/mmc/devices/}hjsbah}(h]h ]h"]h$]h&]hhjCjDshjF}uh1j3hhhKBhjubh)}(h6This will list the MMC devices, such as ``mmc0:0001``.h](h(This will list the MMC devices, such as }(hjhhhNhNubj)}(h ``mmc0:0001``h]h mmc0:0001}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKFhjubeh}(h]h ]h"]h$]h&]uh1jEhjhhhhhNubjF)}(h~Unbind the MMC card from the ``mmcblk`` driver: .. code-block:: sh echo 'mmc0:0001' > /sys/bus/mmc/drivers/mmcblk/unbind h](h)}(h/Unbind the MMC card from the ``mmcblk`` driver:h](hUnbind the MMC card from the }(hjhhhNhNubj)}(h ``mmcblk``h]hmmcblk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh driver:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKHhj ubj4)}(h5echo 'mmc0:0001' > /sys/bus/mmc/drivers/mmcblk/unbindh]h5echo 'mmc0:0001' > /sys/bus/mmc/drivers/mmcblk/unbind}hj1sbah}(h]h ]h"]h$]h&]hhjCjDshjF}uh1j3hhhKJhj ubeh}(h]h ]h"]h$]h&]uh1jEhjhhhNhNubjF)}(h|Bind the MMC card to the ``mmc_test`` driver: .. code-block:: sh echo 'mmc0:0001' > /sys/bus/mmc/drivers/mmc_test/bind h](h)}(h-Bind the MMC card to the ``mmc_test`` driver:h](hBind the MMC card to the }(hjKhhhNhNubj)}(h ``mmc_test``h]hmmc_test}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh driver:}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKNhjGubj4)}(h5echo 'mmc0:0001' > /sys/bus/mmc/drivers/mmc_test/bindh]h5echo 'mmc0:0001' > /sys/bus/mmc/drivers/mmc_test/bind}hjksbah}(h]h ]h"]h$]h&]hhjCjDshjF}uh1j3hhhKPhjGubeh}(h]h ]h"]h$]h&]uh1jEhjhhhNhNubeh}(h]h ]h"]h$]h&]j`jajbhjcjduh1jhjmhhhhhK@ubh)}(hmAfter binding, you should see a line in the kernel log indicating that the card has been claimed for testing:h]hmAfter binding, you should see a line in the kernel log indicating that the card has been claimed for testing:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjmhhubj4)}(h-mmc_test mmc0:0001: Card claimed for testing.h]h-mmc_test mmc0:0001: Card claimed for testing.}hjsbah}(h]h ]h"]h$]h&]hhjCjDnonejF}uh1j3hhhKVhjmhhubeh}(h] binding-the-mmc-card-for-testingah ]h"] binding the mmc card for testingah$]h&]uh1hhhhhhhhK > /sys/kernel/debug/mmc0/mmc0:0001/test The test result is indicated in the kernel log info. You can view the kernel log using the `dmesg` command or by checking the log file in `/var/log/`. .. code-block:: sh dmesg | grep mmc0 Example: To run test number 4 (Basic read with data verification): .. code-block:: sh echo 4 > /sys/kernel/debug/mmc0/mmc0:0001/test Check the kernel log for the result: .. code-block:: sh dmesg | grep mmc0 h](h)}(h **test**:h](j)}(h**test**h]htest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK`hjubh)}(h^This file is used to run specific tests. Write the test number to this file to execute a test.h]h^This file is used to run specific tests. Write the test number to this file to execute a test.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhjubj4)}(h:echo > /sys/kernel/debug/mmc0/mmc0:0001/testh]h:echo > /sys/kernel/debug/mmc0/mmc0:0001/test}hj!sbah}(h]h ]h"]h$]h&]hhjCjDshjF}uh1j3hhhKdhjubh)}(hThe test result is indicated in the kernel log info. You can view the kernel log using the `dmesg` command or by checking the log file in `/var/log/`.h](h[The test result is indicated in the kernel log info. You can view the kernel log using the }(hj1hhhNhNubh)}(h`dmesg`h]hdmesg}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ubh( command or by checking the log file in }(hj1hhhNhNubh)}(h `/var/log/`h]h /var/log/}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ubh.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhjubj4)}(hdmesg | grep mmc0h]hdmesg | grep mmc0}hjcsbah}(h]h ]h"]h$]h&]hhjCjDshjF}uh1j3hhhKjhjubh)}(hExample:h]hExample:}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKnhjubh)}(h9To run test number 4 (Basic read with data verification):h]h9To run test number 4 (Basic read with data verification):}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKphjubj4)}(h.echo 4 > /sys/kernel/debug/mmc0/mmc0:0001/testh]h.echo 4 > /sys/kernel/debug/mmc0/mmc0:0001/test}hjsbah}(h]h ]h"]h$]h&]hhjCjDshjF}uh1j3hhhKrhjubh)}(h$Check the kernel log for the result:h]h$Check the kernel log for the result:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKvhjubj4)}(hdmesg | grep mmc0h]hdmesg | grep mmc0}hjsbah}(h]h ]h"]h$]h&]hhjCjDshjF}uh1j3hhhKxhjubeh}(h]h ]h"]h$]h&]uh1jEhjhhhNhNubjF)}(h**testlist**: This file lists all available tests. You can read this file to see the list of tests and their corresponding numbers. .. code-block:: sh cat /sys/kernel/debug/mmc0/mmc0:0001/testlist The available tests are listed in the table below: h](h)}(h **testlist**:h](j)}(h **testlist**h]htestlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK|hjubh)}(huThis file lists all available tests. You can read this file to see the list of tests and their corresponding numbers.h]huThis file lists all available tests. You can read this file to see the list of tests and their corresponding numbers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK~hjubj4)}(h-cat /sys/kernel/debug/mmc0/mmc0:0001/testlisth]h-cat /sys/kernel/debug/mmc0/mmc0:0001/testlist}hjsbah}(h]h ]h"]h$]h&]hhjCjDshjF}uh1j3hhhKhjubh)}(h2The available tests are listed in the table below:h]h2The available tests are listed in the table below:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1jEhjhhhhhNubeh}(h]h ]h"]h$]h&]j`jajbhjcjduh1jhjhhhhhK`ubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j%hj"ubj&)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j%hj"ubj&)}(hhh]h}(h]h ]h"]h$]h&]colwidthK-uh1j%hj"ubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hTesth]hTest}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjQubah}(h]h ]h"]h$]h&]uh1jOhjLubjP)}(hhh]h)}(h Test Nameh]h Test Name}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhubah}(h]h ]h"]h$]h&]uh1jOhjLubjP)}(hhh]h)}(hTest Descriptionh]hTest Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjLubeh}(h]h ]h"]h$]h&]uh1jJhjGubah}(h]h ]h"]h$]h&]uh1jEhj"ubhtbody)}(hhh](jK)}(hhh](jP)}(hhh]h)}(h0h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(h Run all testsh]h Run all tests}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hRuns all available testsh]hRuns all available tests}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h1h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(h Basic writeh]h Basic write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hfPerforms a basic write operation of a single 512-Byte block to the MMC card without data verification.h]hfPerforms a basic write operation of a single 512-Byte block to the MMC card without data verification.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj&ubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h2h]h2}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFubah}(h]h ]h"]h$]h&]uh1jOhjCubjP)}(hhh]h)}(h Basic readh]h Basic read}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj]ubah}(h]h ]h"]h$]h&]uh1jOhjCubjP)}(hhh]h)}(h Same for readh]h Same for read}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjtubah}(h]h ]h"]h$]h&]uh1jOhjCubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h3h]h3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(h$Basic write (with data verification)h]h$Basic write (with data verification)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hPerforms a basic write operation of a single 512-Byte block to the MMC card with data verification by reading back the written data and comparing it.h]hPerforms a basic write operation of a single 512-Byte block to the MMC card with data verification by reading back the written data and comparing it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h4h]h4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(h#Basic read (with data verification)h]h#Basic read (with data verification)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(h Same for readh]h Same for read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h5h]h5}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj0ubah}(h]h ]h"]h$]h&]uh1jOhj-ubjP)}(hhh]h)}(hMulti-block writeh]hMulti-block write}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjGubah}(h]h ]h"]h$]h&]uh1jOhj-ubjP)}(hhh]h)}(hTPerforms a multi-block write operation of 8 blocks (each 512 bytes) to the MMC card.h]hTPerforms a multi-block write operation of 8 blocks (each 512 bytes) to the MMC card.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj^ubah}(h]h ]h"]h$]h&]uh1jOhj-ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h6h]h6}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj~ubah}(h]h ]h"]h$]h&]uh1jOhj{ubjP)}(hhh]h)}(hMulti-block readh]hMulti-block read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhj{ubjP)}(hhh]h)}(h Same for readh]h Same for read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhj{ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h7h]h7}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hPower of two block writesh]hPower of two block writes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hyPerforms write operations with block sizes that are powers of two, starting from 1 byte up to 256 bytes, to the MMC card.h]hyPerforms write operations with block sizes that are powers of two, starting from 1 byte up to 256 bytes, to the MMC card.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h8h]h8}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hPower of two block readsh]hPower of two block reads}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj1 ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(h Same for readh]h Same for read}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjH ubah}(h]h ]h"]h$]h&]uh1jOhj ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h9h]h9}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjh ubah}(h]h ]h"]h$]h&]uh1jOhje ubjP)}(hhh]h)}(hWeird sized block writesh]hWeird sized block writes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhje ubjP)}(hhh]h)}(hPerforms write operations with varying block sizes starting from 3 bytes and increasing by 7 bytes each iteration, up to 511 bytes, to the MMC card.h]hPerforms write operations with varying block sizes starting from 3 bytes and increasing by 7 bytes each iteration, up to 511 bytes, to the MMC card.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhje ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h10h]h10}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hWeird sized block readsh]hWeird sized block reads}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(h same for readh]h same for read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h11h]h11}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hBadly aligned writeh]hBadly aligned write}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hPerforms write operations with buffers starting at different alignments (0 to 7 bytes offset) to test how the MMC card handles unaligned data transfers.h]hPerforms write operations with buffers starting at different alignments (0 to 7 bytes offset) to test how the MMC card handles unaligned data transfers.}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj2 ubah}(h]h ]h"]h$]h&]uh1jOhj ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h12h]h12}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjR ubah}(h]h ]h"]h$]h&]uh1jOhjO ubjP)}(hhh]h)}(hBadly aligned readh]hBadly aligned read}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhji ubah}(h]h ]h"]h$]h&]uh1jOhjO ubjP)}(hhh]h)}(h same for readh]h same for read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhjO ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h13h]h13}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hBadly aligned multi-block writeh]hBadly aligned multi-block write}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hsame for multi-writeh]hsame for multi-write}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h14h]h14}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hBadly aligned multi-block readh]hBadly aligned multi-block read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hsame for multi-readh]hsame for multi-read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h15h]h15}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj< ubah}(h]h ]h"]h$]h&]uh1jOhj9 ubjP)}(hhh]h)}(h)Proper xfer_size at write (Start failure)h]h)Proper xfer_size at write (Start failure)}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjS ubah}(h]h ]h"]h$]h&]uh1jOhj9 ubjP)}(hhh]h)}(hintentionally create a broken transfer by modifying the MMC request in a way that it will not perform as expected, e.g. use MMC_WRITE_BLOCK for a multi-block transferh]hintentionally create a broken transfer by modifying the MMC request in a way that it will not perform as expected, e.g. use MMC_WRITE_BLOCK for a multi-block transfer}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjj ubah}(h]h ]h"]h$]h&]uh1jOhj9 ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h16h]h16}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(h(Proper xfer_size at read (Start failure)h]h(Proper xfer_size at read (Start failure)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(h same for readh]h same for read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h17h]h17}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(h*Proper xfer_size at write (Midway failure)h]h*Proper xfer_size at write (Midway failure)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hsame for 2 blocksh]hsame for 2 blocks}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h18h]h18}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj& ubah}(h]h ]h"]h$]h&]uh1jOhj# ubjP)}(hhh]h)}(h)Proper xfer_size at read (Midway failure)h]h)Proper xfer_size at read (Midway failure)}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj= ubah}(h]h ]h"]h$]h&]uh1jOhj# ubjP)}(hhh]h)}(h same for readh]h same for read}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjT ubah}(h]h ]h"]h$]h&]uh1jOhj# ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h19h]h19}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjt ubah}(h]h ]h"]h$]h&]uh1jOhjq ubjP)}(hhh]h)}(h Highmem writeh]h Highmem write}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhjq ubjP)}(hhh]h)}(huse a high memory pageh]huse a high memory page}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhjq ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h20h]h20}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(h Highmem readh]h Highmem read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(h same for readh]h same for read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h21h]h21}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hMulti-block highmem writeh]hMulti-block highmem write}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj' ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hsame for multi-writeh]hsame for multi-write}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj> ubah}(h]h ]h"]h$]h&]uh1jOhj ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h22h]h22}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj^ ubah}(h]h ]h"]h$]h&]uh1jOhj[ ubjP)}(hhh]h)}(hMulti-block highmem readh]hMulti-block highmem read}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhju ubah}(h]h ]h"]h$]h&]uh1jOhj[ ubjP)}(hhh]h)}(hsame for mult-readh]hsame for mult-read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj[ ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h23h]h23}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hBest-case read performanceh]hBest-case read performance}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(h&Performs 512K sequential read (non sg)h]h&Performs 512K sequential read (non sg)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h24h]h24}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hBest-case write performanceh]hBest-case write performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhj ubjP)}(hhh]h)}(hsame for writeh]hsame for write}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj(ubah}(h]h ]h"]h$]h&]uh1jOhj ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h25h]h25}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjHubah}(h]h ]h"]h$]h&]uh1jOhjEubjP)}(hhh]h)}(h1Best-case read performance (Into scattered pages)h]h1Best-case read performance (Into scattered pages)}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj_ubah}(h]h ]h"]h$]h&]uh1jOhjEubjP)}(hhh]h)}(h Same using sgh]h Same using sg}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjvubah}(h]h ]h"]h$]h&]uh1jOhjEubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h26h]h26}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(h2Best-case write performance (From scattered pages)h]h2Best-case write performance (From scattered pages)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hsame for writeh]hsame for write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h27h]h27}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hSingle read performanceh]hSingle read performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h28h]h28}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj2ubah}(h]h ]h"]h$]h&]uh1jOhj/ubjP)}(hhh]h)}(hSingle write performanceh]hSingle write performance}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjIubah}(h]h ]h"]h$]h&]uh1jOhj/ubjP)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj`ubah}(h]h ]h"]h$]h&]uh1jOhj/ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h29h]h29}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhj}ubjP)}(hhh]h)}(hSingle trim performanceh]hSingle trim performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhj}ubjP)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhj}ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h30h]h30}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hConsecutive read performanceh]hConsecutive read performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h31h]h31}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hConsecutive write performanceh]hConsecutive write performance}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj3ubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjJubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h32h]h32}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjjubah}(h]h ]h"]h$]h&]uh1jOhjgubjP)}(hhh]h)}(hConsecutive trim performanceh]hConsecutive trim performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjgubjP)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjgubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h33h]h33}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hRandom read performanceh]hRandom read performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h34h]h34}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hRandom write performanceh]hRandom write performance}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj4ubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h35h]h35}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjTubah}(h]h ]h"]h$]h&]uh1jOhjQubjP)}(hhh]h)}(hLarge sequential readh]hLarge sequential read}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjkubah}(h]h ]h"]h$]h&]uh1jOhjQubjP)}(hhh]h)}(hInto scattered pagesh]hInto scattered pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjQubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h36h]h36}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hLarge sequential writeh]hLarge sequential write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hFrom scattered pagesh]hFrom scattered pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h37h]h37}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hWrite performanceh]hWrite performance}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hWith blocking req 4k to 4MBh]hWith blocking req 4k to 4MB}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h38h]h38}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj>ubah}(h]h ]h"]h$]h&]uh1jOhj;ubjP)}(hhh]h)}(hWrite performanceh]hWrite performance}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjUubah}(h]h ]h"]h$]h&]uh1jOhj;ubjP)}(hhh]h)}(hWith non-blocking req 4k to 4MBh]hWith non-blocking req 4k to 4MB}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjlubah}(h]h ]h"]h$]h&]uh1jOhj;ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h39h]h39}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hRead performanceh]hRead performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hWith blocking req 4k to 4MBh]hWith blocking req 4k to 4MB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h40h]h40}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hRead performanceh]hRead performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hWith non-blocking req 4k to 4MBh]hWith non-blocking req 4k to 4MB}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h41h]h41}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj(ubah}(h]h ]h"]h$]h&]uh1jOhj%ubjP)}(hhh]h)}(hWrite performanceh]hWrite performance}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj?ubah}(h]h ]h"]h$]h&]uh1jOhj%ubjP)}(hhh]h)}(hBlocking req 1 to 512 sg elemsh]hBlocking req 1 to 512 sg elems}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjVubah}(h]h ]h"]h$]h&]uh1jOhj%ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h42h]h42}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjvubah}(h]h ]h"]h$]h&]uh1jOhjsubjP)}(hhh]h)}(hWrite performanceh]hWrite performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjsubjP)}(hhh]h)}(h"Non-blocking req 1 to 512 sg elemsh]h"Non-blocking req 1 to 512 sg elems}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjsubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h43h]h43}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hRead performanceh]hRead performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hBlocking req 1 to 512 sg elemsh]hBlocking req 1 to 512 sg elems}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h44h]h44}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hRead performanceh]hRead performance}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj)ubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(h"Non-blocking req 1 to 512 sg elemsh]h"Non-blocking req 1 to 512 sg elems}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj@ubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h45h]h45}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj`ubah}(h]h ]h"]h$]h&]uh1jOhj]ubjP)}(hhh]h)}(h Reset testh]h Reset test}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjwubah}(h]h ]h"]h$]h&]uh1jOhj]ubjP)}(hhh]h}(h]h ]h"]h$]h&]uh1jOhj]ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h46h]h46}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hCommands during readh]hCommands during read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hNo Set Block Count (CMD23)h]hNo Set Block Count (CMD23)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h47h]h47}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hCommands during writeh]hCommands during write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hNo Set Block Count (CMD23)h]hNo Set Block Count (CMD23)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h48h]h48}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj<ubah}(h]h ]h"]h$]h&]uh1jOhj9ubjP)}(hhh]h)}(hCommands during readh]hCommands during read}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjSubah}(h]h ]h"]h$]h&]uh1jOhj9ubjP)}(hhh]h)}(hUse Set Block Count (CMD23)h]hUse Set Block Count (CMD23)}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjjubah}(h]h ]h"]h$]h&]uh1jOhj9ubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h49h]h49}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hCommands during writeh]hCommands during write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hUse Set Block Count (CMD23)h]hUse Set Block Count (CMD23)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h50h]h50}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(hCommands during non-blockingh]hCommands during non-blocking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jOhjubjP)}(hhh]h)}(h"Read - use Set Block Count (CMD23)h]h"Read - use Set Block Count (CMD23)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jOhjubeh}(h]h ]h"]h$]h&]uh1jJhjubjK)}(hhh](jP)}(hhh]h)}(h51h]h51}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj&ubah}(h]h ]h"]h$]h&]uh1jOhj#ubjP)}(hhh]h)}(hCommands during non-blockingh]hCommands during non-blocking}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj=ubah}(h]h ]h"]h$]h&]uh1jOhj#ubjP)}(hhh]h)}(h#Write - use Set Block Count (CMD23)h]h#Write - use Set Block Count (CMD23)}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjTubah}(h]h ]h"]h$]h&]uh1jOhj#ubeh}(h]h ]h"]h$]h&]uh1jJhjubeh}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]colsKuh1j hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]usage-debugfs-entriesah ]h"]usage - debugfs entriesah$]h&]uh1hhhhhhhhK\ubh)}(hhh](h)}(h Test Resultsh]h Test Results}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM ubh)}(hThe results of the tests are logged in the kernel log. Each test logs the start, end, and result of the test. The possible results are:h]hThe results of the tests are logged in the kernel log. Each test logs the start, end, and result of the test. The possible results are:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjhhubjA)}(hhh](jF)}(h(**OK**: The test completed successfully.h]h)}(hjh](j)}(h**OK**h]hOK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh": The test completed successfully.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jEhjhhhhhNubjF)}(h**FAILED**: The test failed.h]h)}(hjh](j)}(h **FAILED**h]hFAILED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: The test failed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jEhjhhhhhNubjF)}(h?**UNSUPPORTED (by host)**: The test is unsupported by the host.h]h)}(hjh](j)}(h**UNSUPPORTED (by host)**h]hUNSUPPORTED (by host)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh&: The test is unsupported by the host.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jEhjhhhhhNubjF)}(h?**UNSUPPORTED (by card)**: The test is unsupported by the card.h]h)}(hjh](j)}(h**UNSUPPORTED (by card)**h]hUNSUPPORTED (by card)}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh&: The test is unsupported by the card.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jEhjhhhhhNubjF)}(h.**ERROR**: An error occurred during the test. h]h)}(h-**ERROR**: An error occurred during the test.h](j)}(h **ERROR**h]hERROR}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh$: An error occurred during the test.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjBubah}(h]h ]h"]h$]h&]uh1jEhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1j@hhhMhjhhubeh}(h] test-resultsah ]h"] test resultsah$]h&]uh1hhhhhhhhM ubh)}(hhh](h)}(hExample Kernel Log Outputh]hExample Kernel Log Output}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhhhhhMubh)}(hYWhen running a test, you will see log entries similar to the following in the kernel log:h]hYWhen running a test, you will see log entries similar to the following in the kernel log:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjvhhubj4)}(h[ 1234.567890] mmc0: Starting tests of card mmc0:0001... [ 1234.567891] mmc0: Test case 4. Basic read (with data verification)... [ 1234.567892] mmc0: Result: OK [ 1234.567893] mmc0: Tests completed.h]h[ 1234.567890] mmc0: Starting tests of card mmc0:0001... [ 1234.567891] mmc0: Test case 4. Basic read (with data verification)... [ 1234.567892] mmc0: Result: OK [ 1234.567893] mmc0: Tests completed.}hjsbah}(h]h ]h"]h$]h&]hhjCjDnonejF}uh1j3hhhMhjvhhubh)}(heIn this example, test case 4 (Basic read with data verification) was executed, and the result was OK.h]heIn this example, test case 4 (Basic read with data verification) was executed, and the result was OK.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjvhhubeh}(h]example-kernel-log-outputah ]h"]example kernel log outputah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h Contributingh]h Contributing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM$ubh)}(hContributions to the `mmc_test` framework are welcome. Please follow the standard Linux kernel contribution guidelines and submit patches to the appropriate maintainers.h](hContributions to the }(hjhhhNhNubh)}(h `mmc_test`h]hmmc_test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh framework are welcome. Please follow the standard Linux kernel contribution guidelines and submit patches to the appropriate maintainers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM&hjhhubeh}(h] contributingah ]h"] contributingah$]h&]uh1hhhhhhhhM$ubh)}(hhh](h)}(hContacth]hContact}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM)ubh)}(hWFor more information or to report issues, please contact the MMC subsystem maintainers.h]hWFor more information or to report issues, please contact the MMC subsystem maintainers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM+hjhhubeh}(h]contactah ]h"]contactah$]h&]uh1hhhhhhhhM)ubeh}(h]mmc-test-frameworkah ]h"]mmc test frameworkah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksjOfootnote_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_handlerjEerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j jjjjjjgjjjjjsjpjjjjjju nametypes}(j jjjjjjsjjjuh}(jhjhjgjjjmjjjpjjjvjjjju 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.