diff mbox

[1/3] clk: bcm281xx: define kona clock binding

Message ID 529EA80A.60801@linaro.org (mailing list archive)
State New, archived
Headers show

Commit Message

Alex Elder Dec. 4, 2013, 3:56 a.m. UTC
Document the device tree binding for Broadcom Kona architecture
clock control units and clocks.  Kona device nodes are represented
with compatible strings having "bcm11351" in their name.

Kona clocks are managed by "clock control units" (CCUs).  Each CCU
has a device tree node, and within that node are defined the names
of the clocks provided by the CCU.

The BCM281xx family of SoCs use Kona CCUs and clocks.

Signed-off-by: Alex Elder <elder@linaro.org>
Reviewed-by: Matt Porter <matt.porter@linaro.org>
Reviewed-by: Tim Kryger <tim.kryger@linaro.org>
---
 .../devicetree/bindings/clock/bcm-kona-clock.txt   |   95
++++++++++++++++++++
 1 file changed, 95 insertions(+)
 create mode 100644
Documentation/devicetree/bindings/clock/bcm-kona-clock.txt

-- 1.7.9.5

Comments

Mark Rutland Dec. 4, 2013, 9:39 a.m. UTC | #1
On Wed, Dec 04, 2013 at 03:56:58AM +0000, Alex Elder wrote:
> Document the device tree binding for Broadcom Kona architecture
> clock control units and clocks.  Kona device nodes are represented
> with compatible strings having "bcm11351" in their name.
> 
> Kona clocks are managed by "clock control units" (CCUs).  Each CCU
> has a device tree node, and within that node are defined the names
> of the clocks provided by the CCU.
> 
> The BCM281xx family of SoCs use Kona CCUs and clocks.
> 
> Signed-off-by: Alex Elder <elder@linaro.org>
> Reviewed-by: Matt Porter <matt.porter@linaro.org>
> Reviewed-by: Tim Kryger <tim.kryger@linaro.org>
> ---
>  .../devicetree/bindings/clock/bcm-kona-clock.txt   |   95
> ++++++++++++++++++++
>  1 file changed, 95 insertions(+)
>  create mode 100644
> Documentation/devicetree/bindings/clock/bcm-kona-clock.txt
> 
> diff --git a/Documentation/devicetree/bindings/clock/bcm-kona-clock.txt
> b/Documentation/devicetree/bindings/clock/bcm-kona-clock.txt
> new file mode 100644
> index 0000000..0cafd6a
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/clock/bcm-kona-clock.txt
> @@ -0,0 +1,95 @@
> +Broadcom Kona Family Clocks
> +
> +This binding is associated with Broadcom SoCs having "Kona" style
> +clock control units (CCUs).  A CCU is a clock provider that manages
> +a set of clock signals.  Each CCU is represented by a node in the
> +device tree.
> +
> +This binding uses the common clock binding:
> +    Documentation/devicetree/bindings/clock/clock-bindings.txt
> +
> +Many source clocks are described using the "fixed-clock" binding:
> +    Documentation/devicetree/bindings/clock/fixed-clock.txt

Is this necessary? While this describes the device it doesn't describe
this binding.

> +
> +Required properties:
> +- compatible
> +	Shall have a value "brcm,bcm11351-<which>-ccu", where
> +	<which> identifies the particular CCU (see below).

It would be nice to have a full list here, as that makes finding the
file easier. Something like:

- compatible: should contain one of:
   * "brcm,bcm11351-root-ccu"
   * "brcm,bcm11351-aon-ccu"
   * "brcm,bcm11351-hub-ccu"
   * "brcm,bcm11351-master-ccu"
  The differences between these are described in greater detail below.

> +- reg
> +	Shall define the base and range of the address space
> +	containing clock control registers
> +- #clock-cells
> +	Shall have the value <1>

How about:

- #clock-cells: Should be <1>. The permitted clock-specifier values are
  defined below.

> +- clock-output-names
> +	Shall be an ordered list of strings defining the names of
> +	the clocks provided by the CCU.
> +
> +Clock consumers refer to a particular clock supplied by a CCU using
> +a phandle and specifier pair, using the phandle for the CCU device
> +tree node and the clock's symbolic specifier.  The clock specifier
> +is a CCU-unique 0-based index value.

This is redundant given the common clock binding and the description of
#clock-cells above.

