public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: Michal Simek <monstr@monstr.eu>
Cc: Vineet Gupta <Vineet.Gupta1@synopsys.com>,
	Alexey Brodkin <Alexey.Brodkin@synopsys.com>,
	Arnd Bergmann <arnd.bergmann@linaro.org>,
	linux-kernel@vger.kernel.org, grant.likely@secretlab.ca,
	benh@kernel.crashing.org
Subject: Re: [PATCH] drivers/block/xsysace - replace in(out)_8/in(out)_be16/in(out)_le16 with generic iowrite(read)8/16(be)
Date: Wed, 30 Jan 2013 15:36:10 +0100	[thread overview]
Message-ID: <1781360.cmQWHCW5SC@wuerfel> (raw)
In-Reply-To: <CAHTX3d+B4_u4zG+iGnGMuRj4Zt8WCUS32apwhFVJen0JtzcRfA@mail.gmail.com>

On Wednesday 30 January 2013 13:31:58 Michal Simek wrote:
> Also from my understanding of arm we should use readl/b/w functions because
> they have memory barriers which should be probably performed.
> 
> And I haven't found any IO function which will behave on arm as LE and
> on PPC as BE.

There are none, except for the __raw_ versions that are generally
not recommended for other reasons.

There really is no easy solution, because most of the hardware IP
blocks have fixed endianess, e.g. an OHCI USB controller will normally
have little-endian registers on all architectures, but in very rare
cases it may be big-endian, because some hardware designer tried to
be helpful and put a byte swapping logic in front of it.

There are a few devices that tend to have the same endianess as the
CPU, again because some hardware designer tried to make things easy
for software by making the hardware confiurable. Again, what normally
happens is that the next hardware designer takes this block and 
hardwires it to some endianess that he sees as "correct" but puts
it on a system with a variable-endian CPU. Note that there are both
little-endian PowerPC systems and big-endian ARM systems, they just
happen to be the minority on an architecture where 99% of the users
prefer the opposite.

The outcome is basically you're screwed for every driver that is
not fixed endianess. The normal workaround is to do something like

#if defined(CONFIG_FOO_BIG_ENDIAN) && !defined(CONFIG_FOO_LITTLE_ENDIAN)
/* always big-endian
#define foo_readl(dev, reg) ioread32_be(dev->regs + reg)
#define foo_writel(dev, reg, val) iowrite32_be(val, dev->regs + reg)
#elif !defined(CONFIG_FOO_BIG_ENDIAN) && defined(CONFIG_FOO_LITTLE_ENDIAN)
/* always little-endian
#define foo_readl(dev, reg) ioread32(dev->regs + reg)
#define foo_writel(dev, reg, val) iowrite32e(val, dev->regs + reg)
#else
/* run-time configured */
#define foo_readl(dev, reg) dev->readl(dev->regs + reg)
#define foo_writel(dev, reg, val) dev->writel(val, dev->regs + reg)
#endif

and select the CONFIG_FOO_BIG_ENDIAN and CONFIG_FOO_LITTLE_ENDIAN
symbols in Kconfig based on the system you are building for.

