From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Kumar Gala <galak@codeaurora.org>
Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>,
linux-sh@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
devicetree@vger.kernel.org,
Mike Turquette <mturquette@linaro.org>
Subject: Re: [PATCH 2/3] clk: shmobile: Add MSTP clock support
Date: Thu, 31 Oct 2013 16:15:31 +0100 [thread overview]
Message-ID: <1412461.M3SMDGpi7Z@avalon> (raw)
In-Reply-To: <5E542DCC-EA79-4A9E-BC60-B8E1B964F16D@codeaurora.org>
Hi Kumar,
On Tuesday 29 October 2013 19:19:35 Kumar Gala wrote:
> On Oct 29, 2013, at 7:06 PM, Laurent Pinchart wrote:
> > On Tuesday 29 October 2013 18:36:06 Kumar Gala wrote:
> >> On Oct 29, 2013, at 9:55 AM, Laurent Pinchart wrote:
> >>> MSTP clocks are gate clocks controlled through a register that handles
> >>> up to 32 clocks. The register is often sparsely populated.
> >>>
> >>> Those clocks are found on Renesas ARM SoCs.
> >>>
> >>> Signed-off-by: Laurent Pinchart
> >>> <laurent.pinchart+renesas@ideasonboard.com>
> >>> ---
> >>> .../bindings/clock/renesas,cpg-mstp-clocks.txt | 47 +++++
> >>> drivers/clk/shmobile/Makefile | 1 +
> >>> drivers/clk/shmobile/clk-mstp.c | 229 +++++++++++++++
> >>> include/dt-bindings/clock/r8a7790-clock.h | 56 +++++
> >>> 4 files changed, 333 insertions(+)
> >>> create mode 100644
> >>> Documentation/devicetree/bindings/clock/renesas,cpg-mstp-clocks.txt
> >>> create mode 100644 drivers/clk/shmobile/clk-mstp.c
> >>> create mode 100644 include/dt-bindings/clock/r8a7790-clock.h
> >>>
> >>> diff --git
> >>> a/Documentation/devicetree/bindings/clock/renesas,cpg-mstp-clocks.txt
> >>> b/Documentation/devicetree/bindings/clock/renesas,cpg-mstp-clocks.txt
> >>> new
> >>> file mode 100644
> >>> index 0000000..b3a1ce0
> >>> --- /dev/null
> >>> +++
> >>> b/Documentation/devicetree/bindings/clock/renesas,cpg-mstp-clocks.txt
> >>> @@ -0,0 +1,47 @@
> >>> +* Renesas R8A7790 MSTP Clocks
> >>
> >> can we spell out MSTP once in the heading?
> >
> > Sure thing. It stands for Module Stop.
> >
> >>> +
> >>> +The CPG can gate SoC device clocks. The gates are organized in groups
> >>> of> up to
> >>> +32 gates.
> >>> +
> >>> +This device tree binding describes a single 32 gate clocks group per
> >>> node.
> >>> +Clocks are referenced by user nodes by the MSTP node phandle and the
> >>> clock
> >>> +index in the group, from 0 to 31.
> >>> +
> >>> +Required Properties:
> >>> +
> >>> + - compatible: Must be one of the following
> >>> + - "renesas,r8a7790-mstp-clocks" for R8A7790 (R-Car H2) MSTP gate
> >>> clocks
> >>> + - "renesas,cpg-mstp-clock" for generic MSTP gate clocks
> >>> + - reg: Base address and length of the memory resource used by the
> >>> MSTP
> >>> + clocks
> >>> + - clocks: Reference to the parent clocks
> >>> + - #clock-cells: Must be 1
> >>> + - clock-output-names: The name of the clocks as free-form strings
> >>> + - renesas,indices: Index of the gate clocks (0 to 31)
> >>
> >> Index of the gate clock into what?
> >
> > Into the 32 gates clock group. Groups have 32 entries with a 32-bit
> > register that controls 32 gate clocks. The groups (and thus registers)
> > are sparsly populated, this property lists the indices for the register
> > bits corresponding to the clocks.
> >
> > Would
> >
> > - renesas,indices: Indices of the gate clocks into the group (0 to 31)
> >
> > be explicit enough ?
>
> I'm still confused. As I look at the code, I'm not quite clear how
> renesas,indices relates to a register or register bits.
OK, this probably means that the documentation isn't clear enough. Let me try
to explain the situation, I'll then rephrase the bindings documentation.
Renesas SoCs have a large number of gate clocks, referred to as the MSTP
clocks. Those gate clocks are controlled by a single bit each. From a control
point of view, those bits are located in 32-bit registers referred to as the
MSTP registers. Each MSTP register can thus control up to 32 gate clocks. As
they are sparsely populated they usually control less than 32 gate clocks and
have reserved bits for the clocks that are not present in the hardware. The
reserved bits are randomly placed in the registers.
On the DT side, each MSTP register gets a DT node. The clocks handled by that
register are listed in DT. The driver needs to map each clock to its bit index
in the MSTP register. There are two main ways to do so:
- Specifying all 32 bits in the DT node, with 32 parent clocks and 32 clock
output names. Reserved bits would get a dummy parent and an empty clock output
name. The bit index would in that case be the clock index in the clock output
names list with a one-to-one mapping between the clock cell and the clock
index in the clock output names list.
- Specifying the available clocks only. No dummy parent clock and empty clock
output name would be used. In that case there would be no one-to-one mapping
between the clock cell and the corresponding clock index in the clock output
names list. The mapping is then specified through the renesas,clock-indices
property. Each entry in the property stores the bit number of the
corresponding clock in the MSTP register.
Let's take MSTP3 of the R8A7790 as an example. The register controls the
following clocks:
0 IIC2
1-3 Reserved
4 TPU0
5 MMC1
6-9 Reserved
10 IrDA
11 SDHI3
12 SDHI2
13 SDHI1
14 SDHI0
15 MMC0
16-17 Reserved
18 IIC0
19 PCIEC
20-22 Reserved
23 IIC1
24-27 Reserved
28 SSUSB
29 CMT1
30 USBDMAC0
31 USBDMAC1
The corresponding DT node would thus have the following properties
clock-output-names =
"iic2", "tpu0", "mmcif1", "irda", "sdhi3", "sdhi2", "sdhi1",
"sdhi0", "mmcif0", "iic0", "pciec", "iic1", "ssusb", "cmt1",
"usbdmac0", "usbcma1";
renesas,clock-indices = <
0 4 5 10 11 12 13 14 15 18 19 23 28 29 30 31
>
The clock cell in clock users corresponds to the hardware bit index, not the
index of the clock in the clock output names list. To make referencing clocks
less error-prone, macros are defined for all bit indices in <dt-
bindings/clock/r8a7790-clock.h>. Using this macros in the provider, we get
renesas,clock-indices = <
R8A7790_CLK_IIC0 R8A7790_CLK_TPU0 R8A7790_CLK_MMCIF1
R8A7790_CLK_IRDA R8A7790_CLK_SDHI3 R8A7790_CLK_SDHI2
R8A7790_CLK_SDHI1 R8A7790_CLK_SDHI0 R8A7790_CLK_MMCIF0
R8A7790_CLK_IIC0 R8A7790_CLK_PCIEC R8A7790_CLK_IIC1
R8A7790_CLK_SSUSB R8A7790_CLK_CMT1 R8A7790_CLK_USBDMAC0
R8A7790_CLK_USBDMAC1
>;
Is the explanation clear enough ?
> >>> +
> >>> +The clocks, clock-output-names and renesas,indices properties contain
> >>> one
> >>> +entry per gate. The MSTP groups are sparsely populated. Unimplemented
> >>> gates
> >>
> >> per gate clock. (?)
> >
> > I'll change that.
> >
> >>> +must not be declared.
> >>> +
> >>> +
> >>> +Example
> >>> +-------
> >>> +
> >>> + #include <dt-bindings/clock/r8a7790-clock.h>
> >>> +
> >>> + mstp3_clks: mstp3_clks {
> >
> > mstp3_clks@e615013c I suppose.
>
> yes, missed that
> `
>
> >>> + compatible = "renesas,r8a7790-mstp-clocks", "renesas,cpg-mstp-
> >
> > clocks";
> >
> >>> + reg = <0 0xe615013c 0 4>, <0 0xe6150048 0 4>;
> >>> + clocks = <&cp_clk>, <&mmc1_clk>, <&sd3_clk>, <&sd2_clk>,
> >>> + <&cpg_clocks R8A7790_CLK_SD1>, <&cpg_clocks
> >
> > R8A7790_CLK_SD0>,
> >
> >>> + <&mmc0_clk>;
> >>> + #clock-cells = <1>;
> >>> + clock-output-names =
> >>> + "tpu0", "mmcif1", "sdhi3", "sdhi2",
> >>> + "sdhi1", "sdhi0", "mmcif0";
> >>> + renesas,clock-indices = <
> >>> + R8A7790_CLK_TPU0 R8A7790_CLK_MMCIF1 R8A7790_CLK_SDHI3
> >>> + R8A7790_CLK_SDHI2 R8A7790_CLK_SDHI1 R8A7790_CLK_SDHI0
> >>> + R8A7790_CLK_MMCIF0
> >>> + >;
> >>> + };
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2013-10-31 15:15 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-29 14:55 [PATCH 0/3] Renesas R8A7790 Common Clock Framework support Laurent Pinchart
2013-10-29 14:55 ` [PATCH 1/3] clk: shmobile: Add DIV6 clock support Laurent Pinchart
2013-10-29 23:33 ` Kumar Gala
2013-10-29 23:54 ` Laurent Pinchart
2013-10-29 23:56 ` Kumar Gala
2013-10-29 14:55 ` [PATCH 2/3] clk: shmobile: Add MSTP " Laurent Pinchart
2013-10-29 23:36 ` Kumar Gala
2013-10-30 0:06 ` Laurent Pinchart
2013-10-30 0:19 ` Kumar Gala
2013-10-31 15:15 ` Laurent Pinchart [this message]
2013-11-06 2:09 ` Simon Horman
2013-11-06 12:22 ` Laurent Pinchart
2013-11-06 8:33 ` Magnus Damm
2013-11-06 12:13 ` Laurent Pinchart
2013-10-29 14:55 ` [PATCH 3/3] clk: shmobile: Add R8A7790 clocks support Laurent Pinchart
2013-10-29 23:56 ` Kumar Gala
2013-11-05 7:56 ` Magnus Damm
2013-11-05 23:47 ` Laurent Pinchart
2013-11-06 8:19 ` Magnus Damm
2013-11-06 12:45 ` Laurent Pinchart
2013-11-05 8:52 ` Kuninori Morimoto
2013-11-05 23:57 ` Laurent Pinchart
2013-11-06 0:54 ` Kuninori Morimoto
2013-11-06 1:00 ` Laurent Pinchart
2013-11-06 2:31 ` Kuninori Morimoto
[not found] ` <8738na1csg.wl%kuninori.morimoto.gx-zM6kxYcvzFBBDgjK7y7TUQ@public.gmane.org>
2013-11-06 12:41 ` Laurent Pinchart
2013-11-07 3:22 ` Kuninori Morimoto
2013-11-07 7:20 ` Kuninori Morimoto
2013-11-07 12:15 ` Laurent Pinchart
2013-11-08 0:06 ` Kuninori Morimoto
2013-11-08 1:00 ` Laurent Pinchart
2013-11-08 6:02 ` Kuninori Morimoto
2013-11-06 7:18 ` Simon Horman
2013-11-06 12:56 ` Laurent Pinchart
2013-11-08 6:34 ` Simon Horman
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=1412461.M3SMDGpi7Z@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=devicetree@vger.kernel.org \
--cc=galak@codeaurora.org \
--cc=laurent.pinchart+renesas@ideasonboard.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-sh@vger.kernel.org \
--cc=mturquette@linaro.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).