c211092313
The Intel(R) IOP series of i/o processors integrate an Xscale core with raid acceleration engines. The capabilities per platform are: iop219: (2) copy engines iop321: (2) copy engines (1) xor and block fill engine iop33x: (2) copy and crc32c engines (1) xor, xor zero sum, pq, pq zero sum, and block fill engine iop34x (iop13xx): (2) copy, crc32c, xor, xor zero sum, and block fill engines (1) copy, crc32c, xor, xor zero sum, pq, pq zero sum, and block fill engine The driver supports the features of the async_tx api: * asynchronous notification of operation completion * implicit (interupt triggered) handling of inter-channel transaction dependencies The driver adapts to the platform it is running by two methods. 1/ #include <asm/arch/adma.h> which defines the hardware specific iop_chan_* and iop_desc_* routines as a series of static inline functions 2/ The private platform data attached to the platform_device defines the capabilities of the channels 20070626: Callbacks are run in a tasklet. Given the recent discussion on LKML about killing tasklets in favor of workqueues I did a quick conversion of the driver. Raid5 resync performance dropped from 50MB/s to 30MB/s, so the tasklet implementation remains until a generic softirq interface is available. Changelog: * fixed a slot allocation bug in do_iop13xx_adma_xor that caused too few slots to be requested eventually leading to data corruption * enabled the slot allocation routine to attempt to free slots before returning -ENOMEM * switched the cleanup routine to solely use the software chain and the status register to determine if a descriptor is complete. This is necessary to support other IOP engines that do not have status writeback capability * make the driver iop generic * modified the allocation routines to understand allocating a group of slots for a single operation * added a null xor initialization operation for the xor only channel on iop3xx * support xor operations on buffers larger than the hardware maximum * split the do_* routines into separate prep, src/dest set, submit stages * added async_tx support (dependent operations initiation at cleanup time) * simplified group handling * added interrupt support (callbacks via tasklets) * brought the pending depth inline with ioat (i.e. 4 descriptors) * drop dma mapping methods, suggested by Chris Leech * don't use inline in C files, Adrian Bunk * remove static tasklet declarations * make iop_adma_alloc_slots easier to read and remove chances for a corrupted descriptor chain * fix locking bug in iop_adma_alloc_chan_resources, Benjamin Herrenschmidt * convert capabilities over to dma_cap_mask_t * fixup sparse warnings * add descriptor flush before iop_chan_enable * checkpatch.pl fixes * gpl v2 only correction * move set_src, set_dest, submit to async_tx methods * move group_list and phys to async_tx Cc: Russell King <rmk@arm.linux.org.uk> Signed-off-by: Dan Williams <dan.j.williams@intel.com> |
||
---|---|---|
.. | ||
arch-aaec2000 | ||
arch-at91 | ||
arch-cl7500 | ||
arch-clps711x | ||
arch-davinci | ||
arch-ebsa110 | ||
arch-ebsa285 | ||
arch-ep93xx | ||
arch-h720x | ||
arch-imx | ||
arch-integrator | ||
arch-iop13xx | ||
arch-iop32x | ||
arch-iop33x | ||
arch-ixp4xx | ||
arch-ixp23xx | ||
arch-ixp2000 | ||
arch-ks8695 | ||
arch-l7200 | ||
arch-lh7a40x | ||
arch-netx | ||
arch-ns9xxx | ||
arch-omap | ||
arch-pnx4008 | ||
arch-pxa | ||
arch-realview | ||
arch-rpc | ||
arch-s3c2410 | ||
arch-sa1100 | ||
arch-shark | ||
arch-versatile | ||
hardware | ||
mach | ||
plat-s3c24xx | ||
.gitignore | ||
a.out.h | ||
assembler.h | ||
atomic.h | ||
auxvec.h | ||
bitops.h | ||
bug.h | ||
bugs.h | ||
byteorder.h | ||
cache.h | ||
cacheflush.h | ||
checksum.h | ||
cnt32_to_63.h | ||
cpu-multi32.h | ||
cpu-single.h | ||
cpu.h | ||
cputime.h | ||
current.h | ||
delay.h | ||
device.h | ||
div64.h | ||
dma-mapping.h | ||
dma.h | ||
domain.h | ||
dyntick.h | ||
ecard.h | ||
elf.h | ||
emergency-restart.h | ||
errno.h | ||
fcntl.h | ||
fiq.h | ||
flat.h | ||
floppy.h | ||
fpstate.h | ||
futex.h | ||
glue.h | ||
gpio.h | ||
hardirq.h | ||
hardware.h | ||
hw_irq.h | ||
ide.h | ||
io.h | ||
ioctl.h | ||
ioctls.h | ||
ipc.h | ||
ipcbuf.h | ||
irq_regs.h | ||
irq.h | ||
irqflags.h | ||
Kbuild | ||
kdebug.h | ||
kexec.h | ||
kmap_types.h | ||
leds.h | ||
limits.h | ||
linkage.h | ||
local.h | ||
locks.h | ||
mc146818rtc.h | ||
memory.h | ||
mman.h | ||
mmu_context.h | ||
mmu.h | ||
mmzone.h | ||
module.h | ||
msgbuf.h | ||
mtd-xip.h | ||
mutex.h | ||
namei.h | ||
nwflash.h | ||
page-nommu.h | ||
page.h | ||
param.h | ||
parport.h | ||
pci.h | ||
percpu.h | ||
pgalloc.h | ||
pgtable-hwdef.h | ||
pgtable-nommu.h | ||
pgtable.h | ||
poll.h | ||
posix_types.h | ||
proc-fns.h | ||
processor.h | ||
procinfo.h | ||
ptrace.h | ||
resource.h | ||
rtc.h | ||
scatterlist.h | ||
sections.h | ||
segment.h | ||
semaphore-helper.h | ||
semaphore.h | ||
sembuf.h | ||
serial.h | ||
setup.h | ||
shmbuf.h | ||
shmparam.h | ||
sigcontext.h | ||
siginfo.h | ||
signal.h | ||
sizes.h | ||
smp.h | ||
socket.h | ||
sockios.h | ||
spinlock_types.h | ||
spinlock.h | ||
stat.h | ||
statfs.h | ||
string.h | ||
suspend.h | ||
system.h | ||
termbits.h | ||
termios.h | ||
therm.h | ||
thread_info.h | ||
thread_notify.h | ||
timex.h | ||
tlb.h | ||
tlbflush.h | ||
topology.h | ||
traps.h | ||
types.h | ||
uaccess.h | ||
ucontext.h | ||
unaligned.h | ||
unistd.h | ||
user.h | ||
vfp.h | ||
vfpmacros.h | ||
vga.h | ||
xor.h |