Thread (80 messages) 80 messages, 6 authors, 2019-11-20

Re: [PATCH v4 04/47] soc: fsl: qe: introduce qe_io{read,write}* wrappers

From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Date: 2019-11-14 08:55:29
Also in: linuxppc-dev, lkml

On 14/11/2019 06.08, Timur Tabi wrote:
On 11/12/19 1:14 AM, Rasmus Villemoes wrote:
quoted
but that's because readl and writel by definition work on little-endian
registers. I.e., on a BE platform, the readl and writel implementation
must themselves contain a swab, so the above would end up doing two
swabs on a BE platform.
Do you know whether the compiler optimizes-out the double swab?
Depends. It's almost impossible to figure out how swab32() is defined,
so how much visibility gcc has into how it works is hard to say. But a
further complication is that the arch may not have, say (simplifying
somewhat)

#define readl(x) swab32(*(volatile u32*)x)

but instead have readl implemented as inline asm which includes the
byteswap. PPC being a case in point, where the readl is in_le32 which is
done with a lwbrx instruction, and certainly gcc couldn't in any way
change a swab32(asm("lwbrx")) into asm("lwz"). But ppc defines its own
mmio_read32be, so that's not an issue.
quoted
(On PPC, there's a separate definition of mmio_read32be, namely
writel_be, which in turn does a out_be32, so on PPC that doesn't
actually end up doing two swabs).

So ioread32be etc. have well-defined semantics: access a big-endian
register and return the result in native endianness.
It seems weird that there aren't any cross-arch lightweight
endian-specific I/O accessors.
Agreed, but I'm really not prepared for trying to go down that rabbit
hole again.

Rasmus

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help