iop-adma: P+Q support for iop13xx adma engines
authorDan Williams <dan.j.williams@intel.com>
Fri, 28 Aug 2009 21:32:04 +0000 (14:32 -0700)
committerDan Williams <dan.j.williams@intel.com>
Sun, 30 Aug 2009 02:12:39 +0000 (19:12 -0700)
commit7bf649aee8ac93ecc280f8745dcf8ec19d7b9fb1
treeb35282323d278afb16c18a42c8c0db34508cef6c
parent72be12f0c39df46832403cbfd82e132a883f5ddc
iop-adma: P+Q support for iop13xx adma engines

iop33x support is not included because that engine is a bit more awkward
to handle in that it can either be in xor mode or pq mode.  The
dmaengine/async_tx layers currently only comprehend static capabilities.

Note iop13xx does not support hardware PQ continuation so the driver
must handle the DMA_PREP_CONTINUE flag for operations across > 16
sources. From the comment for dma_maxpq:

/* When an engine does not support native continuation we need 3 extra
 * source slots to reuse P and Q with the following coefficients:
 * 1/ {00} * P : remove P from Q', but use it as a source for P'
 * 2/ {01} * Q : use Q to continue Q' calculation
 * 3/ {00} * Q : subtract Q from P' to cancel (2)
 */

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
arch/arm/include/asm/hardware/iop3xx-adma.h
arch/arm/include/asm/hardware/iop_adma.h
arch/arm/mach-iop13xx/include/mach/adma.h
drivers/dma/iop-adma.c