11 Apr, 2011

1 commit


23 Mar, 2011

1 commit

  • * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx: (66 commits)
    avr32: at32ap700x: fix typo in DMA master configuration
    dmaengine/dmatest: Pass timeout via module params
    dma: let IMX_DMA depend on IMX_HAVE_DMA_V1 instead of an explicit list of SoCs
    fsldma: make halt behave nicely on all supported controllers
    fsldma: reduce locking during descriptor cleanup
    fsldma: support async_tx dependencies and automatic unmapping
    fsldma: fix controller lockups
    fsldma: minor codingstyle and consistency fixes
    fsldma: improve link descriptor debugging
    fsldma: use channel name in printk output
    fsldma: move related helper functions near each other
    dmatest: fix automatic buffer unmap type
    drivers, pch_dma: Fix warning when CONFIG_PM=n.
    dmaengine/dw_dmac fix: use readl & writel instead of __raw_readl & __raw_writel
    avr32: at32ap700x: Specify DMA Flow Controller, Src and Dst msize
    dw_dmac: Setting Default Burst length for transfers as 16.
    dw_dmac: Allow src/dst msize & flow controller to be configured at runtime
    dw_dmac: Changing type of src_master and dest_master to u8.
    dw_dmac: Pass Channel Priority from platform_data
    dw_dmac: Pass Channel Allocation Order from platform_data
    ...

    Linus Torvalds
     

12 Mar, 2011

8 commits

  • The original dma_halt() function set the CA (channel abort) bit on both
    the 83xx and 85xx controllers. This is incorrect on the 83xx, where this
    bit means TEM (transfer error mask) instead. The 83xx doesn't support
    channel abort, so we only do this operation on 85xx.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • This merges the fsl_chan_ld_cleanup() function into the dma_do_tasklet()
    function to reduce locking overhead. In the best case, we will be able
    to keep the DMA controller busy while we are freeing used descriptors.
    In all cases, the spinlock is grabbed two times fewer than before on
    each transaction.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • Previous to this patch, the dma_run_dependencies() function has been
    called while holding desc_lock. This function can call tx_submit() for
    other descriptors, which may try to re-grab the lock. Avoid this by
    moving the descriptors to be cleaned up to a temporary list, and
    dropping the lock before cleanup.

    At the same time, add support for automatic unmapping of src and dst
    buffers, as offered by the DMAEngine API.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • Enabling poisoning in the dmapool API quickly showed that the DMA
    controller was fetching descriptors that should not have been in use.
    This has caused intermittent controller lockups during testing.

    I have been unable to figure out the exact set of conditions which cause
    this to happen. However, I believe it is related to the driver using the
    hardware registers to track whether the controller is busy or not. The
    code can incorrectly decide that the hardware is idle due to lag between
    register writes and the hardware actually becoming busy.

    To fix this, the driver has been reworked to explicitly track the state
    of the hardware, rather than try to guess what it is doing based on the
    register values.

    This has passed dmatest with 10 threads per channel, 100000 iterations
    per thread several times without error. Previously, this would fail
    within a few seconds.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • This fixes some minor violations of the coding style. It also changes
    the style of the device_prep_dma_*() function definitions so they are
    identical.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • This adds better tracking to link descriptor allocations, callbacks, and
    frees. This makes it much easier to track errors with link descriptors.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • This makes debugging the driver much easier when multiple channels are
    running concurrently. In addition, you can see how much descriptor
    memory each channel has allocated via the dmapool API in sysfs.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • This is a purely cosmetic cleanup. It is nice to have related functions
    right next to each other in the code.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     

28 Feb, 2011

1 commit


18 Jan, 2011

1 commit

  • * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx: (63 commits)
    ARM: PL08x: cleanup comments
    Update CONFIG_MD_RAID6_PQ to CONFIG_RAID6_PQ in drivers/dma/iop-adma.c
    ARM: PL08x: fix a warning
    Fix dmaengine_submit() return type
    dmaengine: at_hdmac: fix race while monitoring channel status
    dmaengine: at_hdmac: flags located in first descriptor
    dmaengine: at_hdmac: use subsys_initcall instead of module_init
    dmaengine: at_hdmac: no need set ACK in new descriptor
    dmaengine: at_hdmac: trivial add precision to unmapping comment
    dmaengine: at_hdmac: use dma_address to program DMA hardware
    pch_dma: support new device ML7213 IOH
    ARM: PL08x: prevent dma_set_runtime_config() reconfiguring memcpy channels
    ARM: PL08x: allow dma_set_runtime_config() to return errors
    ARM: PL08x: fix locking between prepare function and submit function
    ARM: PL08x: introduce 'phychan_hold' to hold on to physical channels
    ARM: PL08x: put txd's on the pending list in pl08x_tx_submit()
    ARM: PL08x: rename 'desc_list' as 'pend_list'
    ARM: PL08x: implement unmapping of memcpy buffers
    ARM: PL08x: store prep_* flags in async_tx structure
    ARM: PL08x: shrink srcbus/dstbus in txd structure
    ...

    Linus Torvalds
     

