Skip to content
  • Mark Brown's avatar
    MIPS: dt: Explicitly specify native endian behaviour for syscon · 25d6463e
    Mark Brown authored
    On many MIPS systems the endianness of IP blocks is kept the same as
    that of the CPU by the hardware.  This includes the system controllers
    on these systems which are controlled via syscon which uses the regmap
    API which used readl() and writel() to interact with the hardware,
    meaning that all writes are converted to little endian when writing to
    the hardware.  This caused a bad interaction with the regmap core in big
    endian mode since it was not aware of the byte swapping and so ended up
    performing little endian writes.
    
    Unfortunately when this issue was noticed it was addressed by updating
    the DT for the affected devices to specify them as little endian.  This
    happened to work since it resulted in two endianness swaps which
    cancelled each other out and gave little endian behaviour but meant that
    the DT was clearly not accurately describing the hardware.
    
    The intention of commit 29bb45f2 (regmap-mmio: Use native
    endianness for read/write) was to fix this by making regmap default to
    native endianness but this breaks most other MMIO users where the
    hardware has a fixed endianness and the implementation uses the __raw
    accessors which are not intended to be used outside of architecture
    code.  Instead use the newly added native-endian DT property to say
    exactly what we want for these systems.
    
    Fixes: 29bb45f2
    
     (regmap-mmio: Use native endianness for read/write)
    Reported-by: default avatarJohannes Berg <johannes@sipsolutions.net>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    Acked-by: default avatarRalf Baechle <ralf@linux-mips.org>
    25d6463e