> +
> +
> +BCM281XX family SoCs use Kona CCUs.  The following table defines
> +the set of CCUs and clock specifiers for BCM281XX clocks.  The
> +compatible string for the CCU uses the name in the "CCU" column
> +below as it's <which> value.
> +
> +    CCU     Clock           Type    Index   Specifier
> +    ---     -----           ----    -----   ---------
> +    root    frac_1m         peri      0     BCM281XX_ROOT_CCU_FRAC_1M
> +
> +    aon     hub_timer       peri      0     BCM281XX_AON_CCU_HUB_TIMER
> +    aon     pmu_bsc         peri      1     BCM281XX_AON_CCU_PMU_BSC
> +    aon     pmu_bsc_var     peri      2     BCM281XX_AON_CCU_PMU_BSC_VAR
> +
> +    hub     tmon_1m         peri      0     BCM281XX_HUB_CCU_TMON_1M
> +
> +    master  sdio1           peri      0     BCM281XX_MASTER_CCU_SDIO1
> +    master  sdio2           peri      1     BCM281XX_MASTER_CCU_SDIO2
> +    master  sdio3           peri      2     BCM281XX_MASTER_CCU_SDIO3
> +    master  sdio4           peri      3     BCM281XX_MASTER_CCU_SDIO4
> +    master  dmac            peri      4     BCM281XX_MASTER_CCU_DMAC
> +    master  usb_ic          peri      5     BCM281XX_MASTER_CCU_USB_IC
> +    master  hsic2_48m       peri      6     BCM281XX_MASTER_CCU_HSIC_48M
> +    master  hsic2_12m       peri      7     BCM281XX_MASTER_CCU_HSIC_12M
> +
> +    slave   uartb           peri      0     BCM281XX_SLAVE_CCU_UARTB
> +    slave   uartb2          peri      1     BCM281XX_SLAVE_CCU_UARTB2
> +    slave   uartb3          peri      2     BCM281XX_SLAVE_CCU_UARTB3
> +    slave   uartb4          peri      3     BCM281XX_SLAVE_CCU_UARTB4
> +    slave   ssp0            peri      4     BCM281XX_SLAVE_CCU_SSP0
> +    slave   ssp2            peri      5     BCM281XX_SLAVE_CCU_SSP2
> +    slave   bsc1            peri      6     BCM281XX_SLAVE_CCU_BSC1
> +    slave   bsc2            peri      7     BCM281XX_SLAVE_CCU_BSC2
> +    slave   bsc3            peri      8     BCM281XX_SLAVE_CCU_BSC3
> +    slave   pwm             peri      9     BCM281XX_SLAVE_CCU_PWM

I guess the Specifier column is referring to some defines in a header
file? It would be good to mention which header file these are in.

The Index is also a specifier, it just happens to not be symbolic.

> +
> +
> +Device tree example:
> +
> +	clocks {
> +		slave_ccu: slave_ccu {
> +			compatible = "brcm,bcm11351-slave-ccu";
> +			reg = <0x3e011000 0x0f00>;
> +			#clock-cells = <1>;
> +			clock-output-names = "uartb",
> +					     "uartb2",
> +					     "uartb3",
> +					     "uartb4";
> +		};
> +		ref_crystal_clk: ref_crystal {
> +			#clock-cells = <0>;
> +			compatible = "fixed-clock";
> +			clock-frequency = <26000000>;
> +		};
> +	};

This is wrong, as the clocks container node us not defined as any type
of bus, and does not have the requisite #address-cells and #size-cells.
Really this should _not_ be probed, as the kernel does not know anything
about the clocks node. It could be some non-MMIO bus that it doesn't
understand, or one which requires other clocks.

I think the current way that we probe clocks is somewhat broken in this
regard.

There's no reason to put the clocks in this container at all; just put
them under the root. If you really want to use a container, please at
least use a simple-bus with the requisite #address-cells, #size-cells,
and ranges properties.

