• Thomas Petazzoni's avatar
    bus: mvebu-mbus: use automatic I/O synchronization barriers · a0b5cd4a
    Thomas Petazzoni authored
    Instead of using explicit I/O synchronization barriers shoehorned
    inside the streaming DMA mappings API (in
    arch/arm/mach-mvebu/coherency.c), we are switching to use automatic
    I/O synchronization barrier.
    
    The primary motivation for this change is that explicit I/O
    synchronization barriers are not only needed for streaming DMA
    mappings (which can easily be done by overriding the dma_map_ops), but
    also for coherent DMA mappings (which is a lot less easy to do, since
    the kernel assumes such mappings are coherent and don't require any
    sort of cache maintenance operation to ensure the consistency of the
    buffers).
    
    Switching to automatic I/O synchronization barriers will also allow us
    to use the existing arm_coherent_dma_ops instead of our custom
    arm_dma_ops.
    
    In order to use automatic I/O synchronization barriers, this commit
    changes mvebu-mbus in two ways:
    
     - It enables automatic I/O synchronization barriers in the 0x84
       register of the MBus bridge, by enabling such barriers for all MBus
       units. This enables automatic barriers for the on-SoC peripherals
       that are doing DMA.
    
     - It enables the SyncEnable bit in the MBus windows, so that PCIe
       devices also use automatic I/O synchronization barrier.
    
    This automatic synchronization barrier relies on the assumption that
    at least one register of a given hardware unit is read before the
    driver accesses the DMA mappings modified by this unit. This
    assumption is guaranteed for PCI devices by vertue of the PCI
    standard, and we can reasonably verify that this assumption is also
    true for the limited number of platform drivers doing DMA used on
    Marvell EBU platforms.
    Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
    a0b5cd4a
mvebu-mbus.c 30 KB