• Ned Forrester's avatar
    pxa2xx_spi: dma bugfixes · 7e964455
    Ned Forrester authored
    Fixes two DMA bugs in the pxa2xx_spi driver.  The first bug is in all
    versions of this driver; the second was introduced in the 2.6.20 kernel,
    and prevents using the driver with chips like m25p16 flash (which can
    issue large DMA reads).
    
     1. Zero length transfers are permitted for use to insert timing,
        but pxa2xx_spi.c will fail if this is requested in DMA mode.
        Fixed by using programmed I/O (PIO) mode for such transfers.
    
     2. Transfers larger than 8191 are not permitted in DMA mode.  A
        test for length rejects all large transfers regardless of DMA
        or PIO mode.  Worked around by rejecting only large transfers
        with DMA mapped buffers, and forcing all other transfers
        larger than 8191 to use PIO mode.  A rate limited warning is
        issued for DMA transfers forced to PIO mode.
    
    This patch should apply to all kernels back to and including 2.6.20;
    it was test patched against 2.6.20.  An additional patch would be
    required for older kernels, but those versions are very buggy anyway.
    Signed-off-by: default avatarNed Forrester <nforrester@whoi.edu>
    Cc: Vernon Sauder <vernoninhand@gmail.com>
    Cc: Eric Miao <eric.y.miao@gmail.com>
    Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
    Cc: <stable@kernel.org>		[2.6.25.x, 2.6.26.x]
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7e964455
pxa2xx_spi.c 44 KB