28 May, 2015

1 commit

  • 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 1737cac69369 ("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: Thomas Petazzoni
    Signed-off-by: Gregory CLEMENT

    Thomas Petazzoni
     

01 Dec, 2014

1 commit

  • On Marvell EBU platforms, when doing suspend/resume, the SDRAM window
    configuration must be saved on suspend, and restored on
    resume. However, it needs to be restored on resume *before*
    re-entering the kernel, because the SDRAM window configuration defines
    the layout of the memory. For this reason, it cannot simply be done in
    the ->suspend() and ->resume() hooks of the mvebu-mbus driver.

    Instead, it needs to be restored by the bootloader "boot info"
    mechanism used when resuming. This mechanism allows the kernel to
    define a list of (address, value) pairs when suspending, that the
    bootloader will restore on resume before jumping back into the kernel.

    This commit therefore adds a new function to the mvebu-mbus driver,
    called mvebu_mbus_save_cpu_target(), which will be called by the
    platform code to make the mvebu-mbus driver save the SDRAM window
    configuration in a way that can be understood by the bootloader "boot
    info" mechanism.

    Signed-off-by: Thomas Petazzoni
    Reviewed-by: Gregory CLEMENT
    Link: https://lkml.kernel.org/r/1416585613-2113-8-git-send-email-thomas.petazzoni@free-electrons.com
    Signed-off-by: Jason Cooper

    Thomas Petazzoni
     

24 Apr, 2014

1 commit

  • Until now, the mvebu-mbus was guessing by itself whether hardware I/O
    coherency was available or not by poking into the Device Tree to see
    if the coherency fabric Device Tree node was present or not.

    However, on some upcoming SoCs, the presence or absence of the
    coherency fabric DT node isn't sufficient: in CONFIG_SMP, the
    coherency can be enabled, but not in !CONFIG_SMP.

    In order to clean this up, the mvebu_mbus_dt_init() function is
    extended to get a boolean argument telling whether coherency is
    enabled or not. Therefore, the logic to decide whether coherency is
    available or not now belongs to the core SoC code instead of the
    mvebu-mbus driver itself, which is much better.

    Signed-off-by: Thomas Petazzoni
    Link: https://lkml.kernel.org/r/1397483228-25625-4-git-send-email-thomas.petazzoni@free-electrons.com
    Signed-off-by: Jason Cooper

    Thomas Petazzoni
     

06 Aug, 2013

4 commits

  • Now that every user of the deprecated name-based API has been
    converted to using the ID-based API, let's remove the former one.

    Signed-off-by: Thomas Petazzoni
    Tested-by: Andrew Lunn
    Tested-by: Sebastian Hesselbarth
    Signed-off-by: Jason Cooper

    Thomas Petazzoni
     
  • We add two optional properties to the MBus DT binding, to encode
    the PCIe memory and IO aperture. This allows such information to
    be retrieved by -for instance- the pci driver to allocate the
    MBus decoding windows.

    Correspondingly, and in order to retrieve this information,
    we add two new APIs.

    Signed-off-by: Ezequiel Garcia
    Tested-by: Andrew Lunn
    Tested-by: Sebastian Hesselbarth
    Signed-off-by: Jason Cooper

    Ezequiel Garcia
     
  • This patch adds the most fundamental device-tree initialization.
    We only introduce what's required to be able to probe the mvebu-mbus
    driver from the DT. Follow-up patches will extend the device tree binding,
    allowing to describe static address decoding windows.

    Signed-off-by: Thomas Petazzoni
    Signed-off-by: Ezequiel Garcia
    Tested-by: Andrew Lunn
    Tested-by: Sebastian Hesselbarth
    Signed-off-by: Jason Cooper

    Ezequiel Garcia
     
  • We add an API to create MBus address decoding windows from the target
    ID and attribute. This function will be used later and deprecate the
    current name based scheme.

    Signed-off-by: Thomas Petazzoni
    Tested-by: Andrew Lunn
    Tested-by: Sebastian Hesselbarth
    Signed-off-by: Jason Cooper

    Thomas Petazzoni
     

15 Apr, 2013

1 commit

  • This commit convers the mach-mv78xx0 sub-architecture to use the
    mvebu-mbus driver. We simply have to call mvebu_mbus_init() in the
    ->init_early() function, and modify the PCIe code so that it uses the
    new functions provided by mvebu-mbus to create the needed PCIe
    windows.

    Signed-off-by: Thomas Petazzoni
    Acked-by: Arnd Bergmann
    Signed-off-by: Jason Cooper

    Thomas Petazzoni
     

29 Mar, 2013

1 commit

  • The Marvell EBU SoCs have a configurable physical address space
    layout: the physical ranges of memory used to address PCI(e)
    interfaces, NOR flashes, SRAM and various other types of memory are
    configurable by software, through a mechanism of so-called 'address
    decoding windows'.

    This new driver mvebu-mbus consolidates the existing code to address
    the configuration of these memory ranges, which is spread into
    mach-mvebu, mach-orion5x, mach-mv78xx0, mach-dove and mach-kirkwood.

    Following patches convert each Marvell EBU SoC family to use this
    driver, therefore removing the old code that was configuring the
    address decoding windows.

    It is worth mentioning that the MVEBU_MBUS Kconfig option is
    intentionally added as a blind option. The new driver implements and
    exports the mv_mbus_dram_info() function, which is used by various
    Marvell drivers throughout the tree to get access to window
    configuration parameters that they require. This function is also
    implemented in arch/arm/plat-orion/addr-map.c, which ultimately gets
    removed at the end of this patch series. So, in order to preserve
    bisectability, we want to ensure that *either* this new driver, *or*
    the legacy code in plat-orion/addr-map.c gets compiled in.

    By making MVEBU_MBUS a blind option, we are sure that only a platform
    that does 'select MVEBU_MBUS' will get this new driver compiled
    in. Therefore, throughout the next patches that convert the Marvell
    sub-architectures one after the other to this new driver, we add the
    'select MVEBU_MBUS' and also ensure to remove plat-orion/addr-map.c
    from the build for this specific sub-architecture. This ensures that
    bisectability is preserved.

    Ealier versions of this driver had a DT binding, but since those were
    not yet agreed upon, they were removed. The driver still uses
    of_device_id to find the SoC specific details according to the string
    passed to mvebu_mbus_init(). The plan is to re-introduce a proper DT
    binding as a followup set of patches.

    Signed-off-by: Thomas Petazzoni
    Acked-by: Arnd Bergmann
    Signed-off-by: Jason Cooper

    Thomas Petazzoni
     

14 Dec, 2011

1 commit


28 Mar, 2008

1 commit

  • Introduce struct mbus_dram_target_info, which will be used for
    passing information about the mbus target ID of the DDR unit, and
    mbus target attribute, base address and size for each of the DRAM
    chip selects from the platform code to peripheral drivers.

    Signed-off-by: Lennert Buytenhek
    Reviewed-by: Tzachi Perelstein
    Acked-by: Russell King
    Signed-off-by: Nicolas Pitre

    Lennert Buytenhek