Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1317361

Re: [PATCH] Revert "regmap-mmio: Use native endianness for read/write"

From Arnd Bergmann <arnd@arndb.de>
Newsgroups linux.kernel
Subject Re: [PATCH] Revert "regmap-mmio: Use native endianness for read/write"
Date 2016-01-25 23:30 +0100
Message-ID <qUXO3-2e8-31@gated-at.bofh.it> (permalink)
References <qUXuI-25U-47@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Monday 25 January 2016 23:07:55 Johannes Berg wrote:
> This reverts commit 29bb45f25ff3051354ed330c0d0f10418a2b8c7c.
> 
> Clearly, using "native" endianness is a terrible idea when
> devices are involved, since those devices are different hw
> from the CPU, won't change, and the CPU might be able to
> run in both big and little endian, like ARM and PowerPC can.
> Therefore, "native" endian doesn't really exist.
> 
> Consequently, this commit broke my HummingBoard i.MX6 in big
> endian mode since it would now try to talk to the little
> endian hardware with a big endian CPU without conversion.
> 
> What the patch really would have to do is introduce some kind
> of "device-endian" readl/writel, that takes the endianness of
> the device as an argument. That seems a bit overkill though,
> and would likely not generate any better code than the double
> byte-swaps that MIPS is getting now.
> 
> Therefore, simply revert the commit to fix the breakage.
> 
> Fixes: 29bb45f25ff3 ("regmap-mmio: Use native endianness for read/write")
> Signed-off-by: Johannes Berg <johannes@sipsolutions.net>

I think it's more complicated than this unfortunately:

Most architectures behave the same way you explain: all I/O registers
are fixed-endian, and the CPU may also be fixed-endian or may
support both using a runtime switch, which we abstract using the
readl/writel etc helpers in Linux.

On MIPS, the CPU endianess is set at through an input signal
on the CPU core, and this cannot change during runtime but can
change between SoCs or can be configurable with a hardware jumper.
Some SoC vendors (notably Broadcom) decided to use the same signal
to control whether there is a byteswap on the device bus or not,
so the on-chip MMIO registers are always the same endianess as
the CPU itself.	

This means that the devices are in fact CPU-endian, and we need
some way for Linux to represent this. The patch to
drivers/base/regmap/regmap-mmio.c is clearly wrong, as we
must never use __raw_*() accessors in an architecture independent
driver (for a number of reasons), but we still need a fix for
MIPS so it can specify a way to do the double-swap without
faking the endianess of the registers.

Also, defaulting syscon to "native-endian" when nothing else is
specified sounds like a bad idea, but we may already be stuck there
with the precedent in existing bindings after 6a55244e897d
("regmap: mmio: request native endian formatting"), we'll have
to think about that some more.

	Arnd

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH] Revert "regmap-mmio: Use native endianness for read/write" Johannes Berg <johannes@sipsolutions.net> - 2016-01-25 23:10 +0100
  Re: [PATCH] Revert "regmap-mmio: Use native endianness for read/write" Arnd Bergmann <arnd@arndb.de> - 2016-01-25 23:30 +0100
    Re: [PATCH] Revert "regmap-mmio: Use native endianness for  read/write" Johannes Berg <johannes@sipsolutions.net> - 2016-01-25 23:40 +0100
      Re: [PATCH] Revert "regmap-mmio: Use native endianness for  read/write" Mark Brown <broonie@kernel.org> - 2016-01-26 01:00 +0100
        Re: [PATCH] Revert "regmap-mmio: Use native endianness for  read/write" Johannes Berg <johannes@sipsolutions.net> - 2016-01-26 09:30 +0100
          Re: [PATCH] Revert "regmap-mmio: Use native endianness for read/write" Arnd Bergmann <arnd@arndb.de> - 2016-01-26 10:20 +0100
            Re: [PATCH] Revert "regmap-mmio: Use native endianness for  read/write" Johannes Berg <johannes@sipsolutions.net> - 2016-01-26 10:30 +0100
              Re: [PATCH] Revert "regmap-mmio: Use native endianness for  read/write" Mark Brown <broonie@kernel.org> - 2016-01-26 12:40 +0100
                Re: [PATCH] Revert "regmap-mmio: Use native endianness for read/write" Arnd Bergmann <arnd@arndb.de> - 2016-01-26 14:20 +0100
                Re: [PATCH] Revert "regmap-mmio: Use native endianness for  read/write" Johannes Berg <johannes@sipsolutions.net> - 2016-01-26 14:30 +0100
                Re: [PATCH] Revert "regmap-mmio: Use native endianness for  read/write" Mark Brown <broonie@kernel.org> - 2016-01-26 16:30 +0100
                Re: [PATCH] Revert "regmap-mmio: Use native endianness for  read/write" Mark Brown <broonie@kernel.org> - 2016-01-26 22:40 +0100
                Re: [PATCH] Revert "regmap-mmio: Use native endianness for  read/write" Mark Brown <broonie@kernel.org> - 2016-01-26 21:10 +0100
              Re: [PATCH] Revert "regmap-mmio: Use native endianness for read/write" Arnd Bergmann <arnd@arndb.de> - 2016-01-26 14:10 +0100
            Re: [PATCH] Revert "regmap-mmio: Use native endianness for  read/write" Mark Brown <broonie@kernel.org> - 2016-01-26 12:40 +0100
    Re: [PATCH] Revert "regmap-mmio: Use native endianness for  read/write" Mark Brown <broonie@kernel.org> - 2016-01-25 23:50 +0100
      Re: [PATCH] Revert "regmap-mmio: Use native endianness for read/write" Arnd Bergmann <arnd@arndb.de> - 2016-01-26 00:10 +0100
        Re: [PATCH] Revert "regmap-mmio: Use native endianness for  read/write" Mark Brown <broonie@kernel.org> - 2016-01-26 12:40 +0100
  Re: [PATCH] Revert "regmap-mmio: Use native endianness for  read/write" Mark Brown <broonie@kernel.org> - 2016-01-26 00:00 +0100

csiph-web