Documentation/driver-api/dmaengine/dmatest.rst

Source file repositories/reference/linux-study-clean/Documentation/driver-api/dmaengine/dmatest.rst

File Facts

System
Linux kernel
Corpus path
Documentation/driver-api/dmaengine/dmatest.rst
Extension
.rst
Size
8456 bytes
Lines
233
Domain
Support Tooling And Documentation
Bucket
Documentation
Inferred role
Support Tooling And Documentation: documentation
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

==============
DMA Test Guide
==============

Andy Shevchenko <andriy.shevchenko@linux.intel.com>

This small document introduces how to test DMA drivers using dmatest module.

The dmatest module tests DMA memcpy, memset, XOR and RAID6 P+Q operations using
various lengths and various offsets into the source and destination buffers. It
will initialize both buffers with a repeatable pattern and verify that the DMA
engine copies the requested region and nothing more. It will also verify that
the bytes aren't swapped around, and that the source buffer isn't modified.

The dmatest module can be configured to test a specific channel. It can also
test multiple channels at the same time, and it can start multiple threads
competing for the same channel.

.. note::
  The test suite works only on the channels that have at least one
  capability of the following: DMA_MEMCPY (memory-to-memory), DMA_MEMSET
  (const-to-memory or memory-to-memory, when emulated), DMA_XOR, DMA_PQ.

.. note::
  In case of any related questions use the official mailing list
  dmaengine@vger.kernel.org.

Part 1 - How to build the test module
=====================================

The menuconfig contains an option that could be found by following path:

	Device Drivers -> DMA Engine support -> DMA Test client

In the configuration file the option called CONFIG_DMATEST. The dmatest could
be built as module or inside kernel. Let's consider those cases.

Part 2 - When dmatest is built as a module
==========================================

Example of usage::

    % modprobe dmatest timeout=2000 iterations=1 channel=dma0chan0 run=1

...or::

    % modprobe dmatest
    % echo 2000 > /sys/module/dmatest/parameters/timeout
    % echo 1 > /sys/module/dmatest/parameters/iterations
    % echo dma0chan0 > /sys/module/dmatest/parameters/channel
    % echo 1 > /sys/module/dmatest/parameters/run

...or on the kernel command line::

    dmatest.timeout=2000 dmatest.iterations=1 dmatest.channel=dma0chan0 dmatest.run=1

Example of multi-channel test usage (new in the 5.0 kernel)::

    % modprobe dmatest
    % echo 2000 > /sys/module/dmatest/parameters/timeout
    % echo 1 > /sys/module/dmatest/parameters/iterations
    % echo dma0chan0 > /sys/module/dmatest/parameters/channel
    % echo dma0chan1 > /sys/module/dmatest/parameters/channel
    % echo dma0chan2 > /sys/module/dmatest/parameters/channel
    % echo 1 > /sys/module/dmatest/parameters/run

.. note::
  For all tests, starting in the 5.0 kernel, either single- or multi-channel,
  the channel parameter(s) must be set after all other parameters. It is at
  that time that the existing parameter values are acquired for use by the

Annotation

Implementation Notes