linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stephen Boyd <sboyd@codeaurora.org>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Russell King <linux@arm.linux.org.uk>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>,
	Chris Ball <chris@printf.net>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-arm-msm@vger.kernel.org" <linux-arm-msm@vger.kernel.org>
Subject: Re: [PATCH v3 13/13] mmc: mmci: Add Qcom specific pio_read function.
Date: Thu, 29 May 2014 18:30:42 -0700	[thread overview]
Message-ID: <5387DF42.5020506@codeaurora.org> (raw)
In-Reply-To: <CACRpkdb_ozxL3wAVf7FJr-0A2tWGHkfXeXf5sWaW6h_yzK4QvA@mail.gmail.com>

On 05/29/14 00:43, Linus Walleij wrote:
> On Wed, May 28, 2014 at 3:57 PM, Srinivas Kandagatla
> <srinivas.kandagatla@linaro.org> wrote:
>
>>> This doesn't look endianness agnostic. Shouldn't we use ioread32_rep()
>>> to read this fifo?
>> Is'nt readl endianess aware?
> At least once a year read through arch/arm/include/asm/io.h
>
> static inline u32 __raw_readl(const volatile void __iomem *addr)
> {
>         u32 val;
>         asm volatile("ldr %1, %0"
>                      : "+Qo" (*(volatile u32 __force *)addr),
>                        "=r" (val));
>         return val;
> }
> (...)
> #define readl_relaxed(c) ({ u32 __r = le32_to_cpu((__force __le32) \
>                                         __raw_readl(c)); __r; })
> (...)
> #define readl(c)                ({ u32 __v = readl_relaxed(c);
> __iormb(); __v; })
>
> readl() reads in little endian.
>
> All PrimeCells are little endian, trouble would occur if and only if
> this cell was
> used on a big endian CPU, like an ARM used in BE mode, if the macros
> didn't look exactly like this.
>
> Thanks to the fact that readl() is always LE things work smoothly.
>
> Then to the question whether to use ioread32() instead:
>
> #define ioread32(p)     ({ unsigned int __v = le32_to_cpu((__force
> __le32)__raw_readl(p)); __iormb(); __v; })
>
> Same thing as readl(). The only reason to use ioread32() rather than
> readl() is that some archs do not support readl() but only ioread32().
> However for that to be a problem, these archs must be utilizing that
> primecell! And if they do there are two ways to solve it: either change
> the entire world to use ioread/write32 or simply just define readl() and
> friends for that arch in its io.h file.
>
> I'd say don't touch it right now.

Hm... that doesn't sound right. Please see this thread on lkml[1], and
also this video from Ben H.[2] My understanding is that this is a fifo
so I would think we want to use the ioread32_rep() function here (or
other "string" io functionality). Otherwise we're going to byteswap the
data that we're trying to interpret as a buffer and big endian CPUs
won't work.

>
>> we can not use ioread32_rep because as we can not reliably know how many
>> words we should read? FIFOCNT would have helped but its not advised to be
>> use as per the datasheet.
> You are right. readsl() or ioread32_rep() isn't used for this reason.
>
>

We could always use a size of 1 right?

[1] https://lkml.org/lkml/2012/10/22/671
[2] http://linuxplumbers.ubicast.tv/videos/big-and-little-endian-inside-out/

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation


  reply	other threads:[~2014-05-30  1:30 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-23 12:49 [PATCH v3 00/13] Add Qualcomm SD Card Controller support srinivas.kandagatla
2014-05-23 12:50 ` [PATCH v3 01/13] mmc: mmci: use NSEC_PER_SEC macro srinivas.kandagatla
2014-05-23 12:50 ` [PATCH v3 02/13] mmc: mmci: convert register bits to use BIT() macro srinivas.kandagatla
2014-05-23 12:51 ` [PATCH v3 03/13] mmc: mmci: Add Qualcomm Id to amba id table srinivas.kandagatla
2014-05-26  9:10   ` Ulf Hansson
2014-05-26 17:00     ` Srinivas Kandagatla
2014-05-27 13:49       ` Srinivas Kandagatla
2014-05-23 12:51 ` [PATCH v3 04/13] mmc: mmci: Add Qcom datactrl register variant srinivas.kandagatla
2014-05-23 12:51 ` [PATCH v3 05/13] mmc: mmci: Add register read/write wrappers srinivas.kandagatla
2014-05-23 12:51 ` [PATCH v3 06/13] mmc: mmci: Qcomm: Add 3 clock cycle delay after register write srinivas.kandagatla
2014-05-26  9:34   ` Ulf Hansson
2014-05-26 17:04     ` Srinivas Kandagatla
2014-05-23 12:51 ` [PATCH v3 07/13] mmc: mmci: add ddrmode mask to variant data srinivas.kandagatla
2014-05-26  9:53   ` Ulf Hansson
2014-05-26 17:06     ` Srinivas Kandagatla
2014-05-23 12:52 ` [PATCH v3 08/13] mmc: mmci: add 8bit bus support in " srinivas.kandagatla
2014-05-26 10:07   ` Ulf Hansson
2014-05-28  7:27     ` Srinivas Kandagatla
2014-05-28  7:53       ` Linus Walleij
2014-05-23 12:52 ` [PATCH v3 09/13] mmc: mmci: add edge support to data and command out " srinivas.kandagatla
2014-05-23 12:52 ` [PATCH v3 10/13] mmc: mmci: add Qcom specifics of clk and datactrl registers srinivas.kandagatla
2014-05-26 13:05   ` Ulf Hansson
2014-05-26 21:38     ` Srinivas Kandagatla
2014-05-28  9:41       ` Srinivas Kandagatla
2014-05-28 10:03         ` Ulf Hansson
2014-05-23 12:52 ` [PATCH v3 11/13] mmc: mmci: Add support to data commands via variant structure srinivas.kandagatla
2014-05-23 12:52 ` [PATCH v3 12/13] mmc: mmci: add explicit clk control srinivas.kandagatla
2014-05-26 14:21   ` Ulf Hansson
2014-05-26 14:28     ` Ulf Hansson
2014-05-26 22:39     ` Srinivas Kandagatla
2014-05-27  9:32       ` Ulf Hansson
2014-05-27 12:43         ` Srinivas Kandagatla
2014-05-27 14:07           ` Ulf Hansson
2014-05-27 14:14             ` Srinivas Kandagatla
2014-05-28  8:02       ` Linus Walleij
2014-05-28  8:28         ` Srinivas Kandagatla
2014-05-28 10:17           ` Ulf Hansson
2014-05-23 12:53 ` [PATCH v3 13/13] mmc: mmci: Add Qcom specific pio_read function srinivas.kandagatla
2014-05-23 23:28   ` Stephen Boyd
2014-05-28 13:57     ` Srinivas Kandagatla
2014-05-29  7:43       ` Linus Walleij
2014-05-30  1:30         ` Stephen Boyd [this message]
2014-05-30  9:00           ` Linus Walleij
2014-05-26 14:34   ` Ulf Hansson
2014-05-26 17:10     ` Srinivas Kandagatla
2014-05-28  8:08   ` Linus Walleij
2014-05-28  8:51     ` Srinivas Kandagatla

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=5387DF42.5020506@codeaurora.org \
    --to=sboyd@codeaurora.org \
    --cc=chris@printf.net \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=srinivas.kandagatla@linaro.org \
    --cc=ulf.hansson@linaro.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).