From: Will Deacon <will.deacon@arm.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
Mike Frysinger <vapier@gentoo.org>
Subject: Re: [RESEND PATCH 2/4] asm-generic: io: don't perform swab during {in,out} string functions
Date: Fri, 19 Oct 2012 13:53:06 +0100 [thread overview]
Message-ID: <20121019125306.GJ4582@mudshark.cambridge.arm.com> (raw)
In-Reply-To: <CAMuHMdWH3GXJ_dW-FCAX=LAkBuQmQtwRUtNpcqg_afm-UFK_2g@mail.gmail.com>
On Thu, Oct 18, 2012 at 06:48:16AM +0100, Geert Uytterhoeven wrote:
> On Thu, Oct 18, 2012 at 2:04 AM, Benjamin Herrenschmidt
> <benh@kernel.crashing.org> wrote:
> > The sort story is that endianness is not a property of the IO port but
> > of the information that transit through it. If you're just going to copy
> > it into memory, you want to preserve it's format and so do not byteswap.
> >
> > The byteswap we do on standard accessors is a "helper" because we assume
> > that underneath those IO ports are registers that are Little Endian. But
> > when using one as a window to a byte stream, we must not arbitrarily
> > swap the byte stream. We copy it as-is to memory, and then one can work
> > at interpreting the various fields that might or might not be present in
> > that stream with the appropriate accessors for memory accesses.
>
> So assume you have the bytestream "Hello, world!\n" in memory on the
> PCI device.I.e.
>
> 00000000 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 0a |Hello, world!.|
>
> You want to copy it to system RAM using readsl(), which does:
>
> u32 *buf = buffer;
> do {
> u32 x = __raw_readl(addr + PCI_IOBASE);
> *buf++ = x;
> } while (--count);
>
> On little endian, the first __raw_readl() should return "0x6c6c6548", so
> it is stored correctly by "*buf = x ".
> On big endian, the first __raw_readl() should return "0x48656c6c" instead,
> else it's stored incorrectly by "*buf = x ".
So far so good...
> But the PCI bus is little endian, so I expect __raw_readl() would return
> "0x6c6c6548", and thus needs swapping?
I think this would only happen if your busses are wired swapped, in which
case you'll have to handle this in your arch code because reading from a
device and then writing to memory will end up with the data in the wrong
order (the data stream won't be affected by passing through the CPU).
Will
next prev parent reply other threads:[~2012-10-19 12:53 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-17 15:45 [RESEND PATCH 0/4] Fix endianness of generic I/O accessors Will Deacon
2012-10-17 15:45 ` Will Deacon
2012-10-17 15:45 ` [RESEND PATCH 1/4] asm-generic: io: remove {read,write} string functions Will Deacon
2012-10-17 15:45 ` Will Deacon
2012-10-26 13:29 ` Arnd Bergmann
2012-10-26 13:38 ` Will Deacon
2012-10-26 13:38 ` Will Deacon
2012-10-17 15:45 ` [RESEND PATCH 2/4] asm-generic: io: don't perform swab during {in,out} " Will Deacon
2012-10-17 15:45 ` Will Deacon
2012-10-17 19:16 ` Geert Uytterhoeven
2012-10-18 0:04 ` Benjamin Herrenschmidt
2012-10-18 5:48 ` Geert Uytterhoeven
2012-10-19 12:53 ` Will Deacon [this message]
2012-10-23 1:25 ` Benjamin Herrenschmidt
2012-10-23 1:25 ` Benjamin Herrenschmidt
2012-10-28 9:28 ` Geert Uytterhoeven
2012-10-28 20:38 ` Benjamin Herrenschmidt
2012-10-18 0:01 ` Benjamin Herrenschmidt
2012-10-17 15:45 ` [RESEND PATCH 3/4] mmc: mmci: use io{read,write}*_rep accessors instead of " Will Deacon
2012-10-17 15:45 ` Will Deacon
2012-10-17 15:45 ` [RESEND PATCH 4/4] net: smc91x: " Will Deacon
2012-10-17 15:45 ` Will Deacon
2012-10-19 8:25 ` James Hogan
2012-10-19 8:25 ` James Hogan
2012-10-19 9:27 ` Will Deacon
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=20121019125306.GJ4582@mudshark.cambridge.arm.com \
--to=will.deacon@arm.com \
--cc=benh@kernel.crashing.org \
--cc=geert@linux-m68k.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=vapier@gentoo.org \
/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;
as well as URLs for NNTP newsgroup(s).