mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Gerhard Sittig <gsi@denx.de>
To: Andrew Lunn <andrew@lunn.ch>
Cc: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Russell King" <linux@arm.linux.org.uk>,
	"Jason Cooper" <jason@lakedaemon.net>,
	"Benjamin Herrenschmidt" <benh@kernel.crashing.org>,
	linux-kernel@vger.kernel.org,
	"Jason Gunthorpe" <jgunthorpe@obsidianresearch.com>,
	"Ezequiel Garcia" <ezequiel.garcia@free-electrons.com>,
	"Grant Likely" <grant.likely@linaro.org>,
	"Mike Turquette" <mturquette@linaro.org>,
	linux-arm-kernel@lists.infradead.org,
	"Sebastian Hesselbarth" <sebastian.hesselbarth@gmail.com>
Subject: Re: [PATCH] clk: provide public clk_is_enabled function
Date: Sun, 6 Oct 2013 11:06:09 +0200	[thread overview]
Message-ID: <20131006090609.GK14747@book.gsilab.sittig.org> (raw)
In-Reply-To: <20131005204208.GB28106@lunn.ch>

On Sat, Oct 05, 2013 at 22:42 +0200, Andrew Lunn wrote:
> 
> On Sat, Oct 05, 2013 at 10:24:30PM +0200, Uwe Kleine-König wrote:
> > On Fri, Oct 04, 2013 at 12:08:30PM +0200, Sebastian Hesselbarth wrote:
> > > To determine if a clk has been previously enabled, provide a public
> > > clk_is_enabled function. This is especially helpful to check the state
> > > of clk-gate without actually changing the state of the gate.
> > I wonder what you want to do with the return value.
> > 
> > When doing
> > 
> > 	if (clk_is_enabled(someclk))
> > 		do_something();
> > 
> > you cannot in general know if the clock is still on when you start to
> > do_something.
> 
> Hi Uwe
> 
> At least in the use case Sebastian needs it for, we don't need an "in
> general" solution. It is used early boot time to see if the boot
> loader left the clock running.

Wait, unless I'm missing something, the clk_is_enabled() call
_won't_ determine whether the clock is enabled in hardware
(whether the boot loader created or left this condition), instead
it only determines whether clk_enable() was called previously and
thus the clock _shall_ be enabled.

AFAIK the kernel's CCF support is "self contained" and does not
consider any data or state that was "inherited" from boot staged
before the kernel.  That's why the "disable unused" step disables
everything that wasn't acquired _in the kernel_ regardless of
what the boot loader may have done or what is enabled at reset.

> The other user of the clock is the
> ethernet driver, which we know cannot change it yet, because driver
> probing has not started yet.

I understand that the situation here is, that the ethernet driver
hasn't probed yet, but the clock driver did.  You are in early
setup code and want to (check and) fetch data from the hardware
which the ethernet driver later needs.

What's wrong with an explicit enable/disable around the data
acquisition?  This allows to reliably fetch and store the
information (into the device tree data?) for later use, and is
neutral to the enable counter.  If the clock was enabled before,
it remains enabled.  If the clock was disabled before, it will
get disabled again.  In any case clock only may be turned off
after you have grabbed the data, the data is only taken when it's
available and valid.

This approach of explicit enable/disable around data access only
breaks if the ethernet driver won't acquire its related clock
appropriately, which would be a bug in the ethernet driver that
should be easy to fix.  (Strictly speaking it's not the data
gathering that breaks, but the already broken network driver
which accesses the hardware without acquiring the clock, and not
finds the clock disabled.)


virtually yours
Gerhard Sittig
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr. 5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office@denx.de

  reply	other threads:[~2013-10-06  9:06 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-04 10:08 Sebastian Hesselbarth
2013-10-04 13:17 ` Andrew Lunn
2013-10-05 20:24 ` Uwe Kleine-König
2013-10-05 20:42   ` Andrew Lunn
2013-10-06  9:06     ` Gerhard Sittig [this message]
2013-10-06 16:30       ` Andrew Lunn
2013-10-06 19:42         ` Sebastian Hesselbarth
2013-10-06 20:02           ` Mike Turquette
2013-10-06 22:24             ` Sebastian Hesselbarth
2013-10-06 21:04               ` Mike Turquette
2013-10-07  8:39                 ` Sebastian Hesselbarth
2013-10-06 21:35               ` 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=20131006090609.GK14747@book.gsilab.sittig.org \
    --to=gsi@denx.de \
    --cc=andrew@lunn.ch \
    --cc=benh@kernel.crashing.org \
    --cc=ezequiel.garcia@free-electrons.com \
    --cc=grant.likely@linaro.org \
    --cc=jason@lakedaemon.net \
    --cc=jgunthorpe@obsidianresearch.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=mturquette@linaro.org \
    --cc=sebastian.hesselbarth@gmail.com \
    --cc=u.kleine-koenig@pengutronix.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