From: Arnd Bergmann <arnd.bergmann@linaro.org>
To: Mark Salter <msalter@redhat.com>
Cc: Mike Turquette <mturquette@ti.com>,
linux@arm.linux.org.uk, linux-kernel@vger.kernel.org,
linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
jeremy.kerr@canonical.com, broonie@opensource.wolfsonmicro.com,
tglx@linutronix.de, linus.walleij@stericsson.com,
amit.kucheria@linaro.org, dsaxena@linaro.org, patches@linaro.org,
linaro-dev@lists.linaro.org, aul@pwsan.com,
grant.likely@secretlab.ca, sboyd@quicinc.com,
shawn.guo@freescale.com, skannan@quicinc.com,
magnus.damm@gmail.com, eric.miao@linaro.org,
richard.zhao@linaro.org, Mike Turquette <mturquette@linaro.org>
Subject: Re: [PATCH v3 4/5] clk: basic gateable and fixed-rate clks
Date: Tue, 22 Nov 2011 15:49:08 +0000 [thread overview]
Message-ID: <201111221549.08451.arnd.bergmann@linaro.org> (raw)
In-Reply-To: <1321974200.2412.25.camel@deneb.redhat.com>
On Tuesday 22 November 2011, Mark Salter wrote:
>
> On Tue, 2011-11-22 at 13:11 +0000, Arnd Bergmann wrote:
> > On Tuesday 22 November 2011, Mike Turquette wrote:
> > > +static void clk_hw_gate_set_bit(struct clk *clk)
> > > +{
> > > + struct clk_hw_gate *gate = to_clk_hw_gate(clk);
> > > + u32 reg;
> > > +
> > > + reg = __raw_readl(gate->reg);
> > > + reg |= BIT(gate->bit_idx);
> > > + __raw_writel(reg, gate->reg);
> > > +}
> >
> > You cannot rely on __raw_readl() to do the right thing, especially
> > in architecture independent code. The safe (but slightly inefficient)
> > solution would be readl/writel. For ARM-only code, it would be best
> > to use readl_relaxed()/writel_relaxed(), but most architectures do
> > not implement that. We can probably add a set of helpers in asm-generic/
> > to define them to the default functions, like "#define readl_relaxed(x)
> > readl(x)", which I think is a good idea anyway.
> >
>
> readl/writel won't work for big endian CPU when the registers are on a
> bus that does the endian swabbing in hardware.
That statement doesn't make any sense.
You obviously have to specify the bit index in a way that works with the
driver implementation and with the hardware.
__raw_readl has an unspecified endianess, which is normally the same
as the register endianess of the CPU (assuming a memory-mapped bus),
which means you have to do extra work if the register layout is
independent of the CPU endianess, which is about as common as
MMIO registers defined as being the same endianes as the CPU in
bi-endian implementations.
Considering that hardware makers cannot agree on how to count bits
(IBM calls the MSB bit 0 on big-endian systems), there is no way
to please everyone, though you could debate about what the clearest
semantics are that we should define.
IMHO it would be nicer to use a bit-mask in bus-endian notation, e.g.
reg = readl(gate->reg);
reg |= le32_to_cpu(gate->bit_mask);
writel(reg, gate->reg);
but there are other ways to do this. The only thing that I would
definitely ask for is having the interface clearly documented as
being one of cpu-endian, bus-endian, fixed-endian or having the
endianess specified in the device definition (device tree or platform
data).
Note that I don't object to adding a new cpu-endian mmio accessor,
which has been discussed repeatedly in the past. It's just that
this accessor does not exist, and using __raw_readl as a substitute
causes additional problems.
Arnd
next prev parent reply other threads:[~2011-11-22 15:49 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-22 1:40 [PATCH v3 0/5] common clk framework Mike Turquette
2011-11-22 1:40 ` [PATCH v3 1/5] clk: Kconfig: add entry for HAVE_CLK_PREPARE Mike Turquette
2011-11-26 0:51 ` Shawn Guo
2011-11-22 1:40 ` [PATCH v3 2/5] Documentation: common clk API Mike Turquette
2011-11-23 2:03 ` Saravana Kannan
2011-11-23 20:33 ` Turquette, Mike
2011-11-26 8:47 ` Shawn Guo
2011-11-27 1:43 ` Turquette, Mike
2011-11-22 1:40 ` [PATCH v3 3/5] clk: introduce the common clock framework Mike Turquette
2011-11-23 3:12 ` Saravana Kannan
2011-11-23 21:30 ` Turquette, Mike
2011-11-26 13:22 ` Shawn Guo
2011-11-27 6:00 ` Turquette, Mike
2011-12-01 1:20 ` Paul Walmsley
2011-12-01 5:53 ` Turquette, Mike
2011-12-01 6:39 ` Paul Walmsley
2011-12-01 14:42 ` Mark Brown
2011-12-01 18:25 ` Turquette, Mike
2011-12-01 18:30 ` Paul Walmsley
2011-12-01 18:32 ` Mark Brown
2011-12-01 22:03 ` Russell King - ARM Linux
2011-12-03 1:04 ` Paul Walmsley
2011-12-01 8:45 ` Russell King - ARM Linux
2011-12-02 17:13 ` Paul Walmsley
2011-12-02 20:23 ` Russell King - ARM Linux
2011-12-02 20:32 ` Uwe Kleine-König
2011-12-01 2:13 ` Paul Walmsley
2011-12-05 21:15 ` Paul Walmsley
2011-12-05 23:48 ` Russell King - ARM Linux
2011-12-06 1:37 ` Paul Walmsley
2011-12-06 6:28 ` Paul Walmsley
2011-12-05 23:40 ` Turquette, Mike
2011-11-22 1:40 ` [PATCH v3 4/5] clk: basic gateable and fixed-rate clks Mike Turquette
2011-11-22 13:11 ` Arnd Bergmann
2011-11-22 15:03 ` Mark Salter
2011-11-22 15:49 ` Arnd Bergmann [this message]
2011-11-26 13:48 ` Shawn Guo
2011-11-27 6:03 ` Turquette, Mike
2011-11-27 0:09 ` Shawn Guo
2011-11-22 1:40 ` [PATCH v3 5/5] clk: export tree topology and clk data via sysfs Mike Turquette
2011-11-22 13:07 ` Arnd Bergmann
2011-11-22 17:42 ` Mike Turquette
2011-11-22 15:49 ` Greg KH
2011-11-22 17:57 ` Mike Turquette
2011-11-22 19:13 ` Greg KH
2011-11-23 3:48 ` Saravana Kannan
2011-11-23 20:43 ` Turquette, Mike
2011-11-23 16:59 ` Tony Lindgren
2011-11-23 18:06 ` Russell King - ARM Linux
2011-11-23 18:55 ` Tony Lindgren
2011-11-23 19:09 ` Mark Brown
2011-11-23 19:19 ` Tony Lindgren
2011-11-23 22:42 ` Russell King - ARM Linux
2011-11-24 1:08 ` Tony Lindgren
[not found] ` <CACxGe6sOd6MiyYaok6BsihJtp-NNsm3WQf+aUPGMRFRpSLw2mQ@mail.gmail.com>
2011-11-22 18:01 ` Mike Turquette
2011-11-22 19:19 ` Grant Likely
2011-11-22 20:02 ` Arnd Bergmann
2011-11-22 20:19 ` Turquette, Mike
2011-11-22 15:42 ` [PATCH v3 0/5] common clk framework Greg KH
2011-11-22 17:45 ` Russell King - ARM Linux
2011-11-22 18:09 ` Mike Turquette
2011-11-22 19:12 ` Greg KH
2011-11-22 19:30 ` Mark Brown
2011-11-26 7:06 ` Shawn Guo
2011-11-27 1:12 ` Turquette, Mike
2011-12-12 19:47 [PATCH v3 4/5] clk: basic gateable and fixed-rate clks Andrew Lunn
2011-12-12 21:06 ` Turquette, Mike
2011-12-12 21:38 ` Andrew Lunn
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=201111221549.08451.arnd.bergmann@linaro.org \
--to=arnd.bergmann@linaro.org \
--cc=amit.kucheria@linaro.org \
--cc=aul@pwsan.com \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=dsaxena@linaro.org \
--cc=eric.miao@linaro.org \
--cc=grant.likely@secretlab.ca \
--cc=jeremy.kerr@canonical.com \
--cc=linaro-dev@lists.linaro.org \
--cc=linus.walleij@stericsson.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=magnus.damm@gmail.com \
--cc=msalter@redhat.com \
--cc=mturquette@linaro.org \
--cc=mturquette@ti.com \
--cc=patches@linaro.org \
--cc=richard.zhao@linaro.org \
--cc=sboyd@quicinc.com \
--cc=shawn.guo@freescale.com \
--cc=skannan@quicinc.com \
--cc=tglx@linutronix.de \
/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
Powered by JetHome