Thanks,
Mark.
Alex Elder Dec. 4, 2013, 12:45 p.m. UTC | #2
On 12/04/2013 03:39 AM, Mark Rutland wrote:
> On Wed, Dec 04, 2013 at 03:56:58AM +0000, Alex Elder wrote:
>> Document the device tree binding for Broadcom Kona architecture
>> clock control units and clocks.  Kona device nodes are represented
>> with compatible strings having "bcm11351" in their name.
>>
>> Kona clocks are managed by "clock control units" (CCUs).  Each CCU
>> has a device tree node, and within that node are defined the names
>> of the clocks provided by the CCU.
>>
>> The BCM281xx family of SoCs use Kona CCUs and clocks.
>>
>> Signed-off-by: Alex Elder <elder@linaro.org>
>> Reviewed-by: Matt Porter <matt.porter@linaro.org>
>> Reviewed-by: Tim Kryger <tim.kryger@linaro.org>
>> ---
>>  .../devicetree/bindings/clock/bcm-kona-clock.txt   |   95
>> ++++++++++++++++++++
>>  1 file changed, 95 insertions(+)
>>  create mode 100644
>> Documentation/devicetree/bindings/clock/bcm-kona-clock.txt
>>
>> diff --git a/Documentation/devicetree/bindings/clock/bcm-kona-clock.txt
>> b/Documentation/devicetree/bindings/clock/bcm-kona-clock.txt
>> new file mode 100644
>> index 0000000..0cafd6a
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/clock/bcm-kona-clock.txt
>> @@ -0,0 +1,95 @@
>> +Broadcom Kona Family Clocks
>> +
>> +This binding is associated with Broadcom SoCs having "Kona" style
>> +clock control units (CCUs).  A CCU is a clock provider that manages
>> +a set of clock signals.  Each CCU is represented by a node in the
>> +device tree.
>> +
>> +This binding uses the common clock binding:
>> +    Documentation/devicetree/bindings/clock/clock-bindings.txt
>> +
>> +Many source clocks are described using the "fixed-clock" binding:
>> +    Documentation/devicetree/bindings/clock/fixed-clock.txt
> 
> Is this necessary? While this describes the device it doesn't describe
> this binding.

It's probably gratuitous.  I will remove it.

>> +Required properties:
>> +- compatible
>> +	Shall have a value "brcm,bcm11351-<which>-ccu", where
>> +	<which> identifies the particular CCU (see below).
> 
> It would be nice to have a full list here, as that makes finding the
> file easier. Something like:
> 
> - compatible: should contain one of:
>    * "brcm,bcm11351-root-ccu"
>    * "brcm,bcm11351-aon-ccu"
>    * "brcm,bcm11351-hub-ccu"
>    * "brcm,bcm11351-master-ccu"
>   The differences between these are described in greater detail below.

I got this suggestion in internal review.  I gambled,
and lost. :)  I'll add the list as you suggest.

>> +- reg
>> +	Shall define the base and range of the address space
>> +	containing clock control registers
>> +- #clock-cells
>> +	Shall have the value <1>
> 
> How about:
> 
> - #clock-cells: Should be <1>. The permitted clock-specifier values are
>   defined below.

OK.

>> +- clock-output-names
>> +	Shall be an ordered list of strings defining the names of
>> +	the clocks provided by the CCU.
>> +
>> +Clock consumers refer to a particular clock supplied by a CCU using
>> +a phandle and specifier pair, using the phandle for the CCU device
>> +tree node and the clock's symbolic specifier.  The clock specifier
>> +is a CCU-unique 0-based index value.
> 
> This is redundant given the common clock binding and the description of
> #clock-cells above.

OK.  I'll delete this paragraph.

>> +
>> +
>> +BCM281XX family SoCs use Kona CCUs.  The following table defines
>> +the set of CCUs and clock specifiers for BCM281XX clocks.  The
>> +compatible string for the CCU uses the name in the "CCU" column
>> +below as it's <which> value.
>> +
>> +    CCU     Clock           Type    Index   Specifier
>> +    ---     -----           ----    -----   ---------
>> +    root    frac_1m         peri      0     BCM281XX_ROOT_CCU_FRAC_1M
>> +
>> +    aon     hub_timer       peri      0     BCM281XX_AON_CCU_HUB_TIMER
>> +    aon     pmu_bsc         peri      1     BCM281XX_AON_CCU_PMU_BSC
>> +    aon     pmu_bsc_var     peri      2     BCM281XX_AON_CCU_PMU_BSC_VAR
>> +
>> +    hub     tmon_1m         peri      0     BCM281XX_HUB_CCU_TMON_1M
>> +
>> +    master  sdio1           peri      0     BCM281XX_MASTER_CCU_SDIO1
>> +    master  sdio2           peri      1     BCM281XX_MASTER_CCU_SDIO2
>> +    master  sdio3           peri      2     BCM281XX_MASTER_CCU_SDIO3
>> +    master  sdio4           peri      3     BCM281XX_MASTER_CCU_SDIO4
>> +    master  dmac            peri      4     BCM281XX_MASTER_CCU_DMAC
>> +    master  usb_ic          peri      5     BCM281XX_MASTER_CCU_USB_IC
>> +    master  hsic2_48m       peri      6     BCM281XX_MASTER_CCU_HSIC_48M
>> +    master  hsic2_12m       peri      7     BCM281XX_MASTER_CCU_HSIC_12M
>> +
>> +    slave   uartb           peri      0     BCM281XX_SLAVE_CCU_UARTB
>> +    slave   uartb2          peri      1     BCM281XX_SLAVE_CCU_UARTB2
>> +    slave   uartb3          peri      2     BCM281XX_SLAVE_CCU_UARTB3
>> +    slave   uartb4          peri      3     BCM281XX_SLAVE_CCU_UARTB4
>> +    slave   ssp0            peri      4     BCM281XX_SLAVE_CCU_SSP0
>> +    slave   ssp2            peri      5     BCM281XX_SLAVE_CCU_SSP2
>> +    slave   bsc1            peri      6     BCM281XX_SLAVE_CCU_BSC1
>> +    slave   bsc2            peri      7     BCM281XX_SLAVE_CCU_BSC2
>> +    slave   bsc3            peri      8     BCM281XX_SLAVE_CCU_BSC3
>> +    slave   pwm             peri      9     BCM281XX_SLAVE_CCU_PWM
> 
> I guess the Specifier column is referring to some defines in a header
> file? It would be good to mention which header file these are in.

