1. 05 Feb, 2016 1 commit
    • Mark Brown's avatar
      regmap: mmio: Revert to v4.4 endianness handling · 320549a2
      Mark Brown authored
      Commit 29bb45f2 (regmap-mmio: Use native endianness for read/write)
      attempted to fix some long standing bugs in the MMIO implementation for
      big endian systems caused by duplicate byte swapping in both regmap and
      readl()/writel() which affected MIPS systems as when they are in big
      endian mode they flip the endianness of all registers in the system, not
      just the CPU.  MIPS systems had worked around this by declaring regmap
      using IPs as little endian which is inaccurate, unfortunately the issue
      had not been reported.
      
      Sadly the fix makes things worse rather than better.  By changing the
      behaviour to match the documentation it caused behaviour changes for
      other IPs which broke them and by using the __raw I/O accessors to avoid
      the endianness swapping in readl()/writel() it removed some memory
      ordering guarantees and could potentially generate unvirtualisable
      instructions on some architectures.
      
      Unfortunately sorting out all this mess in any half way sensible fashion
      was far too invasive to go in during an -rc cycle so instead let's go
      back to the old broken behaviour for v4.5, the better fixes are already
      queued for v4.6.  This does mean that we keep the broken MIPS DTs for
      another release but that seems the least bad way of handling the
      situation.
      Reported-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      320549a2
  2. 24 Jan, 2016 39 commits