linux-mips.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stephen Boyd <sboyd@kernel.org>
To: NOGUCHI Hiroshi <drvlabo@gmail.com>
Cc: John Crispin <john@phrozen.org>,
	Michael Turquette <mturquette@baylibre.com>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	linux-mips@vger.kernel.org, linux-clk@vger.kernel.org
Subject: Re: [RFC v2 2/5] dt-bindings: clk: add document for ralink clock driver
Date: Thu, 02 May 2019 14:42:41 -0700	[thread overview]
Message-ID: <155683336194.200842.626018072256859764@swboyd.mtv.corp.google.com> (raw)
In-Reply-To: <1fe454d3-f24e-4169-5f57-97d516a16cc8@gmail.com>

Quoting NOGUCHI Hiroshi (2019-05-01 04:33:24)
> 
> 
> On 2019/04/26 4:29, Stephen Boyd wrote:
> >> +Required properties:
> >> + - compatible: must be "ralink,rt2880-clock"
> >> + - #clock-cells: must be 1
> >> + - ralink,sysctl: a phandle to a ralink syscon register region
> >> + - clock-indices: identifying number.
> >> +       These must correspond to the bit number in CLKCFG1.
> > 
> > These look like driver level details that we're putting in the DT so we
> > can compress the number space that consumers use. Is that right? If so,
> > I don't get it. Can we not use this property?
> 
> I understand that the bit numbers in clock gating register are hardware 
> resource informations.
> Therefore, it is not strange that they are described in DT, I think.
> 
> 
> >> +       Clock consumers use one of them as #clock-cells index.
> >> + - clock-output-names: array of gating clocks' names
> >> + - clocks: array of phandles which points the parent clock
> >> +       for gating clocks.
> >> +       If gating clock does not need parent clock linkage,
> >> +       we bind to dummy clock whose frequency is zero.
> >> +
> >> +
> >> +Example:
> >> +
> >> +/* dummy parent clock node */
> >> +dummy_ck: dummy_ck {
> >> +       #clock-cells = <0>;
> >> +       compatible = "fixed-clock";
> >> +       clock-frequency = <0>;
> >> +};
> > 
> > Would this ever exist in practice? If not, please remove from the
> > example so we don't get the wrong idea.
> 
> I referred to arch/arm/boot/dts/.
> omap24xx-clocks.dtsi : defines dummy_ck
> omap2420-clocks.dtsi : refers dummy_ck
> 
> 
> In practice, There is no problem in specifying another existing clock,
> eg MT7620_CLK_PERIPH which is always active.

Ok. Please don't add things that don't exist into the example like dummy
clks. Sometimes people copy the examples directly and this can lead to
errors in the resulting DTBs.

> 
> 
> >> +
> >> +clkctrl: clkctrl {
> >> +       compatible = "ralink,rt2880-clock";
> >> +       #clock-cells = <1>;
> >> +       ralink,sysctl = <&sysc>;
> >> +
> >> +       clock-indices =
> >> +                       <12>,
> >> +                       <16>, <17>, <18>, <19>,
> >> +                       <20>,
> >> +                       <26>;
> >> +       clock-output-names =
> >> +                       "uart0",
> >> +                       "i2c", "i2s", "spi", "uart1",
> >> +                       "uart2",
> >> +                       "pcie0";
> >> +       clocks =
> >> +                       <&pll MT7620_CLK_PERIPH>,
> >> +                       <&pll MT7620_CLK_PERIPH>, <&pll MT7620_CLK_PCMI2S>, <&pll MT7620_CLK_SYS>, <&pll MT7620_CLK_PERIPH>,
> >> +                       <&pll MT7620_CLK_PERIPH>,
> >> +                       <&dummy_ck>;
> >> +       };
> >> +};
> >> +
> >> +/* consumer which refers "uart0" clock */
> >> +uart0: uartlite@c00 {
> >> +       compatible = "ns16550a";
> >> +       reg = <0xc00 0x100>;
> >> +
> >> +       clocks = <&clkctrl 12>;
> > 
> > So 12 matches in indices and then that is really "uart0" clk?
> > 
> >> +       clock-names = "uart0";
> >> +
> 
> That is right.
> rt2880-clock driver is implemented to let clock cell indices match 
> indcies in "clock-indices" property.

Usually the binding has a bunch of #defines for the clks, instead of
using raw integers to indicate which clock it is. Then consumers point
to that clk via <&phandle DEFINE>, similar to your 'clocks' property
above in the clkctrl node. Then a clk provider driver will remap that
DEFINE to a clk_hw structure and the driver contains the register
offsets and bits to twiddle to control the clk.

It looks like here we put those register offsets and bits to twiddle in
DT as clock-indices, and then consumers are supposed to know what
clock-indices to match based on the register bits of the clk? That's a
novel approach that may work here but doesn't really scale. I guess it's
OK, but I'd prefer to see #defines even for the clock-indices like
RT2800_UART0 or RT2800_I2C.

After that, it seems risky to put the details of what bits to twiddle in
DT because it expresses driver level hardware details in a place where
we might not be able to as easily modify or fix those bits if certain
clks don't get tested. If we had only specified the provider/consumer
part of the binding (i.e. the numbers in the clk specifier) we wouldn't
need to worry as much because we could fix those driver details in the
driver.


  reply	other threads:[~2019-05-02 21:42 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-05  0:01 [RFC v2 0/5] MIPS: ralink: peripheral clock gating driver NOGUCHI Hiroshi
2019-04-05  0:01 ` [RFC v2 1/5] clk: mips: ralink: add Ralink MIPS gating clock driver NOGUCHI Hiroshi
2019-04-25 19:27   ` Stephen Boyd
2019-05-01 10:58     ` NOGUCHI Hiroshi
2019-04-05  0:01 ` [RFC v2 2/5] dt-bindings: clk: add document for ralink " NOGUCHI Hiroshi
2019-04-25 19:29   ` Stephen Boyd
2019-05-01 11:33     ` NOGUCHI Hiroshi
2019-05-02 21:42       ` Stephen Boyd [this message]
2019-04-05  0:01 ` [RFC v2 3/5] mips: ralink: mt7620/76x8 use common clk framework NOGUCHI Hiroshi
2019-04-25 19:18   ` Stephen Boyd
2019-04-05  0:01 ` [RFC v2 4/5] mips: ralink: mt76x8: add nodes for clocks NOGUCHI Hiroshi
2019-04-05  0:01 ` [RFC v2 5/5] mips: ralink: mt7620: " NOGUCHI Hiroshi

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=155683336194.200842.626018072256859764@swboyd.mtv.corp.google.com \
    --to=sboyd@kernel.org \
    --cc=drvlabo@gmail.com \
    --cc=john@phrozen.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mturquette@baylibre.com \
    --cc=robh+dt@kernel.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).