This of course gets further complicated if you require different
accessors per architecture, like ARM wanting readl or ioread32
and PowerPC wanting in_le32 for a little-endian SoC component.

	Arnd

  reply	other threads:[~2013-01-30 14:36 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-29 16:02 [PATCH] drivers/block/xsysace - replace in(out)_8/in(out)_be16/in(out)_le16 with generic iowrite(read)8/16(be) Alexey Brodkin
2013-01-29 16:27 ` Arnd Bergmann
2013-01-30 11:03   ` Alexey Brodkin
2013-01-30 11:13     ` Michal Simek
2013-01-30 12:10       ` Vineet Gupta
2013-01-30 12:31         ` Michal Simek
2013-01-30 14:36           ` Arnd Bergmann [this message]
2013-02-04  9:26             ` Michal Simek
2013-02-04 17:24               ` Arnd Bergmann
2013-02-05  2:29                 ` Benjamin Herrenschmidt
2013-02-05 10:54                   ` Michal Simek
2013-02-05 12:09                     ` Vineet Gupta
2013-02-05 12:29                       ` Benjamin Herrenschmidt
2013-02-05 12:19                     ` Benjamin Herrenschmidt
2013-02-05 12:38                       ` Michal Simek
2013-02-05 14:03                         ` Alexey Brodkin
2013-02-05 15:12                           ` Arnd Bergmann
2013-02-05 21:01                             ` Benjamin Herrenschmidt
2013-02-06 10:03                             ` Grant Likely
2013-02-06 16:20                               ` Arnd Bergmann
2013-02-06 16:21                               ` Michal Simek
2013-02-07  0:34                                 ` Arnd Bergmann
2013-02-06 17:40                                   ` Michal Simek
2013-02-06 19:51                                     ` Geert Uytterhoeven
2013-02-07  7:23                                       ` Michal Simek
2013-02-07  7:38                                         ` Geert Uytterhoeven
2013-02-07  8:01                                           ` Michal Simek
2013-02-07  8:20                                             ` Geert Uytterhoeven
2013-02-07  8:33                                               ` Arnd Bergmann
2013-02-07 14:19                                                 ` Michal Simek
2013-02-07 23:12                                                   ` Arnd Bergmann
2013-02-11 10:38                                                     ` Michal Simek
2013-02-11 15:26                                                       ` Arnd Bergmann
2013-02-11 15:36                                                         ` Michal Simek
2013-02-11 15:43                                                           ` Arnd Bergmann
2013-02-11 15:57                                                             ` Michal Simek
2013-02-11 16:08                                                               ` Arnd Bergmann
2013-02-12  0:29                                                                 ` Benjamin Herrenschmidt
2013-02-12 11:29                                                                   ` Arnd Bergmann
2013-02-12 10:11                                                                 ` Michal Simek
2013-02-12 11:26                                                                   ` Arnd Bergmann
2013-02-12 12:14                                                                     ` Michal Simek
2013-02-12 13:55                                                                       ` Arnd Bergmann
2013-02-12 12:30                                                                   ` Benjamin Herrenschmidt
2013-02-12  0:25                                                               ` Benjamin Herrenschmidt
2013-02-12 10:03                                                                 ` Michal Simek
2013-02-05 21:00                           ` Benjamin Herrenschmidt
2013-02-05 21:25                             ` Alexey Brodkin
2013-02-05 23:07                               ` Benjamin Herrenschmidt
2013-02-06 10:14                                 ` Grant Likely
2013-02-06 16:27                                   ` Arnd Bergmann
2013-02-06 21:35                                   ` Benjamin Herrenschmidt
2013-02-07 12:09                                     ` Alexey Brodkin
2013-02-07 12:20                                       ` Benjamin Herrenschmidt
2013-02-07 12:23                                         ` Benjamin Herrenschmidt
2013-02-07 14:31                                       ` Michal Simek
2013-02-07 14:35                                         ` Alexey Brodkin
2013-02-07 14:39                                     ` Grant Likely
2013-02-07 14:51                                       ` Grant Likely
2013-02-07 15:12                                         ` Alexey Brodkin
2013-02-07 15:23                                           ` Grant Likely
2013-02-07 15:28                                             ` Alexey Brodkin
2013-02-07 16:44                                               ` Grant Likely
2013-02-07 16:56                                                 ` Alexey Brodkin
2013-02-07 17:16                                                   ` Grant Likely
2013-02-07 17:22                                                     ` Alexey Brodkin
2013-02-08  7:45                                                       ` Grant Likely
2013-02-07 21:18                                                   ` Benjamin Herrenschmidt
2013-02-07 21:15                                                 ` Benjamin Herrenschmidt
2013-02-07 23:05                                                 ` Arnd Bergmann
2013-02-08  6:19                                                   ` Geert Uytterhoeven
2013-02-08  7:14                                                   ` Grant Likely
2013-02-07 21:09                                             ` Benjamin Herrenschmidt
2013-02-12 17:02                                             ` Michal Simek
2013-02-12 17:25                                               ` Arnd Bergmann
2013-03-21 17:01                                                 ` Alexey Brodkin
2013-06-19  8:56                                                 ` xsysace driver support on arches other than PPC/Microblaze Alexey Brodkin
2013-06-19  9:09                                                   ` Alexey Brodkin
2013-06-19 12:13                                                   ` Andy Shevchenko
2013-06-19 12:56                                                     ` Alexey Brodkin
2013-06-19 14:51                                                       ` Arnd Bergmann
2013-02-07 21:06                                           ` [PATCH] drivers/block/xsysace - replace in(out)_8/in(out)_be16/in(out)_le16 with generic iowrite(read)8/16(be) Benjamin Herrenschmidt
2013-02-05 23:03                         ` Arnd Bergmann
2013-02-06  8:59                           ` Geert Uytterhoeven
2013-02-06 16:18                             ` Arnd Bergmann
2013-02-05 10:45                 ` Michal Simek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1781360.cmQWHCW5SC@wuerfel \
    --to=arnd@arndb.de \
    --cc=Alexey.Brodkin@synopsys.com \
    --cc=Vineet.Gupta1@synopsys.com \
    --cc=arnd.bergmann@linaro.org \
    --cc=benh@kernel.crashing.org \
    --cc=grant.likely@secretlab.ca \
    --cc=linux-kernel@vger.kernel.org \
    --cc=monstr@monstr.eu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox