• Thomas Petazzoni's avatar
    bus: mvebu-mbus: add mv_mbus_dram_info_nooverlap() · bfa1ce5f
    Thomas Petazzoni authored
    This commit introduces a variant of the mv_mbus_dram_info() function
    called mv_mbus_dram_info_nooverlap(). Both functions are used by
    Marvell drivers supporting devices doing DMA, and provide them a
    description the DRAM ranges that they need to configure their DRAM
    windows.
    
    The ranges provided by the mv_mbus_dram_info() function may overlap
    with the I/O windows if there is a lot (>= 4 GB) of RAM
    installed. This is not a problem for most of the DMA masters, except
    for the upcoming new CESA crypto driver because it does DMA to the
    SRAM, which is mapped through an I/O window. For this unit, we need to
    have DRAM ranges that do not overlap with the I/O windows.
    
    A first implementation done in commit 1737cac6 ("bus: mvebu-mbus:
    make sure SDRAM CS for DMA don't overlap the MBus bridge window"),
    changed the information returned by mv_mbus_dram_info() to match this
    requirement. However, it broke the requirement of the other DMA
    masters than the DRAM ranges should have power of two sizes.
    
    To solve this situation, this commit introduces a new
    mv_mbus_dram_info_nooverlap() function, which returns the same
    information as mv_mbus_dram_info(), but guaranteed to not overlap with
    the I/O windows.
    
    In the end, it gives us two variants of the mv_mbus_dram_info*()
    functions:
    
     - The normal one, mv_mbus_dram_info(), which has been around for many
       years. This function returns the raw DRAM ranges, which are
       guaranteed to use power of two sizes, but will overlap with I/O
       windows. This function will therefore be used by all DMA masters
       (SATA, XOR, Ethernet, etc.) except the CESA crypto driver.
    
     - The new 'nooverlap' variant, mv_mbus_dram_info_nooverlap(). This
       function returns DRAM ranges after they have been "tweaked" to make
       sure they don't overlap with I/O windows. By doing this tweaking,
       we remove the power of two size guarantee. This variant will be
       used by the new CESA crypto driver.
    Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Signed-off-by: default avatarGregory CLEMENT <gregory.clement@free-electrons.com>
    bfa1ce5f
mvebu-mbus.c 35.2 KB