jsphinx.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]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.}(hhhhhNhNubah}(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}(hjhhhNhNubah}(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)}(hj5h]hRVerifying the functionality and performance of MMC and SD host controller drivers.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj3ubah}(h]h ]h"]h$]h&]uh1j1hj.hhhhhNubj2)}(h=Ensuring compatibility and reliability of MMC and SD devices.h]h)}(hjLh]h=Ensuring compatibility and reliability of MMC and SD devices.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjJubah}(h]h ]h"]h$]h&]uh1j1hj.hhhhhNubj2)}(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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjaubah}(h]h ]h"]h$]h&]uh1j1hj.hhhhhNubeh}(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](j2)}(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}hj!sbah}(h]h ]h"]h$]h&]hhforcelanguagenonehighlight_args}uh1jhhhK!hjubh)}(h Navigate to:h]h Navigate to:}(hj4hhhNhNubah}(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 --->}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jMhhhK)hjIubh definition)}(hhh]jC)}(hhh]jH)}(h><*> MMC/SD/SDIO card support ---> [*] MMC host test driver h](jN)}(h"<*> MMC/SD/SDIO card support --->h]h"<*> MMC/SD/SDIO card support --->}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jMhhhK)hjeubj^)}(hhh]h)}(h[*] MMC host test driverh]h[*] MMC host test driver}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjwubah}(h]h ]h"]h$]h&]uh1j]hjeubeh}(h]h ]h"]h$]h&]uh1jGhhhK)hjbubah}(h]h ]h"]h$]h&]uh1jBhj_ubah}(h]h ]h"]h$]h&]uh1j]hjIubeh}(h]h ]h"]h$]h&]uh1jGhhhK)hjDubah}(h]h ]h"]h$]h&]uh1jBhjubh)}(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+hjubj )}(h#echo "CONFIG_MMC_TEST=y" >> .configh]h#echo "CONFIG_MMC_TEST=y" >> .config}hjsbah}(h]h ]h"]h$]h&]hhj/j0nonej2}uh1jhhhK-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&]uh1j1hjhhhhhNubj2)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK5hjubj )}(hmodprobe mmc_testh]hmodprobe mmc_test}hj0sbah}(h]h ]h"]h$]h&]hhj/j0nonej2}uh1jhhhK7hjubeh}(h]h ]h"]h$]h&]uh1j1hjhhhNhNubeh}(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}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhhhhhKhjYhhubj)}(hhh](j2)}(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@hjubj )}(hls /sys/bus/mmc/devices/h]hls /sys/bus/mmc/devices/}hjsbah}(h]h ]h"]h$]h&]hhj/j0shj2}uh1jhhhKBhjubh)}(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&]uh1j1hjhhhhhNubj2)}(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&]uh1hhhhKHhjubj )}(h5echo 'mmc0:0001' > /sys/bus/mmc/drivers/mmcblk/unbindh]h5echo 'mmc0:0001' > /sys/bus/mmc/drivers/mmcblk/unbind}hjsbah}(h]h ]h"]h$]h&]hhj/j0shj2}uh1jhhhKJhjubeh}(h]h ]h"]h$]h&]uh1j1hjhhhNhNubj2)}(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 }(hj7hhhNhNubj)}(h ``mmc_test``h]hmmc_test}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh driver:}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKNhj3ubj )}(h5echo 'mmc0:0001' > /sys/bus/mmc/drivers/mmc_test/bindh]h5echo 'mmc0:0001' > /sys/bus/mmc/drivers/mmc_test/bind}hjWsbah}(h]h ]h"]h$]h&]hhj/j0shj2}uh1jhhhKPhj3ubeh}(h]h ]h"]h$]h&]uh1j1hjhhhNhNubeh}(h]h ]h"]h$]h&]jLjMjNhjOjPuh1jhjYhhhhhK@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:}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjYhhubj )}(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&]hhj/j0nonej2}uh1jhhhKVhjYhhubeh}(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&]uh1hhhhKbhjubj )}(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&]hhj/j0shj2}uh1jhhhKdhjubh)}(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 }(hjhhhNhNubh)}(h`dmesg`h]hdmesg}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh( command or by checking the log file in }(hjhhhNhNubh)}(h `/var/log/`h]h /var/log/}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhjubj )}(hdmesg | grep mmc0h]hdmesg | grep mmc0}hjOsbah}(h]h ]h"]h$]h&]hhj/j0shj2}uh1jhhhKjhjubh)}(hExample:h]hExample:}(hj_hhhNhNubah}(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):}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKphjubj )}(h.echo 4 > /sys/kernel/debug/mmc0/mmc0:0001/testh]h.echo 4 > /sys/kernel/debug/mmc0/mmc0:0001/test}hj{sbah}(h]h ]h"]h$]h&]hhj/j0shj2}uh1jhhhKrhjubh)}(h$Check the kernel log for the result:h]h$Check the kernel log for the result:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKvhjubj )}(hdmesg | grep mmc0h]hdmesg | grep mmc0}hjsbah}(h]h ]h"]h$]h&]hhj/j0shj2}uh1jhhhKxhjubeh}(h]h ]h"]h$]h&]uh1j1hjhhhNhNubj2)}(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~hjubj )}(h-cat /sys/kernel/debug/mmc0/mmc0:0001/testlisth]h-cat /sys/kernel/debug/mmc0/mmc0:0001/testlist}hjsbah}(h]h ]h"]h$]h&]hhj/j0shj2}uh1jhhhKhjubh)}(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&]uh1j1hjhhhhhNubeh}(h]h ]h"]h$]h&]jLjMjNhjOjPuh1jhjhhhhhK`ubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK-uh1jhjubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hTesth]hTest}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj=ubah}(h]h ]h"]h$]h&]uh1j;hj8ubj<)}(hhh]h)}(h Test Nameh]h Test Name}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjTubah}(h]h ]h"]h$]h&]uh1j;hj8ubj<)}(hhh]h)}(hTest Descriptionh]hTest Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjkubah}(h]h ]h"]h$]h&]uh1j;hj8ubeh}(h]h ]h"]h$]h&]uh1j6hj3ubah}(h]h ]h"]h$]h&]uh1j1hjubhtbody)}(hhh](j7)}(hhh](j<)}(hhh]h)}(h0h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(h Run all testsh]h Run all tests}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hRuns all available testsh]hRuns all available tests}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h1h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(h Basic writeh]h Basic write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h2h]h2}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj2ubah}(h]h ]h"]h$]h&]uh1j;hj/ubj<)}(hhh]h)}(h Basic readh]h Basic read}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjIubah}(h]h ]h"]h$]h&]uh1j;hj/ubj<)}(hhh]h)}(h Same for readh]h Same for read}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj`ubah}(h]h ]h"]h$]h&]uh1j;hj/ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h3h]h3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hj}ubj<)}(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&]uh1j;hj}ubj<)}(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&]uh1j;hj}ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h4h]h4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(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&]uh1j;hjubj<)}(hhh]h)}(h Same for readh]h Same for read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h5h]h5}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hMulti-block writeh]hMulti-block write}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj3ubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(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.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjJubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h6h]h6}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjjubah}(h]h ]h"]h$]h&]uh1j;hjgubj<)}(hhh]h)}(hMulti-block readh]hMulti-block read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjgubj<)}(hhh]h)}(h Same for readh]h Same for read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjgubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h7h]h7}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hPower of two block writesh]hPower of two block writes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(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&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h8h]h8}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(hhh]h)}(hPower of two block readsh]hPower of two block reads}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(hhh]h)}(h Same for readh]h Same for read}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj4 ubah}(h]h ]h"]h$]h&]uh1j;hj ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h9h]h9}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjT ubah}(h]h ]h"]h$]h&]uh1j;hjQ ubj<)}(hhh]h)}(hWeird sized block writesh]hWeird sized block writes}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjk ubah}(h]h ]h"]h$]h&]uh1j;hjQ ubj<)}(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&]uh1j;hjQ ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h10h]h10}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(hhh]h)}(hWeird sized block readsh]hWeird sized block reads}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(hhh]h)}(h same for readh]h same for read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h11h]h11}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(hhh]h)}(hBadly aligned writeh]hBadly aligned write}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(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.}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h12h]h12}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj> ubah}(h]h ]h"]h$]h&]uh1j;hj; ubj<)}(hhh]h)}(hBadly aligned readh]hBadly aligned read}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjU ubah}(h]h ]h"]h$]h&]uh1j;hj; ubj<)}(hhh]h)}(h same for readh]h same for read}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjl ubah}(h]h ]h"]h$]h&]uh1j;hj; ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h13h]h13}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(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&]uh1j;hj ubj<)}(hhh]h)}(hsame for multi-writeh]hsame for multi-write}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h14h]h14}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(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&]uh1j;hj ubj<)}(hhh]h)}(hsame for multi-readh]hsame for multi-read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h15h]h15}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj( ubah}(h]h ]h"]h$]h&]uh1j;hj% ubj<)}(hhh]h)}(h)Proper xfer_size at write (Start failure)h]h)Proper xfer_size at write (Start failure)}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj? ubah}(h]h ]h"]h$]h&]uh1j;hj% ubj<)}(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}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjV ubah}(h]h ]h"]h$]h&]uh1j;hj% ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h16h]h16}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjv ubah}(h]h ]h"]h$]h&]uh1j;hjs ubj<)}(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&]uh1j;hjs ubj<)}(hhh]h)}(h same for readh]h same for read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hjs ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h17h]h17}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(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&]uh1j;hj ubj<)}(hhh]h)}(hsame for 2 blocksh]hsame for 2 blocks}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h18h]h18}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(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&]uh1j;hj ubj<)}(hhh]h)}(h same for readh]h same for read}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj@ ubah}(h]h ]h"]h$]h&]uh1j;hj ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h19h]h19}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj` ubah}(h]h ]h"]h$]h&]uh1j;hj] ubj<)}(hhh]h)}(h Highmem writeh]h Highmem write}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjw ubah}(h]h ]h"]h$]h&]uh1j;hj] ubj<)}(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&]uh1j;hj] ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h20h]h20}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(hhh]h)}(h Highmem readh]h Highmem read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(hhh]h)}(h same for readh]h same for read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h21h]h21}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(hhh]h)}(hMulti-block highmem writeh]hMulti-block highmem write}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(hhh]h)}(hsame for multi-writeh]hsame for multi-write}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj* ubah}(h]h ]h"]h$]h&]uh1j;hj ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h22h]h22}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjJ ubah}(h]h ]h"]h$]h&]uh1j;hjG ubj<)}(hhh]h)}(hMulti-block highmem readh]hMulti-block highmem read}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhja ubah}(h]h ]h"]h$]h&]uh1j;hjG ubj<)}(hhh]h)}(hsame for mult-readh]hsame for mult-read}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjx ubah}(h]h ]h"]h$]h&]uh1j;hjG ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h23h]h23}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(hhh]h)}(hBest-case read performanceh]hBest-case read performance}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(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&]uh1j;hj ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h24h]h24}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(hhh]h)}(hBest-case write performanceh]hBest-case write performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hj ubj<)}(hhh]h)}(hsame for writeh]hsame for write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hj ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h25h]h25}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj4ubah}(h]h ]h"]h$]h&]uh1j;hj1ubj<)}(hhh]h)}(h1Best-case read performance (Into scattered pages)h]h1Best-case read performance (Into scattered pages)}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjKubah}(h]h ]h"]h$]h&]uh1j;hj1ubj<)}(hhh]h)}(h Same using sgh]h Same using sg}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjbubah}(h]h ]h"]h$]h&]uh1j;hj1ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h26h]h26}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(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&]uh1j;hjubj<)}(hhh]h)}(hsame for writeh]hsame for write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h27h]h27}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hSingle read performanceh]hSingle read performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h28h]h28}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hSingle write performanceh]hSingle write performance}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5ubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjLubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h29h]h29}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjlubah}(h]h ]h"]h$]h&]uh1j;hjiubj<)}(hhh]h)}(hSingle trim performanceh]hSingle trim performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjiubj<)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjiubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h30h]h30}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hConsecutive read performanceh]hConsecutive read performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h31h]h31}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hConsecutive write performanceh]hConsecutive write performance}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj6ubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h32h]h32}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjVubah}(h]h ]h"]h$]h&]uh1j;hjSubj<)}(hhh]h)}(hConsecutive trim performanceh]hConsecutive trim performance}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjmubah}(h]h ]h"]h$]h&]uh1j;hjSubj<)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjSubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h33h]h33}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hRandom read performanceh]hRandom read performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h34h]h34}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hRandom write performanceh]hRandom write performance}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hBy transfer sizeh]hBy transfer size}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h35h]h35}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj@ubah}(h]h ]h"]h$]h&]uh1j;hj=ubj<)}(hhh]h)}(hLarge sequential readh]hLarge sequential read}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjWubah}(h]h ]h"]h$]h&]uh1j;hj=ubj<)}(hhh]h)}(hInto scattered pagesh]hInto scattered pages}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjnubah}(h]h ]h"]h$]h&]uh1j;hj=ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h36h]h36}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hLarge sequential writeh]hLarge sequential write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hFrom scattered pagesh]hFrom scattered pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h37h]h37}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hWrite performanceh]hWrite performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hWith blocking req 4k to 4MBh]hWith blocking req 4k to 4MB}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h38h]h38}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj*ubah}(h]h ]h"]h$]h&]uh1j;hj'ubj<)}(hhh]h)}(hWrite performanceh]hWrite performance}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjAubah}(h]h ]h"]h$]h&]uh1j;hj'ubj<)}(hhh]h)}(hWith non-blocking req 4k to 4MBh]hWith non-blocking req 4k to 4MB}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXubah}(h]h ]h"]h$]h&]uh1j;hj'ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h39h]h39}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjxubah}(h]h ]h"]h$]h&]uh1j;hjuubj<)}(hhh]h)}(hRead performanceh]hRead performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjuubj<)}(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&]uh1j;hjuubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h40h]h40}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hRead performanceh]hRead performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hWith non-blocking req 4k to 4MBh]hWith non-blocking req 4k to 4MB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h41h]h41}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hWrite performanceh]hWrite performance}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj+ubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hBlocking req 1 to 512 sg elemsh]hBlocking req 1 to 512 sg elems}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjBubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h42h]h42}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjbubah}(h]h ]h"]h$]h&]uh1j;hj_ubj<)}(hhh]h)}(hWrite performanceh]hWrite performance}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjyubah}(h]h ]h"]h$]h&]uh1j;hj_ubj<)}(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&]uh1j;hj_ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h43h]h43}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hRead performanceh]hRead performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(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&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h44h]h44}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hRead performanceh]hRead performance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(h"Non-blocking req 1 to 512 sg elemsh]h"Non-blocking req 1 to 512 sg elems}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj,ubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h45h]h45}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjLubah}(h]h ]h"]h$]h&]uh1j;hjIubj<)}(hhh]h)}(h Reset testh]h Reset test}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjcubah}(h]h ]h"]h$]h&]uh1j;hjIubj<)}(hhh]h}(h]h ]h"]h$]h&]uh1j;hjIubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h46h]h46}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hCommands during readh]hCommands during read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(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&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h47h]h47}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hCommands during writeh]hCommands during write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hNo Set Block Count (CMD23)h]hNo Set Block Count (CMD23)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h48h]h48}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj(ubah}(h]h ]h"]h$]h&]uh1j;hj%ubj<)}(hhh]h)}(hCommands during readh]hCommands during read}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj?ubah}(h]h ]h"]h$]h&]uh1j;hj%ubj<)}(hhh]h)}(hUse Set Block Count (CMD23)h]hUse Set Block Count (CMD23)}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjVubah}(h]h ]h"]h$]h&]uh1j;hj%ubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h49h]h49}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjvubah}(h]h ]h"]h$]h&]uh1j;hjsubj<)}(hhh]h)}(hCommands during writeh]hCommands during write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j;hjsubj<)}(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&]uh1j;hjsubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h50h]h50}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hCommands during non-blockingh]hCommands during non-blocking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(h"Read - use Set Block Count (CMD23)h]h"Read - use Set Block Count (CMD23)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubj7)}(hhh](j<)}(hhh]h)}(h51h]h51}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(hCommands during non-blockingh]hCommands during non-blocking}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj)ubah}(h]h ]h"]h$]h&]uh1j;hjubj<)}(hhh]h)}(h#Write - use Set Block Count (CMD23)h]h#Write - use Set Block Count (CMD23)}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj@ubah}(h]h ]h"]h$]h&]uh1j;hjubeh}(h]h ]h"]h$]h&]uh1j6hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1j hj ubah}(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}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhhhhhM 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 hjxhhubj-)}(hhh](j2)}(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&]uh1j1hjhhhhhNubj2)}(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&]uh1j1hjhhhhhNubj2)}(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&]uh1j1hjhhhhhNubj2)}(h?**UNSUPPORTED (by card)**: The test is unsupported by the card.h]h)}(hj h](j)}(h**UNSUPPORTED (by card)**h]hUNSUPPORTED (by card)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh&: The test is unsupported by the card.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1j1hjhhhhhNubj2)}(h.**ERROR**: An error occurred during the test. h]h)}(h-**ERROR**: An error occurred during the test.h](j)}(h **ERROR**h]hERROR}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh$: An error occurred during the test.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj.ubah}(h]h ]h"]h$]h&]uh1j1hjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1j,hhhMhjxhhubeh}(h] test-resultsah ]h"] test resultsah$]h&]uh1hhhhhhhhM ubh)}(hhh](h)}(hExample Kernel Log Outputh]hExample Kernel Log Output}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhhhhhMubh)}(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:}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjbhhubj )}(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&]hhj/j0nonej2}uh1jhhhMhjbhhubh)}(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 hjbhhubeh}(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_backlinksj;footnote_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_handlerj1error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j jjjVjSjjjujrj_j\jjjjjju nametypes}(j jjVjjuj_jjjuh}(j hjhjSjjjYjrjj\jxjjbjjjju 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.