From: Rob Herring <robherring2@gmail.com>
To: Richard Zhao <richard.zhao@freescale.com>
Cc: "Turquette, Mike" <mturquette@ti.com>,
andrew@lunn.ch, linaro-dev@lists.linaro.org,
eric.miao@linaro.org, grant.likely@secretlab.ca,
Colin Cross <ccross@google.com>,
jeremy.kerr@canonical.com, linux@arm.linux.org.uk,
sboyd@quicinc.com, magnus.damm@gmail.com, dsaxena@linaro.org,
linux-arm-kernel@lists.infradead.org, arnd.bergmann@linaro.org,
patches@linaro.org, Thomas Gleixner <tglx@linutronix.de>,
linux-omap@vger.kernel.org, richard.zhao@linaro.org,
shawn.guo@freescale.com, paul@pwsan.com,
linus.walleij@stericsson.com,
broonie@opensource.wolfsonmicro.com,
linux-kernel@vger.kernel.org, amit.kucheria@linaro.org,
skannan@quicinc.com
Subject: Re: [PATCH v4 3/6] clk: introduce the common clock framework
Date: Wed, 04 Jan 2012 08:32:31 -0600 [thread overview]
Message-ID: <4F0462FF.1000308@gmail.com> (raw)
In-Reply-To: <20120104021541.GI2414@b20223-02.ap.freescale.net>
On 01/03/2012 08:15 PM, Richard Zhao wrote:
> On Fri, Dec 16, 2011 at 04:45:48PM -0800, Turquette, Mike wrote:
>> On Wed, Dec 14, 2011 at 5:18 AM, Thomas Gleixner <tglx@linutronix.de> wrote:
>>> On Tue, 13 Dec 2011, Mike Turquette wrote:
snip
>>>> +/**
>>>> + * clk_init - initialize the data structures in a struct clk
>>>> + * @dev: device initializing this clk, placeholder for now
>>>> + * @clk: clk being initialized
>>>> + *
>>>> + * Initializes the lists in struct clk, queries the hardware for the
>>>> + * parent and rate and sets them both. Adds the clk to the sysfs tree
>>>> + * topology.
>>>> + *
>>>> + * Caller must populate clk->name and clk->flags before calling
>>>
>>> I'm not too happy about this construct. That leaves struct clk and its
>>> members exposed to the world instead of making it a real opaque
>>> cookie. I know from my own painful experience, that this will lead to
>>> random fiddling in that data structure in drivers and arch code just
>>> because the core code has a shortcoming.
>>>
>>> Why can't we make struct clk a real cookie and confine the data
>>> structure to the core code ?
>>>
>>> That would change the init call to something like:
>>>
>>> struct clk *clk_init(struct device *dev, const struct clk_hw *hw,
>>> struct clk *parent)
>>>
>>> And have:
>>> struct clk_hw {
>>> struct clk_hw_ops *ops;
>>> const char *name;
>>> unsigned long flags;
>>> };
>>>
>>> Implementers can do:
>>> struct my_clk_hw {
>>> struct clk_hw hw;
>>> mydata;
>>> };
>>>
>>> And then change the clk ops callbacks to take struct clk_hw * as an
>>> argument.
> We have to define static clocks before we adopt DT binding.
> If clk is opaque and allocate memory in clk core, it'll make hard
> to define static clocks. And register/init will pass a long parameter
> list.
DT is not a prerequisite for having dynamically created clocks. You can
make clock init dynamic without DT.
What data goes in struct clk vs. struct clk_hw could change over time.
So perhaps we can start with some data in clk_hw and plan to move it to
struct clk later. Even if almost everything ends up in clk_hw initially,
at least the structure is in place to have common, core-only data
separate from platform data.
What is the actual data you need to be static and accessible to the
platform code? A ptr to parent clk is the main thing I've seen for
static initialization. So make the parent ptr be struct clk_hw* and
allow the platforms to access.
Rob
WARNING: multiple messages have this Message-ID (diff)
From: robherring2@gmail.com (Rob Herring)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 3/6] clk: introduce the common clock framework
Date: Wed, 04 Jan 2012 08:32:31 -0600 [thread overview]
Message-ID: <4F0462FF.1000308@gmail.com> (raw)
In-Reply-To: <20120104021541.GI2414@b20223-02.ap.freescale.net>
On 01/03/2012 08:15 PM, Richard Zhao wrote:
> On Fri, Dec 16, 2011 at 04:45:48PM -0800, Turquette, Mike wrote:
>> On Wed, Dec 14, 2011 at 5:18 AM, Thomas Gleixner <tglx@linutronix.de> wrote:
>>> On Tue, 13 Dec 2011, Mike Turquette wrote:
snip
>>>> +/**
>>>> + * clk_init - initialize the data structures in a struct clk
>>>> + * @dev: device initializing this clk, placeholder for now
>>>> + * @clk: clk being initialized
>>>> + *
>>>> + * Initializes the lists in struct clk, queries the hardware for the
>>>> + * parent and rate and sets them both. Adds the clk to the sysfs tree
>>>> + * topology.
>>>> + *
>>>> + * Caller must populate clk->name and clk->flags before calling
>>>
>>> I'm not too happy about this construct. That leaves struct clk and its
>>> members exposed to the world instead of making it a real opaque
>>> cookie. I know from my own painful experience, that this will lead to
>>> random fiddling in that data structure in drivers and arch code just
>>> because the core code has a shortcoming.
>>>
>>> Why can't we make struct clk a real cookie and confine the data
>>> structure to the core code ?
>>>
>>> That would change the init call to something like:
>>>
>>> struct clk *clk_init(struct device *dev, const struct clk_hw *hw,
>>> struct clk *parent)
>>>
>>> And have:
>>> struct clk_hw {
>>> struct clk_hw_ops *ops;
>>> const char *name;
>>> unsigned long flags;
>>> };
>>>
>>> Implementers can do:
>>> struct my_clk_hw {
>>> struct clk_hw hw;
>>> mydata;
>>> };
>>>
>>> And then change the clk ops callbacks to take struct clk_hw * as an
>>> argument.
> We have to define static clocks before we adopt DT binding.
> If clk is opaque and allocate memory in clk core, it'll make hard
> to define static clocks. And register/init will pass a long parameter
> list.
DT is not a prerequisite for having dynamically created clocks. You can
make clock init dynamic without DT.
What data goes in struct clk vs. struct clk_hw could change over time.
So perhaps we can start with some data in clk_hw and plan to move it to
struct clk later. Even if almost everything ends up in clk_hw initially,
at least the structure is in place to have common, core-only data
separate from platform data.
What is the actual data you need to be static and accessible to the
platform code? A ptr to parent clk is the main thing I've seen for
static initialization. So make the parent ptr be struct clk_hw* and
allow the platforms to access.
Rob
next prev parent reply other threads:[~2012-01-04 14:32 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-14 3:53 [PATCH v4 0/6] common clk framework Mike Turquette
2011-12-14 3:53 ` Mike Turquette
2011-12-14 3:53 ` Mike Turquette
[not found] ` <1323834838-2206-1-git-send-email-mturquette-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2011-12-14 3:53 ` [PATCH v4 1/6] clk: Kconfig: add entry for HAVE_CLK_PREPARE Mike Turquette
2011-12-14 3:53 ` Mike Turquette
2011-12-14 3:53 ` Mike Turquette
2011-12-14 3:53 ` [PATCH v4 2/6] Documentation: common clk API Mike Turquette
2011-12-14 3:53 ` Mike Turquette
2011-12-14 3:53 ` Mike Turquette
2012-01-05 14:31 ` Amit Kucheria
2012-01-05 14:31 ` Amit Kucheria
2012-01-05 20:04 ` Turquette, Mike
2012-01-05 20:04 ` Turquette, Mike
2012-01-05 20:04 ` Turquette, Mike
2011-12-14 3:53 ` [PATCH v4 3/6] clk: introduce the common clock framework Mike Turquette
2011-12-14 3:53 ` Mike Turquette
2011-12-14 3:53 ` Mike Turquette
2011-12-14 4:52 ` Ryan Mallon
2011-12-14 4:52 ` Ryan Mallon
[not found] ` <4EE82B76.2000204-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-12-14 19:07 ` Turquette, Mike
2011-12-14 19:07 ` Turquette, Mike
2011-12-14 19:07 ` Turquette, Mike
2011-12-14 7:50 ` Richard Zhao
2011-12-14 7:50 ` Richard Zhao
2011-12-14 7:50 ` Richard Zhao
2011-12-14 13:18 ` Thomas Gleixner
2011-12-14 13:18 ` Thomas Gleixner
2011-12-17 0:45 ` Turquette, Mike
2011-12-17 0:45 ` Turquette, Mike
2011-12-17 0:45 ` Turquette, Mike
2011-12-17 11:04 ` Russell King - ARM Linux
2011-12-17 11:04 ` Russell King - ARM Linux
2011-12-17 11:04 ` Russell King - ARM Linux
2012-01-14 4:18 ` Saravana Kannan
2012-01-14 4:18 ` Saravana Kannan
[not found] ` <4F11021A.8070407-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2012-01-14 4:39 ` Turquette, Mike
2012-01-14 4:39 ` Turquette, Mike
2012-01-14 4:39 ` Turquette, Mike
2012-01-14 4:51 ` Saravana Kannan
2012-01-14 4:51 ` Saravana Kannan
[not found] ` <CAJOA=zO=gM2r4pCVo+orLqE9Q1SSw4h5nXsAHo-e_SHZAfvKDA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-01-04 2:15 ` Richard Zhao
2012-01-04 2:15 ` Richard Zhao
2012-01-04 2:15 ` Richard Zhao
2012-01-04 14:32 ` Rob Herring [this message]
2012-01-04 14:32 ` Rob Herring
[not found] ` <4F0462FF.1000308-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-01-05 1:01 ` Turquette, Mike
2012-01-05 1:01 ` Turquette, Mike
2012-01-05 1:01 ` Turquette, Mike
2012-01-05 1:23 ` Richard Zhao
2012-01-05 1:23 ` Richard Zhao
2012-01-05 1:23 ` Richard Zhao
2012-01-05 2:11 ` Rob Herring
2012-01-05 2:11 ` Rob Herring
2012-01-05 4:07 ` Turquette, Mike
2012-01-05 4:07 ` Turquette, Mike
2012-01-05 4:07 ` Turquette, Mike
[not found] ` <CAJOA=zPgwiOSoyZK1SpzZVZfTOmwruTR=WO+gRdVZrZVzNuPSA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-01-12 13:13 ` Amit Kucheria
2012-01-12 13:13 ` Amit Kucheria
2012-01-12 13:13 ` Amit Kucheria
2012-01-13 0:04 ` Saravana Kannan
2012-01-13 0:04 ` Saravana Kannan
2012-01-13 0:48 ` Rob Herring
2012-01-13 0:48 ` Rob Herring
2012-01-13 1:19 ` Saravana Kannan
2012-01-13 1:19 ` Saravana Kannan
[not found] ` <4F0F7507.3080501-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2012-01-13 14:53 ` Shawn Guo
2012-01-13 14:53 ` Shawn Guo
2012-01-13 14:53 ` Shawn Guo
2011-12-14 3:53 ` [PATCH v4 4/6] clk: introduce rate change notifiers Mike Turquette
2011-12-14 3:53 ` Mike Turquette
2011-12-14 3:53 ` Mike Turquette
2011-12-14 3:53 ` [PATCH v4 5/6] clk: basic gateable and fixed-rate clks Mike Turquette
2011-12-14 3:53 ` Mike Turquette
2011-12-14 3:53 ` Mike Turquette
2011-12-14 5:15 ` Ryan Mallon
2011-12-14 5:15 ` Ryan Mallon
[not found] ` <4EE830D5.5070305-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-12-17 0:57 ` Turquette, Mike
2011-12-17 0:57 ` Turquette, Mike
2011-12-17 0:57 ` Turquette, Mike
2011-12-14 3:53 ` [PATCH v4 6/6] clk: export the clk tree topology to debugfs Mike Turquette
2011-12-14 3:53 ` Mike Turquette
2011-12-14 3:53 ` Mike Turquette
2011-12-14 4:02 ` [PATCH v4 0/6] common clk framework Turquette, Mike
2011-12-14 4:02 ` Turquette, Mike
2011-12-14 4:02 ` Turquette, Mike
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=4F0462FF.1000308@gmail.com \
--to=robherring2@gmail.com \
--cc=amit.kucheria@linaro.org \
--cc=andrew@lunn.ch \
--cc=arnd.bergmann@linaro.org \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=ccross@google.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=mturquette@ti.com \
--cc=patches@linaro.org \
--cc=paul@pwsan.com \
--cc=richard.zhao@freescale.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.