1. 09 9月, 2009 2 次提交
  2. 30 8月, 2009 5 次提交
    • D
      iop-adma: P+Q self test · f6dbf651
      Dan Williams 提交于
      Even though the intent is to extend dmatest with P+Q tests there is
      still value in having an always-on sanity check to prevent an
      unintentionally broken driver from registering.
      
      This depends on raid6_pq.ko for verification, the side effect being that
      PQ capable channels will fail to register when raid6 is disabled.
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      
      
      f6dbf651
    • D
      iop-adma: P+Q support for iop13xx adma engines · 7bf649ae
      Dan Williams 提交于
      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: NDan Williams <dan.j.williams@intel.com>
      
      
      
      
      
      7bf649ae
    • D
      iop-adma: fix lockdep false positive · 72be12f0
      Dan Williams 提交于
      lockdep correctly identifies a potential recursive locking case for
      iop_chan->lock, but in the dependency submission case we expect that the same
      class will be acquired for both the parent dependency and the child channel.
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      72be12f0
    • D
      iop-adma: cleanup iop_adma_run_tx_complete_actions · 507fbec4
      Dan Williams 提交于
      Replace 'desc->async_tx.' with 'tx->'
      
      [ Impact: pure cleanup ]
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      
      507fbec4
    • D
      async_tx: add support for asynchronous GF multiplication · b2f46fd8
      Dan Williams 提交于
      [ Based on an original patch by Yuri Tikhonov ]
      
      This adds support for doing asynchronous GF multiplication by adding
      two additional functions to the async_tx API:
      
       async_gen_syndrome() does simultaneous XOR and Galois field
          multiplication of sources.
      
       async_syndrome_val() validates the given source buffers against known P
          and Q values.
      
      When a request is made to run async_pq against more than the hardware
      maximum number of supported sources we need to reuse the previous
      generated P and Q values as sources into the next operation.  Care must
      be taken to remove Q from P' and P from Q'.  For example to perform a 5
      source pq op with hardware that only supports 4 sources at a time the
      following approach is taken:
      
      p, q = PQ(src0, src1, src2, src3, COEF({01}, {02}, {04}, {08}))
      p', q' = PQ(p, q, q, src4, COEF({00}, {01}, {00}, {10}))
      
      p' = p + q + q + src4 = p + src4
      q' = {00}*p + {01}*q + {00}*q + {10}*src4 = q + {10}*src4
      
      Note: 4 is the minimum acceptable maxpq otherwise we punt to
      synchronous-software path.
      
      The DMA_PREP_CONTINUE flag indicates to the driver to reuse p and q as
      sources (in the above manner) and fill the remaining slots up to maxpq
      with the new sources/coefficients.
      
      Note1: Some devices have native support for P+Q continuation and can skip
      this extra work.  Devices with this capability can advertise it with
      dma_set_maxpq.  It is up to each driver how to handle the
      DMA_PREP_CONTINUE flag.
      
      Note2: The api supports disabling the generation of P when generating Q,
      this is ignored by the synchronous path but is implemented by some dma
      devices to save unnecessary writes.  In this case the continuation
      algorithm is simplified to only reuse Q as a source.
      
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: David Woodhouse <David.Woodhouse@intel.com>
      Signed-off-by: NYuri Tikhonov <yur@emcraft.com>
      Signed-off-by: NIlya Yanok <yanok@emcraft.com>
      Reviewed-by: NAndre Noll <maan@systemlinux.org>
      Acked-by: NMaciej Sosnowski <maciej.sosnowski@intel.com>
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      b2f46fd8
  3. 09 4月, 2009 1 次提交
  4. 26 3月, 2009 1 次提交
  5. 05 3月, 2009 1 次提交
  6. 04 3月, 2009 1 次提交
    • R
      [ARM] fix lots of ARM __devexit sillyness · bdf602bd
      Russell King 提交于
      `iop_adma_remove' referenced in section `.data' of drivers/built-in.o: defined in discarded section `.devexit.text' of drivers/built-in.o
      `mv_xor_remove' referenced in section `.data' of drivers/built-in.o: defined in discarded section `.devexit.text' of drivers/built-in.o
      `mv64xxx_i2c_unmap_regs' referenced in section `.devinit.text' of drivers/built-in.o: defined in discarded section `.devexit.text' of drivers/built-in.o
      `mv64xxx_i2c_remove' referenced in section `.data' of drivers/built-in.o: defined in discarded section `.devexit.text' of drivers/built-in.o
      `orion_nand_remove' referenced in section `.data' of drivers/built-in.o: defined in discarded section `.devexit.text' of drivers/built-in.o
      `pxafb_remove' referenced in section `.data' of drivers/built-in.o: defined in discarded section `.devexit.text' of drivers/built-in.o
      Acked-by: NUwe Kleine-König <u.kleine-koenig@pengutronix.de>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      bdf602bd
  7. 07 1月, 2009 5 次提交
  8. 06 1月, 2009 1 次提交
  9. 09 12月, 2008 1 次提交
    • D
      async_xor: dma_map destination DMA_BIDIRECTIONAL · a06d568f
      Dan Williams 提交于
      Mapping the destination multiple times is a misuse of the dma-api.
      Since the destination may be reused as a source, ensure that it is only
      mapped once and that it is mapped bidirectionally.  This appears to add
      ugliness on the unmap side in that it always reads back the destination
      address from the descriptor, but gcc can determine that dma_unmap is a
      nop and not emit the code that calculates its arguments.
      
      Cc: <stable@kernel.org>
      Cc: Saeed Bishara <saeed@marvell.com>
      Acked-by: NYuri Tikhonov <yur@emcraft.com>
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      a06d568f
  10. 12 11月, 2008 2 次提交
  11. 07 8月, 2008 1 次提交
  12. 18 7月, 2008 2 次提交
  13. 09 7月, 2008 3 次提交
  14. 21 5月, 2008 1 次提交
  15. 18 4月, 2008 4 次提交
  16. 14 3月, 2008 1 次提交
  17. 07 2月, 2008 3 次提交
  18. 17 10月, 2007 1 次提交
  19. 13 7月, 2007 1 次提交
    • D
      dmaengine: driver for the iop32x, iop33x, and iop13xx raid engines · c2110923
      Dan Williams 提交于
      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: NDan Williams <dan.j.williams@intel.com>
      c2110923