Yes.  I will add a reference to it.

> The Index is also a specifier, it just happens to not be symbolic.

Yes it is, but I was having trouble trying to describe
them.  "Symbolic specifier" got to be unwieldy.  The paragraph
that talked about the "0-based index value" (which I said I
would delete) was an attempt to at least give it some sort of
name.  If someone has a suggestion for how best to describe
this I'm totally open.

>> +
>> +
>> +Device tree example:
>> +
>> +	clocks {
>> +		slave_ccu: slave_ccu {
>> +			compatible = "brcm,bcm11351-slave-ccu";
>> +			reg = <0x3e011000 0x0f00>;
>> +			#clock-cells = <1>;
>> +			clock-output-names = "uartb",
>> +					     "uartb2",
>> +					     "uartb3",
>> +					     "uartb4";
>> +		};
>> +		ref_crystal_clk: ref_crystal {
>> +			#clock-cells = <0>;
>> +			compatible = "fixed-clock";
>> +			clock-frequency = <26000000>;
>> +		};
>> +	};
> 
> This is wrong, as the clocks container node us not defined as any type
> of bus, and does not have the requisite #address-cells and #size-cells.

Sorry, I didn't realize it was wrong.  I intentionally used
it simply for groiuping.

> Really this should _not_ be probed, as the kernel does not know anything
> about the clocks node. It could be some non-MMIO bus that it doesn't
> understand, or one which requires other clocks.
> 
> I think the current way that we probe clocks is somewhat broken in this
> regard.
> 
> There's no reason to put the clocks in this container at all; just put
> them under the root. If you really want to use a container, please at
> least use a simple-bus with the requisite #address-cells, #size-cells,
> and ranges properties.

No, I'll just pull them all out of the container.

Thank you very much for the quick review.  (And on
to the next one...)

					-Alex

> 
> Thanks,
> Mark.
>
Alex Elder Dec. 4, 2013, 4:24 p.m. UTC | #3
On 12/04/2013 06:45 AM, Alex Elder wrote:
>>> +Device tree example:
>>> >> +
>>> >> +	clocks {
>>> >> +		slave_ccu: slave_ccu {
>>> >> +			compatible = "brcm,bcm11351-slave-ccu";
>>> >> +			reg = <0x3e011000 0x0f00>;
>>> >> +			#clock-cells = <1>;
>>> >> +			clock-output-names = "uartb",
>>> >> +					     "uartb2",
>>> >> +					     "uartb3",
>>> >> +					     "uartb4";
>>> >> +		};
>>> >> +		ref_crystal_clk: ref_crystal {
>>> >> +			#clock-cells = <0>;
>>> >> +			compatible = "fixed-clock";
>>> >> +			clock-frequency = <26000000>;
>>> >> +		};
>>> >> +	};
>> > 
>> > This is wrong, as the clocks container node us not defined as any type
>> > of bus, and does not have the requisite #address-cells and #size-cells.
> Sorry, I didn't realize it was wrong.  I intentionally used
> it simply for groiuping.

I should have looked at my actual dtsi file before responding.

It turns out that what was shown there was not complete.  The
dtsi file in fact does contain #address-cells and #size-cells
(and a direct-mapping "ranges" property).