14 Dec, 2010

1 commit

  • Fixed fsl dma slow issue by initializing dma mode register with
    bandwidth control. It boosts dma performance and should works
    with 85xx board.

    Signed-off-by: Forrest Shi
    Signed-off-by: Li Yang
    Signed-off-by: Dan Williams

    Forrest Shi
     

04 Dec, 2010

1 commit

  • Expand the dma_mask of fsldma device to 36-bit, indicating that the
    DMA engine can deal with 36-bit physical address and does not need
    the SWIOTLB to create bounce buffer for it when doing dma_map_*().

    Signed-off-by: Li Yang
    Acked-by: Kumar Gala
    Signed-off-by: Dan Williams

    Li Yang
     

08 Oct, 2010

2 commits

  • Now that the generic DMAEngine API has support for scatterlist to
    scatterlist copying, the device_prep_slave_sg() portion of the
    DMA_SLAVE API is no longer necessary and has been removed.

    However, the device_control() portion of the DMA_SLAVE API is still
    useful to control device specific parameters, such as externally
    controlled DMA transfers and maximum burst length.

    A special dma_ctrl_cmd has been added to enable externally controlled
    DMA transfers. This is currently specific to the Freescale DMA
    controller, but can easily be made generic when another user is found.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • Now that the DMAEngine API has support for scatterlist to scatterlist
    copy, implement support for the Freescale DMA controller.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     

06 Aug, 2010

1 commit

  • of_device is just an alias for platform_device, so remove it entirely. Also
    replace to_of_device() with to_platform_device() and update comment blocks.

    This patch was initially generated from the following semantic patch, and then
    edited by hand to pick up the bits that coccinelle didn't catch.

    @@
    @@
    -struct of_device
    +struct platform_device

    Signed-off-by: Grant Likely
    Reviewed-by: David S. Miller

    Grant Likely
     

04 Aug, 2010

1 commit


22 May, 2010

2 commits

  • Merging in current state of Linus' tree to deal with merge conflicts and
    build failures in vio.c after merge.

    Conflicts:
    drivers/i2c/busses/i2c-cpm.c
    drivers/i2c/busses/i2c-mpc.c
    drivers/net/gianfar.c

    Also fixed up one line in arch/powerpc/kernel/vio.c to use the
    correct node pointer.

    Signed-off-by: Grant Likely

    Grant Likely
     
  • .name, .match_table and .owner are duplicated in both of_platform_driver
    and device_driver. This patch is a removes the extra copies from struct
    of_platform_driver and converts all users to the device_driver members.

    This patch is a pretty mechanical change. The usage model doesn't change
    and if any drivers have been missed, or if anything has been fixed up
    incorrectly, then it will fail with a compile time error, and the fixup
    will be trivial. This patch looks big and scary because it touches so
    many files, but it should be pretty safe.

    Signed-off-by: Grant Likely
    Acked-by: Sean MacLennan

    Grant Likely
     

19 May, 2010

1 commit


18 May, 2010

2 commits


30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

27 Mar, 2010

3 commits

  • Simple conditional struct filler to cut out some duplicated code.

    Signed-off-by: Dan Williams

    Dan Williams
     
  • Convert the device_is_tx_complete() operation on the
    DMA engine to a generic device_tx_status()operation which
    can return three states, DMA_TX_RUNNING, DMA_TX_COMPLETE,
    DMA_TX_PAUSED.

    [dan.j.williams@intel.com: update for timberdale]
    Signed-off-by: Linus Walleij
    Acked-by: Mark Brown
    Cc: Maciej Sosnowski
    Cc: Nicolas Ferre
    Cc: Pavel Machek
    Cc: Li Yang
    Cc: Guennadi Liakhovetski
    Cc: Paul Mundt
    Cc: Ralf Baechle
    Cc: Haavard Skinnemoen
    Cc: Magnus Damm
    Cc: Liam Girdwood
    Cc: Joe Perches
    Cc: Roland Dreier
    Signed-off-by: Dan Williams

    Linus Walleij
     
  • Convert the device_terminate_all() operation on the
    DMA engine to a generic device_control() operation
    which can now optionally support also pausing and
    resuming DMA on a certain channel. Implemented for the
    COH 901 318 DMAC as an example.

    [dan.j.williams@intel.com: update for timberdale]
    Signed-off-by: Linus Walleij
    Acked-by: Mark Brown
    Cc: Maciej Sosnowski
    Cc: Nicolas Ferre
    Cc: Pavel Machek
    Cc: Li Yang
    Cc: Guennadi Liakhovetski
    Cc: Paul Mundt
    Cc: Ralf Baechle
    Cc: Haavard Skinnemoen
    Cc: Magnus Damm
    Cc: Liam Girdwood
    Cc: Joe Perches
    Cc: Roland Dreier
    Signed-off-by: Dan Williams

    Linus Walleij
     

01 Mar, 2010

