of: Add helper function to check MMIO register endianness
authorKevin Cernekee <cernekee@gmail.com>
Thu, 9 Apr 2015 20:05:14 +0000 (13:05 -0700)
committerRob Herring <robh@kernel.org>
Wed, 15 Apr 2015 00:35:44 +0000 (19:35 -0500)
commit37786c7fee40771d13901de129af7e084ed48b55
tree2c0dd93357852188da26585ea6e60c06f99265a8
parentc954b36e3f5bfdd5aeceba49614a4864d7efec87
of: Add helper function to check MMIO register endianness

SoC peripherals can come in several different flavors:

 - little-endian: registers always need to be accessed in LE mode (so the
   kernel should perform a swap if the CPU is running BE)

 - big-endian: registers always need to be accessed in BE mode (so the
   kernel should perform a swap if the CPU is running LE)

 - native-endian: the bus will automatically swap accesses, so the kernel
   should never swap

Introduce a function that checks an OF device node to see whether it
contains a "big-endian" or "native-endian" property.  For the former case,
always return true.  For the latter case, return true iff the kernel was
built for BE (implying that the BE MMIO accessors do not perform a swap).
Otherwise return false, assuming LE registers.

LE registers are assumed by default because most existing drivers (libahci,
serial8250, usb) always use readl/writel in the absence of instructions
to the contrary, so that will be our fallback.

Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Rob Herring <robh@kernel.org>
drivers/of/base.c
include/linux/of.h