From: mturquette@linaro.org (Mike Turquette)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v1 09/14] clk: msm: Add support for MSM8960's global clock controller (GCC)
Date: Tue, 13 Aug 2013 07:24:11 -0700 [thread overview]
Message-ID: <20130813142411.4443.85003@quantum> (raw)
In-Reply-To: <20130813050334.GE14845@codeaurora.org>
Quoting Stephen Boyd (2013-08-12 22:03:34)
> On 08/08, Mark Rutland wrote:
> > Hi Stephen,
> >
> > On Thu, Jul 25, 2013 at 01:43:37AM +0100, Stephen Boyd wrote:
> > > Fill in the data and wire up the global clock controller to the
> > > MSM clock driver. This should allow most non-multimedia device
> > > drivers to control their clocks on 8960 based platforms.
> > >
> > > Cc: devicetree at vger.kernel.org
> > > Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
> > > ---
> > > .../devicetree/bindings/clock/qcom,gcc.txt | 55 +++++++
> > > drivers/clk/msm/Kconfig | 10 ++
> > > drivers/clk/msm/Makefile | 2 +
> > > drivers/clk/msm/core.c | 3 +
> > > drivers/clk/msm/gcc-8960.c | 174 +++++++++++++++++++++
> > > drivers/clk/msm/internal.h | 2 +
> > > 6 files changed, 246 insertions(+)
> > > create mode 100644 Documentation/devicetree/bindings/clock/qcom,gcc.txt
> > > create mode 100644 drivers/clk/msm/gcc-8960.c
> > >
> > > diff --git a/Documentation/devicetree/bindings/clock/qcom,gcc.txt b/Documentation/devicetree/bindings/clock/qcom,gcc.txt
> > > new file mode 100644
> > > index 0000000..2311e1a
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/clock/qcom,gcc.txt
> > > @@ -0,0 +1,55 @@
> > > +MSM Global Clock Controller Binding
> > > +-----------------------------------
> > > +
> > > +Required properties :
> > > +- compatible : shall contain at least "qcom,gcc" and only one of the
> > > + following:
> > > +
> > > + "qcom,gcc-8660"
> > > + "qcom,gcc-8960"
> > > +
> > > +- reg : shall contain base register location and length
> > > +- clocks : shall contain clocks supplied by the clock controller
> > > +
> > > +Example:
> > > + clock-controller at 900000 {
> > > + compatible = "qcom,gcc-8960", "qcom,gcc";
> > > + reg = <0x900000 0x4000>;
> > > +
> > > + clocks {
> > > + pxo: pxo {
> > > + #clock-cells = <0>;
> > > + compatible = "fixed-clock";
> > > + clock-frequency = <27000000>;
> > > + };
> > > +
> > > + pll8: pll8 {
> > > + #clock-cells = <0>;
> > > + compatible = "qcom,pll";
> > > + clocks = <&pxo>;
> > > + };
> > > +
> > > + vpll8: vpll8 {
> > > + #clock-cells = <0>;
> > > + compatible = "qcom,pll-vote";
> > > + clocks = <&pll8>;
> > > + };
> > > +
> > > + gsbi5_uart_rcg: gsbi5_uart_rcg {
> > > + #clock-cells = <0>;
> > > + compatible = "qcom,p2-mn16-clock";
> > > + clocks = <&pxo>, <&vpll8>;
> > > + };
> > > +
> > > + gsbi5_uart_clk: gsbi5_uart_cxc {
> > > + #clock-cells = <0>;
> > > + compatible = "qcom,cxc-clock";
> > > + clocks = <&gsbi5_uart_rcg>;
> > > + };
> > > +
> > > + gsbi5_uart_ahb: gsbi5_uart_ahb {
> > > + #clock-cells = <0>;
> > > + compatible = "qcom,cxc-hg-clock";
> > > + };
> > > + };
> > > + };
> >
> > I'm slightly confused by this. How is each of the clocks described in
> > the clocks node related to a portion of the register set?
>
> The registers to control clocks and determine their state are
> scattered throughout the registers in the gcc (in this example
> from 0x900000 to 0x903fff). If you match up gsbi5_uart_rcg with
> its C struct counterpart you'll notice that there are multiple
> registers used to configure the clock. It isn't as simple as one
> reg property per clock even for the case where we're just
> toggling a bit to turn a clock on and off either. And it isn't as
> simple as saying the clock has a base register that we can offset
> from because offsets are almost always different (we've tried
> to correct this in future chip versions).
>
> >
> > If the set of clocks is fixed, surely the gcc node gives you enough
> > information alone, and the whole block can be modelled as a single
> > provider of multiple clock outputs, or it's not fixed, and some linkage
> > needs to be defined?
> >
> > The code seems to imply the former, unless only a subset of clocks may
> > be present? In that case, the set of clocks which might be present
> > should be described in the binding.
>
> The clock controller is hardware and the number of clock outputs
> is fixed. Isn't all hardware fixed until you start talking about
> FPGAs? The next minor revision of the clock controller may add
> more clocks or remove clocks from that base design, but otherwise
> the two are 90% the same and generally software compatible. It
> isn't until we start a new generation of chips that we make major
> changes to the design. Is that loose enough to qualify?
>
> These bindings attempt to follow the regulator bindings. With
> regulators there is a node for each regulator and we describe
> physical characteristics of those regulators within the nodes but
> we don't describe the software interface (bits, masks, shifts,
> etc). I imagine we could extend these clock nodes to describe
> physical characteristics such as min/max frequency or if the
> bootloader has left the clocks on. Right now we're using the
> nodes to describe what types of clocks there are and how the
> clock tree is layed out.
>
> Or perhaps you're talking about clock sharing? We share the clock
> controller with multiple masters (processors running other OSes)
> and the partitioning of the clocks is mostly predefined. We just
> won't use some clocks because they're reserved for other
> processors. They're still part of the same clock controller
> hardware block but we don't want to control them on Linux because
> we'll trample over other processors and most likely hang the
> system. I wonder how this would work for hexagon and krait both
> running linux on the same SoC. If all DT says is that there is a
> gcc here at this address how are we supposed to know that we
> shouldn't use some clock?
Do Krait and Hexagon have the same register map? On the ARM SoCs I am
familiar with the masters have differing views of register addresses for
the same peripherals and hardware blocks. So you couldn't use the same
DTS in a straightforward way if this is true for your system.
Regards,
Mike
> In fact we have some clocks that are
> "voteable" in the sense that each master has its own register to
> vote for a clock to be on or off. The registers are all ORed
> together by hardware to determine if the clock should be on or
> not. I should probably rename those clocks to have a _krait or
> _apps at the end so that it's clear we want to instantiate the
> krait version of the clock and not the hexagon version. I suppose
> the other solution there is to say we have gcc-8960-krait and
> gcc-8960-hexagon so we know which voting registers to use or put
> an ifdef ARCH_HEXAGON/ARCH_ARM. Is that the right solution?
>
> --
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
> hosted by The Linux Foundation
next prev parent reply other threads:[~2013-08-13 14:24 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-25 0:43 [PATCH v1 00/14] Add support for MSM's mmio clocks Stephen Boyd
2013-07-25 0:43 ` [PATCH v1 01/14] clk: fixed-rate: Export clk_fixed_rate_register() Stephen Boyd
2013-08-03 3:32 ` Mike Turquette
2013-07-25 0:43 ` [PATCH v1 02/14] clk: Add of_init_clk_data() to parse common clock bindings Stephen Boyd
2013-07-25 8:21 ` Tomasz Figa
2013-07-25 16:36 ` Stephen Boyd
2013-08-03 1:06 ` Mike Turquette
2013-07-25 0:43 ` [PATCH v1 03/14] clk: Add of_clk_match() for device drivers Stephen Boyd
2013-07-25 8:12 ` Tomasz Figa
2013-07-25 16:36 ` Stephen Boyd
2013-08-12 20:23 ` Mike Turquette
2013-08-13 5:48 ` Stephen Boyd
2013-08-15 5:02 ` Mike Turquette
2013-08-16 1:31 ` Stephen Boyd
2013-08-16 3:44 ` Mike Turquette
2013-08-16 16:43 ` Kumar Gala
2013-08-16 17:16 ` Kumar Gala
2013-07-25 0:43 ` [PATCH v1 04/14] clk: Add set_rate_and_parent() op Stephen Boyd
2013-07-25 8:26 ` Tomasz Figa
2013-07-25 16:45 ` Stephen Boyd
2013-08-09 5:32 ` Mike Turquette
2013-08-09 9:11 ` James Hogan
2013-07-25 0:43 ` [PATCH v1 05/14] clk: msm: Add support for phase locked loops (PLLs) Stephen Boyd
2013-07-25 8:29 ` Tomasz Figa
2013-07-25 16:37 ` Stephen Boyd
2013-07-25 0:43 ` [PATCH v1 06/14] clk: msm: Add support for root clock generators (RCGs) Stephen Boyd
2013-07-25 0:43 ` [PATCH v1 07/14] clk: msm: Add support for branches/gate clocks Stephen Boyd
2013-07-25 0:43 ` [PATCH v1 08/14] clk: msm: Add MSM clock driver Stephen Boyd
2013-07-25 8:32 ` Tomasz Figa
2013-07-25 16:40 ` Stephen Boyd
2013-07-25 0:43 ` [PATCH v1 09/14] clk: msm: Add support for MSM8960's global clock controller (GCC) Stephen Boyd
2013-08-08 17:00 ` Mark Rutland
2013-08-13 5:03 ` Stephen Boyd
2013-08-13 14:24 ` Mike Turquette [this message]
2013-08-13 18:42 ` Stephen Boyd
2013-07-25 0:43 ` [PATCH v1 10/14] clk: msm: Add support for MSM8960's multimedia clock controller (MMCC) Stephen Boyd
2013-08-08 17:02 ` Mark Rutland
2013-07-25 0:43 ` [PATCH v1 11/14] ARM: dts: msm: Add MSM8960 GCC DT nodes Stephen Boyd
2013-07-25 0:43 ` [PATCH v1 12/14] ARM: dts: msm: Add MSM8960 MMCC " Stephen Boyd
2013-07-25 0:43 ` [PATCH v1 13/14] clk: msm: Add MSM8974 GCC data Stephen Boyd
2013-07-25 0:43 ` [PATCH v1 14/14] ARM: dts: msm: Add clock entries for MSM8960 uart device Stephen Boyd
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=20130813142411.4443.85003@quantum \
--to=mturquette@linaro.org \
--cc=linux-arm-kernel@lists.infradead.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).