• Gregory CLEMENT's avatar
    ARM: 8561/3: dma-mapping: Don't use outer_flush_range when the L2C is coherent · f7017a73
    Gregory CLEMENT authored
    commit f1270896 upstream.
    
    When a L2 cache controller is used in a system that provides hardware
    coherency, the entire outer cache operations are useless, and can be
    skipped.  Moreover, on some systems, it is harmful as it causes
    deadlocks between the Marvell coherency mechanism, the Marvell PCIe
    controller and the Cortex-A9.
    
    In the current kernel implementation, the outer cache flush range
    operation is triggered by the dma_alloc function.
    This operation can be take place during runtime and in some
    circumstances may lead to the PCIe/PL310 deadlock on Armada 375/38x
    SoCs.
    
    This patch extends the __dma_clear_buffer() function to receive a
    boolean argument related to the coherency of the system. The same
    things is done for the calling functions.
    Reported-by: default avatarNadav Haklai <nadavh@marvell.com>
    Signed-off-by: default avatarGregory CLEMENT <gregory.clement@free-electrons.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    [bwh: Backported to 3.16:
     - Drop changes to struct arm_dm_alloc_args, cma_allocator_alloc()
     - Pass the new parameter to __alloc_from_contiguous() from __dma_alloc()
     - Adjust context]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    f7017a73
dma-mapping.c 55.4 KB