2 commits

  • fsl_dma_update_completed_cookie() appears to calculate the last completed
    cookie incorrectly in the corner case where DMA on cookie 1 is in progress
    just following a cookie wrap.

    Signed-off-by: Steven J. Magnani
    Acked-by: Ira W. Snyder
    [dan.j.williams@intel.com: fix an integer overflow warning with INT_MAX]
    Signed-off-by: Dan Williams

    Steven J. Magnani
     
  • fsl_dma_tx_submit() only sets the cookie on the first descriptor of a
    transaction. It should set the cookie on all.

    Signed-off-by: Steven J. Magnani
    Acked-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Steven J. Magnani
     

03 Feb, 2010

9 commits

  • The match_table field of the struct of_device_id is constant in
    so it is worth to make the initialization data also constant.

    The semantic match that finds this kind of pattern is as follows:
    (http://coccinelle.lip6.fr/)

    //
    @r@
    disable decl_init,const_decl_init;
    identifier I1, I2, x;
    @@
    struct I1 {
    ...
    const struct I2 *x;
    ...
    };
    @s@
    identifier r.I1, y;
    identifier r.x, E;
    @@
    struct I1 y = {
    .x = E,
    };
    @c@
    identifier r.I2;
    identifier s.E;
    @@
    const struct I2 E[] = ... ;
    @depends on !c@
    identifier r.I2;
    identifier s.E;
    @@
    + const
    struct I2 E[] = ...;
    //

    Signed-off-by: Márton Németh
    Cc: Julia Lawall
    Cc: cocci@diku.dk
    [dan.j.williams@intel.com: resolved conflict with recent fsldma updates]
    Signed-off-by: Dan Williams

    Márton Németh
     
  • Fix locking. Use two queues in the driver, one for pending transacions, and
    one for transactions which are actually running on the hardware. Call
    dma_run_dependencies() on descriptor cleanup so that the async_tx API works
    correctly.

    There are a number of places throughout the code where lists of descriptors
    are freed in a loop. Create functions to handle this, and use them instead
    of open-coding the loop each time.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • The name fsl_chan seems too long, so it has been shortened to chan. There
    are only a few places where the higher level "struct dma_chan *chan" name
    conflicts. These have been changed to "struct dma_chan *dchan" instead.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • The IRQ probing is needlessly complex. All off the 83xx device trees in
    arch/powerpc/boot/dts/ specify 5 interrupts per DMA controller: one for the
    controller, and one for each channel. These interrupts are all attached to
    the same IRQ line.

    This causes an interesting situation if two channels interrupt at the same
    time. The per-controller handler will handle the first channel, and the
    per-channel handler will handle the remaining channels.

    Instead of this mess, we fix the bug in the per-controller handler, and
    make it handle all channels that generated an interrupt. When a
    per-controller handler is specified in the device tree, we prefer to use
    the shared handler instead of the per-channel handler.

    The 85xx/86xx controllers do not have a per-controller interrupt, and
    instead use a per-channel interrupt. This behavior has not been changed.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • This fixes some errors in the cleanup paths of the OF subsystem, including
    missing checks for ioremap failing. Also, some variables were renamed for
    brevity.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • Most functions in the standard library use "dst" as a parameter, rather
    than "dest". This renames all use of "dest" to "dst" to match the usual
    convention.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • This is the beginning of a cleanup which will change all instances of
    "fsl_dma" to "fsldma" to match the name of the driver itself.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • Remove some unused members from the fsldma data structures. A few trivial
    uses of struct resource were converted to use the stack rather than keeping
    the memory allocated for the lifetime of the driver.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • Some of the functions are written in a way where they use multiple reads
    and writes where a single read/write pair could suffice. This shrinks the
    kernel text size measurably, while making the functions easier to
    understand.

    add/remove: 0/0 grow/shrink: 1/4 up/down: 4/-196 (-192)
    function old new delta
    fsl_chan_set_request_count 120 124 +4
    dma_halt 300 272 -28
    fsl_chan_set_src_loop_size 208 156 -52
    fsl_chan_set_dest_loop_size 208 156 -52
    fsl_chan_xfer_ld_queue 500 436 -64

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder
     

09 Sep, 2009

2 commits

  • Use the DMA_SLAVE capability of the DMAEngine API to copy/from a
    scatterlist into an arbitrary list of hardware address/length pairs.

    This allows a single DMA transaction to copy data from several different
    devices into a scatterlist at the same time.

    This also adds support to enable some controller-specific features such as
    external start and external pause for a DMA transaction.

    [dan.j.williams@intel.com: rebased on tx_list movement]
    Signed-off-by: Ira W. Snyder
    Acked-by: Li Yang
    Acked-by: Kumar Gala
    Signed-off-by: Dan Williams

    Ira Snyder
     
  • When using the Freescale DMA controller in external control mode, both the
    request count and external pause bits need to be setup correctly. This was
    being done with the same function.

    The 83xx controller lacks the external pause feature, but has a similar
    feature called external start. This feature requires that the request count
    bits be setup correctly.

    Split the function into two parts, to make it possible to use the external
    start feature on the 83xx controller.

    Signed-off-by: Ira W. Snyder
    Signed-off-by: Dan Williams

    Ira Snyder