• Kevin Cernekee's avatar
    of: Add helper function to check MMIO register endianness · 37786c7f
    Kevin Cernekee authored
    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: default avatarKevin Cernekee <cernekee@gmail.com>
    Reviewed-by: default avatarPeter Hurley <peter@hurleysoftware.com>
    Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: default avatarRob Herring <robh@kernel.org>
    37786c7f
base.c 60.5 KB