[PATCH 1/8] ARM: support for Moschip MCS814x SoCs

Thomas Petazzoni thomas.petazzoni at free-electrons.com
Tue Jul 17 06:16:40 EDT 2012


Le Mon, 16 Jul 2012 15:54:04 +0000,
Arnd Bergmann <arnd at arndb.de> a écrit :

> > +void mcs814x_restart(char mode, const char *cmd)
> > +{
> > +	__raw_writel(~(1 << 31), mcs814x_sysdbg_base);
> > +}
> 
> You should generally avoid using __raw_readl etc. and instead use
> readl/write or readl_relaxed/writel_relaxed.

I thought that readl/writel and readl_relaxed/writel_relaxed were used
for PCI-style access, for which these macros/functions do automatically
a conversion from the CPU-endianness to the PCI-endianness
(little-endian). Here of course, this the SoC is used little-endian, it
will just work because readl/writel will not do any endianness
conversion, but if we were on a big-endian machine?

My understanding until now was that __raw_readl/__raw_writel should be
used for accesses with native endianness, but apparently, it's more
subtle than this. Would you mind expanding a bit on this?

Best regards,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com



More information about the linux-arm-kernel mailing list