• Gregory CLEMENT's avatar
    ARM: 8561/3: dma-mapping: Don't use outer_flush_range when the L2C is coherent · f1270896
    Gregory CLEMENT authored
    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>
    Cc: <stable@vger.kernel.org> # v3.16+
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    f1270896
dma-mapping.c 59.4 KB