.. SPDX-License-Identifier: GPL-2.0+
.. Copyright 2022, Heinrich Schuchardt <xypron.glpk@gmx.de>

mtest command
=============

Synopsis
--------

::

    mtest [start [end [pattern [iterations]]]]

Description
-----------

The *mtest* command tests the random access memory. It writes long values, reads
them back and checks for differences. The test can be interrupted with CTRL+C.

The default test uses *pattern* as first value to be written and varies it
between memory addresses.

An alternative test can be selected with CONFIG_SYS_ALT_MEMTEST=y. It uses
multiple hard coded bit patterns.

With CONFIGSYS_ALT_MEMTEST_BITFLIP=y a further test is executed. It writes long
values offset by half the size of long and checks if writing to the one address
causes bit flips at the other address.

start
	start address of the memory range tested, defaults to
	CONFIG_SYS_MEMTEST_START

end
	end address of the memory range tested, defaults to
	CONFIG_SYS_MEMTEST_END. If CONFIGSYS_ALT_MEMTEST_BITFLIP=y, a value will
	be written to this address. Otherwise it is excluded from the range.

pattern
	pattern to be written to memory. This is a 64bit value on 64bit systems
	and a 32bit value on 32bit systems. It defaults to 0. The value is
	ignored if CONFIG_SYS_ALT_MEMTEST=y.

iterations
	number of test repetitions. If the value is not provided the test will
	not terminate automatically. Enter CTRL+C instead.

Examples
--------

::

    => mtest 1000 2000 0x55aa55aa55aa55aa 10
    Testing 00001000 ... 00002000:
    Pattern AA55AA55AA55AA55  Writing...  Reading...
    Tested 16 iteration(s) with 0 errors.

Configuration
-------------

The mtest command is enabled by CONFIG_CMD_MEMTEST=y.

Return value
------------

The return value $? is 0 (true) if the command succeeds, 1 (false) otherwise.
