MIPS: Define MMIO ordering barriers
authorMaciej W. Rozycki <macro@linux-mips.org>
Mon, 8 Oct 2018 00:37:01 +0000 (01:37 +0100)
committerPaul Burton <paul.burton@mips.com>
Tue, 9 Oct 2018 17:42:39 +0000 (10:42 -0700)
commit4ae0452bddca8b59e9258759123a652161d07871
treeb8e30ac923ce5b97d5a537600f3eab969cd8ac5c
parent39249d776ca752f84a66ea29e16534aaaba6078e
MIPS: Define MMIO ordering barriers

Define MMIO ordering barriers as separate operations so as to allow
making places where such a barrier is required distinct from places
where a memory or a DMA barrier is needed.

Architecturally MIPS does not specify ordering requirements for uncached
bus accesses such as MMIO operations normally use and therefore explicit
barriers have to be inserted between MMIO accesses where unspecified
ordering of operations would cause unpredictable results.

MIPS MMIO ordering barriers are implemented using the same underlying
mechanism that memory or a DMA barrier ordering barriers use, that is
either a suitable SYNC instruction or a platform-specific `wbflush'
call.  However platforms may implement different ordering rules for
different kinds of bus activity, so having a separate API makes it
possible to remove unnecessary barriers and avoid a performance hit they
may cause due to unrelated bus activity by making their implementation
expand to nil while keeping the necessary ones.

Also having distinct barriers for each kind of use makes it easier for
the reader to understand what code has been intended to do.

Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org>
Signed-off-by: Paul Burton <paul.burton@mips.com>
Patchwork: https://patchwork.linux-mips.org/patch/20862/
Cc: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/io.h