I have removed the enclosing "clocks" node and its braces in
the document.  I have not removed the node from the dtsi file.

					-Alex
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/clock/bcm-kona-clock.txt
b/Documentation/devicetree/bindings/clock/bcm-kona-clock.txt
new file mode 100644
index 0000000..0cafd6a
--- /dev/null
+++ b/Documentation/devicetree/bindings/clock/bcm-kona-clock.txt
@@ -0,0 +1,95 @@ 
+Broadcom Kona Family Clocks
+
+This binding is associated with Broadcom SoCs having "Kona" style
+clock control units (CCUs).  A CCU is a clock provider that manages
+a set of clock signals.  Each CCU is represented by a node in the
+device tree.
+
+This binding uses the common clock binding:
+    Documentation/devicetree/bindings/clock/clock-bindings.txt
+
+Many source clocks are described using the "fixed-clock" binding:
+    Documentation/devicetree/bindings/clock/fixed-clock.txt
+
+Required properties:
+- compatible
+	Shall have a value "brcm,bcm11351-<which>-ccu", where
+	<which> identifies the particular CCU (see below).
+- reg
+	Shall define the base and range of the address space
+	containing clock control registers
+- #clock-cells
+	Shall have the value <1>
+- clock-output-names
+	Shall be an ordered list of strings defining the names of
+	the clocks provided by the CCU.
+
+Clock consumers refer to a particular clock supplied by a CCU using
+a phandle and specifier pair, using the phandle for the CCU device
+tree node and the clock's symbolic specifier.  The clock specifier
+is a CCU-unique 0-based index value.
+
+
+BCM281XX family SoCs use Kona CCUs.  The following table defines
+the set of CCUs and clock specifiers for BCM281XX clocks.  The
+compatible string for the CCU uses the name in the "CCU" column
+below as it's <which> value.
+
+    CCU     Clock           Type    Index   Specifier
+    ---     -----           ----    -----   ---------
+    root    frac_1m         peri      0     BCM281XX_ROOT_CCU_FRAC_1M
+
+    aon     hub_timer       peri      0     BCM281XX_AON_CCU_HUB_TIMER
+    aon     pmu_bsc         peri      1     BCM281XX_AON_CCU_PMU_BSC
+    aon     pmu_bsc_var     peri      2     BCM281XX_AON_CCU_PMU_BSC_VAR
+
+    hub     tmon_1m         peri      0     BCM281XX_HUB_CCU_TMON_1M
+
+    master  sdio1           peri      0     BCM281XX_MASTER_CCU_SDIO1
+    master  sdio2           peri      1     BCM281XX_MASTER_CCU_SDIO2
+    master  sdio3           peri      2     BCM281XX_MASTER_CCU_SDIO3
+    master  sdio4           peri      3     BCM281XX_MASTER_CCU_SDIO4
+    master  dmac            peri      4     BCM281XX_MASTER_CCU_DMAC
+    master  usb_ic          peri      5     BCM281XX_MASTER_CCU_USB_IC
+    master  hsic2_48m       peri      6     BCM281XX_MASTER_CCU_HSIC_48M
+    master  hsic2_12m       peri      7     BCM281XX_MASTER_CCU_HSIC_12M
+
+    slave   uartb           peri      0     BCM281XX_SLAVE_CCU_UARTB
+    slave   uartb2          peri      1     BCM281XX_SLAVE_CCU_UARTB2
+    slave   uartb3          peri      2     BCM281XX_SLAVE_CCU_UARTB3
+    slave   uartb4          peri      3     BCM281XX_SLAVE_CCU_UARTB4
+    slave   ssp0            peri      4     BCM281XX_SLAVE_CCU_SSP0
+    slave   ssp2            peri      5     BCM281XX_SLAVE_CCU_SSP2
+    slave   bsc1            peri      6     BCM281XX_SLAVE_CCU_BSC1
+    slave   bsc2            peri      7     BCM281XX_SLAVE_CCU_BSC2
+    slave   bsc3            peri      8     BCM281XX_SLAVE_CCU_BSC3
+    slave   pwm             peri      9     BCM281XX_SLAVE_CCU_PWM
+
+
+Device tree example:
+
+	clocks {
+		slave_ccu: slave_ccu {
+			compatible = "brcm,bcm11351-slave-ccu";
+			reg = <0x3e011000 0x0f00>;
+			#clock-cells = <1>;
+			clock-output-names = "uartb",
+					     "uartb2",
+					     "uartb3",
+					     "uartb4";
+		};
+		ref_crystal_clk: ref_crystal {
+			#clock-cells = <0>;
+			compatible = "fixed-clock";
+			clock-frequency = <26000000>;
+		};
+	};
+	uart@3e002000 {
+		compatible = "brcm,bcm11351-dw-apb-uart", "snps,dw-apb-uart";
+		status = "disabled";
+		reg = <0x3e002000 0x1000>;
+		clocks = <&slave_ccu BCM281XX_SLAVE_CCU_UARTB3>;
+		interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
+		reg-shift = <2>;
+		reg-io-width = <4>;
+	};