• Serge Semin's avatar
    mips: mm: Create UCA-based ioremap_wc() method · 9748e33e
    Serge Semin authored
    Modern MIPS cores (like P5600/6600, M5150/6520, end so on) which
    got L2-cache on chip also can enable a special type Cache-Coherency
    attribute (CCA) named UnCached Accelerated attribute (UCA). In this
    way uncached accelerated accesses are treated the same way as
    non-accelerated uncached accesses, but uncached stores are gathered
    together for more efficient bus utilization. So to speak this CCA
    enables uncached transactions to better utilize bus bandwidth via
    burst transactions.
    
    This is exactly why ioremap_wc() method has been introduced in Linux.
    Alas MIPS-platform code hasn't implemented it so far, instead default
    one has been used which was an alias to ioremap_nocache. In order to
    fix this we added MIPS-specific ioremap_wc() macro substituted by
    generic __ioremap_mode() method call with writecombine CPU-info
    field passed. It shall create real ioremap_wc() method if CPU-cache
    supports UCA feature and fall-back to _CACHE_UNCACHED attribute
    if one doesn't. Additionally platform-specific io.h shall declare
    ARCH_HAS_IOREMAP_WC macro as indication of architectural definition
    of ioremap_wc() (similar to x86/powerpc).
    
    [paul.burton@mips.com:
      - Remove CC stable, this is new functionality.]
    Signed-off-by: default avatarSerge Semin <fancer.lancer@gmail.com>
    Signed-off-by: default avatarPaul Burton <paul.burton@mips.com>
    Patchwork: https://patchwork.linux-mips.org/patch/19789/
    Cc: James Hogan <jhogan@kernel.org>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: linux-mips@linux-mips.org
    Cc: okaya@codeaurora.org
    Cc: chenhc@lemote.com
    Cc: Sergey.Semin@t-platforms.ru
    Cc: linux-kernel@vger.kernel.org
    9748e33e
io.h 19.9 KB