* [PATCH V3] ARM: tegra: Define Tegra20 CAR binding
@ 2012-02-15 18:14 Stephen Warren
[not found] ` <1329329667-26725-1-git-send-email-swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 6+ messages in thread
From: Stephen Warren @ 2012-02-15 18:14 UTC (permalink / raw)
To: Olof Johansson, Colin Cross
Cc: Grant Likely, rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
Peter De Schrijver, Simon Glass, Devicetree Discuss,
linux-tegra-u79uwXL29TY76Z2rM5mHXA, Stephen Warren
The Tegra20 CAR (Clock And Reset) Controller controls most aspects of
most clocks within Tegra20. The device tree binding models this as a
single monolithic clock provider, which exports ~130 clocks. This reduces
the number of nodes needed in device tree to represent these clocks.
This binding is only useful for Tegra20; the set of clocks that exists on
Tegra30 is sufficiently different to merit its own binding.
Signed-off-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
v3:
* Re-order clock ID list so that IDs 0..95 match the CLK_OUT_ENB register
layout where possible. For register bits that affect multiple clocks,
assign those clocks IDs outside the range to make this clear.
* Double-checked the documentation, and added a couple more cases where
a single CLK_OUT_ENB bit affects multiple clocks.
* Split the binding example into separate SoC and board file sections.
v2:
* Remove clock-names, clock-output-names properties; Tegra will solely
use integer IDs for clocks in DT.
* Fixed typo in compatible flag
* Resolve FIXME re: multiple clocks with the same "reset ID"; give each
unique clock an ID, and ignore the reset bits, since this is purely a
clock binding. Code (e.g. U-Boot) that wants to use this to determine
CAR reset bit numbers would need a table to convert from the clock IDs
in this binding to the related reset bit number, if any. In general, I
think that's true, and the U-Boot code that handles "peripheral IDs"
should be reworked to handle "clocks", the peripheral clocks being a
subset of all clocks.
* Define clock IDs for all the non-peripheral clocks too; inputs, PLLs,
etc.
* Separate tegra-seaboard.dts usage example into a separate patch.
This patch conceptually relies on Grant Likely's common clock binding patch
series. However, since that seems pretty stable and people agree with it, I
think we can check in this patch without waiting for Grant's.
---
.../bindings/clock/nvidia,tegra20-car.txt | 207 ++++++++++++++++++++
arch/arm/boot/dts/tegra20.dtsi | 6 +
2 files changed, 213 insertions(+), 0 deletions(-)
create mode 100644 Documentation/devicetree/bindings/clock/nvidia,tegra20-car.txt
diff --git a/Documentation/devicetree/bindings/clock/nvidia,tegra20-car.txt b/Documentation/devicetree/bindings/clock/nvidia,tegra20-car.txt
new file mode 100644
index 0000000..5c07fca
--- /dev/null
+++ b/Documentation/devicetree/bindings/clock/nvidia,tegra20-car.txt
@@ -0,0 +1,207 @@
+NVIDIA Tegra20 Clock And Reset Controller
+
+This binding uses the common clock binding:
+Documentation/devicetree/bindings/clock/clock-bindings.txt
+
+The CAR (Clock And Reset) Controller on Tegra is the HW module responsible
+for muxing and gating Tegra's clocks, and setting their rates.
+
+Required properties :
+- compatible : Should be "nvidia,tegra20-car"
+- reg : Should contain CAR registers location and length
+- clocks : Should contain phandle and clock specifiers for two clocks:
+ the 32 KHz "32k_in", and the board-specific oscillator "osc".
+- #clock-cells : Should be 1.
+ In clock consumers, this cell represents the clock ID exposed by the CAR.
+
+ The first 96 clocks are numbered to match the bits in the CAR's CLK_OUT_ENB
+ registers. These IDs often match those in the CAR's RST_DEVICES registers,
+ but not in all cases. Some bits in CLK_OUT_ENB affect multiple clocks. In
+ this case, those clocks are assigned IDs above 95 in order to highlight
+ this issue. Implementations that interpret these clock IDs as bit values
+ within the CLK_OUT_ENB or RST_DEVICES registers should be careful to
+ explicitly handle these special cases.
+
+ The balance of the clocks controlled by the CAR are assigned IDs of 96 and
+ above.
+
+ 0 cpu
+ 1 unassigned
+ 2 unassigned
+ 3 ac97
+ 4 rtc
+ 5 tmr
+ 6 uart1
+ 7 unassigned (register bit affects uart2 and vfir)
+ 8 gpio
+ 9 sdmmc2
+ 10 unassigned (register bit affects spdif_in and spdif_out)
+ 11 i2s1
+ 12 i2c1
+ 13 ndflash
+ 14 sdmmc1
+ 15 sdmmc4
+ 16 twc
+ 17 pwm
+ 18 i2s2
+ 19 epp
+ 20 unassigned (register bit affects vi and vi_sensor)
+ 21 2d
+ 22 usbd
+ 23 isp
+ 24 3d
+ 25 ide
+ 26 disp2
+ 27 disp1
+ 28 host1x
+ 29 vcp
+ 30 unassigned
+ 31 cache2
+
+ 32 mem
+ 33 ahbdma
+ 34 apbdma
+ 35 unassigned
+ 36 kbc
+ 37 stat_mon
+ 38 pmc
+ 39 fuse
+ 40 kfuse
+ 41 sbc1
+ 42 snor
+ 43 spi1
+ 44 sbc2
+ 45 xio
+ 46 sbc3
+ 47 dvc
+ 48 dsi
+ 49 unassigned (register bit affects tvo and cve)
+ 50 mipi
+ 51 hdmi
+ 52 csi
+ 53 tvdac
+ 54 i2c2
+ 55 uart3
+ 56 unassigned
+ 57 emc
+ 58 usb2
+ 59 usb3
+ 60 mpe
+ 61 vde
+ 62 bsea
+ 63 bsev
+
+ 64 speedo
+ 65 uart4
+ 66 uart5
+ 67 i2c3
+ 68 sbc4
+ 69 sdmmc3
+ 70 pcie
+ 71 owr
+ 72 afi
+ 73 csite
+ 74 unassigned
+ 75 avpucq
+ 76 la
+ 77 unassigned
+ 78 unassigned
+ 79 unassigned
+ 80 unassigned
+ 81 unassigned
+ 82 unassigned
+ 83 unassigned
+ 84 irama
+ 85 iramb
+ 86 iramc
+ 87 iramd
+ 88 cram2
+ 89 audio_2x a/k/a audio_2x_sync_clk
+ 90 clk_d
+ 91 unassigned
+ 92 sus
+ 93 cdev1
+ 94 cdev2
+ 95 unassigned
+
+ 96 uart2
+ 97 vfir
+ 98 spdif_in
+ 99 spdif_out
+ 100 vi
+ 101 vi_sensor
+ 102 tvo
+ 103 cve
+ 104 osc
+ 105 clk_32k a/k/a clk_s
+ 106 clk_m
+ 107 sclk
+ 108 cclk
+ 109 hclk
+ 110 pclk
+ 111 blink
+ 112 pll_a
+ 113 pll_a_out0
+ 114 pll_c
+ 115 pll_c_out1
+ 116 pll_d
+ 117 pll_d_out0
+ 118 pll_e
+ 119 pll_m
+ 120 pll_m_out1
+ 121 pll_p
+ 122 pll_p_out1
+ 123 pll_p_out2
+ 124 pll_p_out3
+ 125 pll_p_out4
+ 126 pll_s
+ 127 pll_u
+ 128 pll_x
+ 129 cop a/k/a avp
+ 130 audio a/k/a audio_sync_clk
+
+Example SoC include file:
+
+/ {
+ tegra_car: clock@60006000 {
+ compatible = "nvidia,tegra20-car";
+ reg = <0x60006000 0x1000>;
+ #clock-cells = <1>;
+ };
+
+ usb@c5004000 {
+ clocks = <&tegra_car 58>; /* usb2 */
+ };
+};
+
+Example board file:
+
+/ {
+ clocks {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ osc: clock {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <12000000>;
+ };
+ };
+
+ i2c@7000d000 {
+ pmic@34 {
+ compatible = "ti,tps6586x";
+ reg = <0x34>;
+
+ clk_32k: clock {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <32768>;
+ };
+ };
+ };
+
+ &tegra_car {
+ clocks = <&clk_32k> <&osc>;
+ };
+};
diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi
index ec1f010..550da98 100644
--- a/arch/arm/boot/dts/tegra20.dtsi
+++ b/arch/arm/boot/dts/tegra20.dtsi
@@ -4,6 +4,12 @@
compatible = "nvidia,tegra20";
interrupt-parent = <&intc>;
+ tegra_car: clock@60006000 {
+ compatible = "nvidia,tegra20-car";
+ reg = <0x60006000 1000>;
+ #clock-cells = <1>;
+ };
+
pmc@7000f400 {
compatible = "nvidia,tegra20-pmc";
reg = <0x7000e400 0x400>;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH V3] ARM: tegra: Define Tegra20 CAR binding
[not found] ` <1329329667-26725-1-git-send-email-swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
@ 2012-02-15 18:44 ` Simon Glass
[not found] ` <CAPnjgZ32TD_P4Pa650Y1MpxryxSOMtJHdJB28ZNFxv4hxqGMRA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
0 siblings, 1 reply; 6+ messages in thread
From: Simon Glass @ 2012-02-15 18:44 UTC (permalink / raw)
To: Stephen Warren
Cc: rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
linux-tegra-u79uwXL29TY76Z2rM5mHXA, Colin Cross,
Devicetree Discuss
[-- Attachment #1.1: Type: text/plain, Size: 9029 bytes --]
Hi Stephen,
On Wed, Feb 15, 2012 at 10:14 AM, Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote:
> The Tegra20 CAR (Clock And Reset) Controller controls most aspects of
> most clocks within Tegra20. The device tree binding models this as a
> single monolithic clock provider, which exports ~130 clocks. This reduces
> the number of nodes needed in device tree to represent these clocks.
>
> This binding is only useful for Tegra20; the set of clocks that exists on
> Tegra30 is sufficiently different to merit its own binding.
>
It seems there is a large common element - they are almost backwards
compatible. Should we not at least look at this now?
>
> Signed-off-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> ---
> v3:
> * Re-order clock ID list so that IDs 0..95 match the CLK_OUT_ENB register
> layout where possible. For register bits that affect multiple clocks,
> assign those clocks IDs outside the range to make this clear.
>
Great!
> * Double-checked the documentation, and added a couple more cases where
> a single CLK_OUT_ENB bit affects multiple clocks.
> * Split the binding example into separate SoC and board file sections.
> v2:
> * Remove clock-names, clock-output-names properties; Tegra will solely
> use integer IDs for clocks in DT.
> * Fixed typo in compatible flag
> * Resolve FIXME re: multiple clocks with the same "reset ID"; give each
> unique clock an ID, and ignore the reset bits, since this is purely a
> clock binding. Code (e.g. U-Boot) that wants to use this to determine
> CAR reset bit numbers would need a table to convert from the clock IDs
> in this binding to the related reset bit number, if any. In general, I
> think that's true, and the U-Boot code that handles "peripheral IDs"
> should be reworked to handle "clocks", the peripheral clocks being a
> subset of all clocks.
> * Define clock IDs for all the non-peripheral clocks too; inputs, PLLs,
> etc.
> * Separate tegra-seaboard.dts usage example into a separate patch.
>
> This patch conceptually relies on Grant Likely's common clock binding patch
> series. However, since that seems pretty stable and people agree with it, I
> think we can check in this patch without waiting for Grant's.
> ---
> .../bindings/clock/nvidia,tegra20-car.txt | 207
> ++++++++++++++++++++
> arch/arm/boot/dts/tegra20.dtsi | 6 +
> 2 files changed, 213 insertions(+), 0 deletions(-)
> create mode 100644
> Documentation/devicetree/bindings/clock/nvidia,tegra20-car.txt
>
> diff --git
> a/Documentation/devicetree/bindings/clock/nvidia,tegra20-car.txt
> b/Documentation/devicetree/bindings/clock/nvidia,tegra20-car.txt
> new file mode 100644
> index 0000000..5c07fca
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/clock/nvidia,tegra20-car.txt
> @@ -0,0 +1,207 @@
> +NVIDIA Tegra20 Clock And Reset Controller
> +
> +This binding uses the common clock binding:
> +Documentation/devicetree/bindings/clock/clock-bindings.txt
> +
> +The CAR (Clock And Reset) Controller on Tegra is the HW module responsible
> +for muxing and gating Tegra's clocks, and setting their rates.
> +
> +Required properties :
> +- compatible : Should be "nvidia,tegra20-car"
> +- reg : Should contain CAR registers location and length
> +- clocks : Should contain phandle and clock specifiers for two clocks:
> + the 32 KHz "32k_in", and the board-specific oscillator "osc".
> +- #clock-cells : Should be 1.
> + In clock consumers, this cell represents the clock ID exposed by the
> CAR.
> +
> + The first 96 clocks are numbered to match the bits in the CAR's
> CLK_OUT_ENB
> + registers. These IDs often match those in the CAR's RST_DEVICES
> registers,
> + but not in all cases. Some bits in CLK_OUT_ENB affect multiple clocks.
> In
> + this case, those clocks are assigned IDs above 95 in order to highlight
> + this issue. Implementations that interpret these clock IDs as bit values
> + within the CLK_OUT_ENB or RST_DEVICES registers should be careful to
> + explicitly handle these special cases.
> +
> + The balance of the clocks controlled by the CAR are assigned IDs of 96
> and
> + above.
> +
> + 0 cpu
> + 1 unassigned
> + 2 unassigned
> + 3 ac97
> + 4 rtc
> + 5 tmr
> + 6 uart1
> + 7 unassigned (register bit affects uart2 and vfir)
> + 8 gpio
> + 9 sdmmc2
> + 10 unassigned (register bit affects spdif_in and spdif_out)
> + 11 i2s1
> + 12 i2c1
> + 13 ndflash
> + 14 sdmmc1
> + 15 sdmmc4
> + 16 twc
> + 17 pwm
> + 18 i2s2
> + 19 epp
> + 20 unassigned (register bit affects vi and vi_sensor)
> + 21 2d
> + 22 usbd
> + 23 isp
> + 24 3d
> + 25 ide
> + 26 disp2
> + 27 disp1
> + 28 host1x
> + 29 vcp
> + 30 unassigned
> + 31 cache2
> +
> + 32 mem
> + 33 ahbdma
> + 34 apbdma
> + 35 unassigned
> + 36 kbc
> + 37 stat_mon
> + 38 pmc
> + 39 fuse
> + 40 kfuse
> + 41 sbc1
> + 42 snor
> + 43 spi1
> + 44 sbc2
> + 45 xio
> + 46 sbc3
> + 47 dvc
> + 48 dsi
> + 49 unassigned (register bit affects tvo and cve)
> + 50 mipi
> + 51 hdmi
> + 52 csi
> + 53 tvdac
> + 54 i2c2
> + 55 uart3
> + 56 unassigned
> + 57 emc
> + 58 usb2
> + 59 usb3
> + 60 mpe
> + 61 vde
> + 62 bsea
> + 63 bsev
> +
> + 64 speedo
> + 65 uart4
> + 66 uart5
> + 67 i2c3
> + 68 sbc4
> + 69 sdmmc3
> + 70 pcie
> + 71 owr
> + 72 afi
> + 73 csite
>
Would 'coresight' be better given that you have csi also?
> + 74 unassigned
> + 75 avpucq
> + 76 la
>
What is this one?
> + 77 unassigned
> + 78 unassigned
> + 79 unassigned
> + 80 unassigned
> + 81 unassigned
> + 82 unassigned
> + 83 unassigned
> + 84 irama
> + 85 iramb
> + 86 iramc
> + 87 iramd
> + 88 cram2
> + 89 audio_2x a/k/a audio_2x_sync_clk
> + 90 clk_d
> + 91 unassigned
> + 92 sus
> + 93 cdev1
> + 94 cdev2
> + 95 unassigned
> +
> + 96 uart2
> + 97 vfir
> + 98 spdif_in
> + 99 spdif_out
> + 100 vi
> + 101 vi_sensor
> + 102 tvo
> + 103 cve
>
These clocks follow on directly from the above numbers. What is your plan
for T30? I think this has another 64 clocks. Should we reserve those spaces
now so that the binding are compatible between the two?
> + 104 osc
+ 105 clk_32k a/k/a clk_s
> + 106 clk_m
> + 107 sclk
> + 108 cclk
> + 109 hclk
> + 110 pclk
> + 111 blink
> + 112 pll_a
> + 113 pll_a_out0
> + 114 pll_c
> + 115 pll_c_out1
> + 116 pll_d
> + 117 pll_d_out0
> + 118 pll_e
> + 119 pll_m
> + 120 pll_m_out1
> + 121 pll_p
> + 122 pll_p_out1
> + 123 pll_p_out2
> + 124 pll_p_out3
> + 125 pll_p_out4
> + 126 pll_s
> + 127 pll_u
> + 128 pll_x
> + 129 cop a/k/a avp
> + 130 audio a/k/a audio_sync_clk
> +
> +Example SoC include file:
> +
> +/ {
> + tegra_car: clock@60006000 {
> + compatible = "nvidia,tegra20-car";
> + reg = <0x60006000 0x1000>;
> + #clock-cells = <1>;
> + };
> +
> + usb@c5004000 {
> + clocks = <&tegra_car 58>; /* usb2 */
> + };
> +};
> +
> +Example board file:
> +
> +/ {
> + clocks {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + osc: clock {
> + compatible = "fixed-clock";
> + #clock-cells = <0>;
> + clock-frequency = <12000000>;
> + };
> + };
> +
> + i2c@7000d000 {
> + pmic@34 {
> + compatible = "ti,tps6586x";
> + reg = <0x34>;
> +
> + clk_32k: clock {
> + compatible = "fixed-clock";
> + #clock-cells = <0>;
> + clock-frequency = <32768>;
> + };
> + };
> + };
> +
> + &tegra_car {
> + clocks = <&clk_32k> <&osc>;
> + };
> +};
> diff --git a/arch/arm/boot/dts/tegra20.dtsi
> b/arch/arm/boot/dts/tegra20.dtsi
> index ec1f010..550da98 100644
> --- a/arch/arm/boot/dts/tegra20.dtsi
> +++ b/arch/arm/boot/dts/tegra20.dtsi
> @@ -4,6 +4,12 @@
> compatible = "nvidia,tegra20";
> interrupt-parent = <&intc>;
>
> + tegra_car: clock@60006000 {
> + compatible = "nvidia,tegra20-car";
> + reg = <0x60006000 1000>;
> + #clock-cells = <1>;
> + };
> +
> pmc@7000f400 {
> compatible = "nvidia,tegra20-pmc";
> reg = <0x7000e400 0x400>;
> --
> 1.7.0.4
>
Regards,
Simon
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
[-- Attachment #1.2: Type: text/html, Size: 11732 bytes --]
[-- Attachment #2: Type: text/plain, Size: 192 bytes --]
_______________________________________________
devicetree-discuss mailing list
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
https://lists.ozlabs.org/listinfo/devicetree-discuss
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH V3] ARM: tegra: Define Tegra20 CAR binding
[not found] ` <CAPnjgZ32TD_P4Pa650Y1MpxryxSOMtJHdJB28ZNFxv4hxqGMRA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2012-02-15 19:14 ` Stephen Warren
[not found] ` <74CDBE0F657A3D45AFBB94109FB122FF178FACB8D6-C7FfzLzN0UxDw2glCA4ptUEOCMrvLtNR@public.gmane.org>
0 siblings, 1 reply; 6+ messages in thread
From: Stephen Warren @ 2012-02-15 19:14 UTC (permalink / raw)
To: Simon Glass
Cc: Olof Johansson, Colin Cross, Grant Likely,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org,
Peter De Schrijver, Devicetree Discuss,
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Simon Glass wrote at Wednesday, February 15, 2012 11:45 AM:
> On Wed, Feb 15, 2012 at 10:14 AM, Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote:
> > The Tegra20 CAR (Clock And Reset) Controller controls most aspects of
> > most clocks within Tegra20. The device tree binding models this as a
> > single monolithic clock provider, which exports ~130 clocks. This reduces
> > the number of nodes needed in device tree to represent these clocks.
> >
> > This binding is only useful for Tegra20; the set of clocks that exists on
> > Tegra30 is sufficiently different to merit its own binding.
>
> It seems there is a large common element - they are almost backwards
> compatible. Should we not at least look at this now?
I don't believe there's any need for the clock IDs for the two chips to
align in any way. These are two different chips, with different sets of
clocks, different tegra*.dtsi files, different clock "drivers" that define
the available clocks, etc.
And while as you say, there are a lot of similarities, there are also a
number of differences within these first 96 clocks which make having
things completely aligned impractical. I imagine you'd rather that
Tegra30's binding follow Tegra30's CLK_OUT_ENB register layouts exactly,
rather than attempting to align with Tegra20 even in the face of
differences in HW.
> > + 73 csite
>
> Would 'coresight' be better given that you have csi also?
The clock is named "csite" in the TRM; renaming it would make it harder
to correlate the binding with the TRM.
> > + 76 la
>
> What is this one?
It's in the kernel's tegra2_clocks.c. It's undocumented, but I've
confirmed that it does exist.
> + 96 uart2
> + 97 vfir
> + 98 spdif_in
> + 99 spdif_out
> + 100 vi
> + 101 vi_sensor
> + 102 tvo
> + 103 cve
>
> These clocks follow on directly from the above numbers. What is your
> plan for T30? I think this has another 64 clocks. Should we reserve
> those spaces now so that the binding are compatible between the two?
For Tegra30, I imagine the first 160 clock IDs would be assigned in a
way that matches the CLK)OUT_ENB registers (since there are 160 bits in
them), and any other clocks would be assigned IDs starting with 160.
P.S. Your HTML mail was a little hard to quote.
--
nvpublic
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH V3] ARM: tegra: Define Tegra20 CAR binding
[not found] ` <74CDBE0F657A3D45AFBB94109FB122FF178FACB8D6-C7FfzLzN0UxDw2glCA4ptUEOCMrvLtNR@public.gmane.org>
@ 2012-02-15 20:25 ` Simon Glass
[not found] ` <CAPnjgZ0VGt4+aY4ck9kjRycY+k_UyzRBxAbDD1V_O=MTyOpiCQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
0 siblings, 1 reply; 6+ messages in thread
From: Simon Glass @ 2012-02-15 20:25 UTC (permalink / raw)
To: Stephen Warren
Cc: Olof Johansson, Colin Cross, Grant Likely,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org,
Peter De Schrijver, Devicetree Discuss,
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Hi Stephen,
On Wed, Feb 15, 2012 at 11:14 AM, Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote:
> Simon Glass wrote at Wednesday, February 15, 2012 11:45 AM:
>> On Wed, Feb 15, 2012 at 10:14 AM, Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote:
>> > The Tegra20 CAR (Clock And Reset) Controller controls most aspects of
>> > most clocks within Tegra20. The device tree binding models this as a
>> > single monolithic clock provider, which exports ~130 clocks. This reduces
>> > the number of nodes needed in device tree to represent these clocks.
>> >
>> > This binding is only useful for Tegra20; the set of clocks that exists on
>> > Tegra30 is sufficiently different to merit its own binding.
>>
>> It seems there is a large common element - they are almost backwards
>> compatible. Should we not at least look at this now?
>
> I don't believe there's any need for the clock IDs for the two chips to
> align in any way. These are two different chips, with different sets of
> clocks, different tegra*.dtsi files, different clock "drivers" that define
> the available clocks, etc.
>
> And while as you say, there are a lot of similarities, there are also a
> number of differences within these first 96 clocks which make having
> things completely aligned impractical. I imagine you'd rather that
> Tegra30's binding follow Tegra30's CLK_OUT_ENB register layouts exactly,
> rather than attempting to align with Tegra20 even in the face of
> differences in HW.
OK my question was really more about how you deal with multi-arch in
Linux / U-Boot. Does it make sense to ignore the commonality. Perhaps
instead the range from 96 to 160 should be reserved?
>
>> > + 73 csite
>>
>> Would 'coresight' be better given that you have csi also?
>
> The clock is named "csite" in the TRM; renaming it would make it harder
> to correlate the binding with the TRM.
OK
>
>> > + 76 la
>>
>> What is this one?
>
> It's in the kernel's tegra2_clocks.c. It's undocumented, but I've
> confirmed that it does exist.
OK
>
>> + 96 uart2
>> + 97 vfir
>> + 98 spdif_in
>> + 99 spdif_out
>> + 100 vi
>> + 101 vi_sensor
>> + 102 tvo
>> + 103 cve
>>
>> These clocks follow on directly from the above numbers. What is your
>> plan for T30? I think this has another 64 clocks. Should we reserve
>> those spaces now so that the binding are compatible between the two?
>
> For Tegra30, I imagine the first 160 clock IDs would be assigned in a
> way that matches the CLK)OUT_ENB registers (since there are 160 bits in
> them), and any other clocks would be assigned IDs starting with 160.
>
> P.S. Your HTML mail was a little hard to quote.
Sorry, I turned it on to send something odd, and forgot to turn it off.
Regards,
Simon
>
> --
> nvpublic
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH V3] ARM: tegra: Define Tegra20 CAR binding
[not found] ` <CAPnjgZ0VGt4+aY4ck9kjRycY+k_UyzRBxAbDD1V_O=MTyOpiCQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2012-02-15 21:30 ` Stephen Warren
[not found] ` <74CDBE0F657A3D45AFBB94109FB122FF178FACB957-C7FfzLzN0UxDw2glCA4ptUEOCMrvLtNR@public.gmane.org>
0 siblings, 1 reply; 6+ messages in thread
From: Stephen Warren @ 2012-02-15 21:30 UTC (permalink / raw)
To: Simon Glass
Cc: Olof Johansson, Colin Cross, Grant Likely,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org,
Peter De Schrijver, Devicetree Discuss,
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Simon Glass wrote at Wednesday, February 15, 2012 1:25 PM:
> On Wed, Feb 15, 2012 at 11:14 AM, Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote:
> > Simon Glass wrote at Wednesday, February 15, 2012 11:45 AM:
> >> On Wed, Feb 15, 2012 at 10:14 AM, Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote:
> >> > The Tegra20 CAR (Clock And Reset) Controller controls most aspects of
> >> > most clocks within Tegra20. The device tree binding models this as a
> >> > single monolithic clock provider, which exports ~130 clocks. This reduces
> >> > the number of nodes needed in device tree to represent these clocks.
> >> >
> >> > This binding is only useful for Tegra20; the set of clocks that exists on
> >> > Tegra30 is sufficiently different to merit its own binding.
> >>
> >> It seems there is a large common element - they are almost backwards
> >> compatible. Should we not at least look at this now?
> >
> > I don't believe there's any need for the clock IDs for the two chips to
> > align in any way. These are two different chips, with different sets of
> > clocks, different tegra*.dtsi files, different clock "drivers" that define
> > the available clocks, etc.
> >
> > And while as you say, there are a lot of similarities, there are also a
> > number of differences within these first 96 clocks which make having
> > things completely aligned impractical. I imagine you'd rather that
> > Tegra30's binding follow Tegra30's CLK_OUT_ENB register layouts exactly,
> > rather than attempting to align with Tegra20 even in the face of
> > differences in HW.
>
> OK my question was really more about how you deal with multi-arch in
> Linux / U-Boot. Does it make sense to ignore the commonality. Perhaps
> instead the range from 96 to 160 should be reserved?
I'm having a hard time seeing the problem here; the correct mapping from
device tree clock ID values to clock objects will be selected based on
the SoC version you're running on; there's no need to try and tie the
clock IDs for the two SoCs together, and there's always a way to know
which SoC version's numbering you should be dealing with at runtime.
--
nvpublic
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH V3] ARM: tegra: Define Tegra20 CAR binding
[not found] ` <74CDBE0F657A3D45AFBB94109FB122FF178FACB957-C7FfzLzN0UxDw2glCA4ptUEOCMrvLtNR@public.gmane.org>
@ 2012-02-15 21:42 ` Simon Glass
0 siblings, 0 replies; 6+ messages in thread
From: Simon Glass @ 2012-02-15 21:42 UTC (permalink / raw)
To: Stephen Warren
Cc: Olof Johansson, Colin Cross, Grant Likely,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org,
Peter De Schrijver, Devicetree Discuss,
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Hi Stephen,
On Wed, Feb 15, 2012 at 1:30 PM, Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote:
> Simon Glass wrote at Wednesday, February 15, 2012 1:25 PM:
>> On Wed, Feb 15, 2012 at 11:14 AM, Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote:
>> > Simon Glass wrote at Wednesday, February 15, 2012 11:45 AM:
>> >> On Wed, Feb 15, 2012 at 10:14 AM, Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote:
>> >> > The Tegra20 CAR (Clock And Reset) Controller controls most aspects of
>> >> > most clocks within Tegra20. The device tree binding models this as a
>> >> > single monolithic clock provider, which exports ~130 clocks. This reduces
>> >> > the number of nodes needed in device tree to represent these clocks.
>> >> >
>> >> > This binding is only useful for Tegra20; the set of clocks that exists on
>> >> > Tegra30 is sufficiently different to merit its own binding.
>> >>
>> >> It seems there is a large common element - they are almost backwards
>> >> compatible. Should we not at least look at this now?
>> >
>> > I don't believe there's any need for the clock IDs for the two chips to
>> > align in any way. These are two different chips, with different sets of
>> > clocks, different tegra*.dtsi files, different clock "drivers" that define
>> > the available clocks, etc.
>> >
>> > And while as you say, there are a lot of similarities, there are also a
>> > number of differences within these first 96 clocks which make having
>> > things completely aligned impractical. I imagine you'd rather that
>> > Tegra30's binding follow Tegra30's CLK_OUT_ENB register layouts exactly,
>> > rather than attempting to align with Tegra20 even in the face of
>> > differences in HW.
>>
>> OK my question was really more about how you deal with multi-arch in
>> Linux / U-Boot. Does it make sense to ignore the commonality. Perhaps
>> instead the range from 96 to 160 should be reserved?
>
> I'm having a hard time seeing the problem here; the correct mapping from
> device tree clock ID values to clock objects will be selected based on
> the SoC version you're running on; there's no need to try and tie the
> clock IDs for the two SoCs together, and there's always a way to know
> which SoC version's numbering you should be dealing with at runtime.
At present in U-Boot we have exactly the same clock code for T20 and
T30, and the header file differences are in the reserved bits. I am
pointing this out in case it is of interest. But I think you are aware
of it, so please go ahead with the binding as you have it. So:
Acked-by: Simon Glass <sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
diff -u ./arch/arm/include/asm/arch-tegra2/clock-tables.h
./arch/arm/include/asm/arch-tegra3/clock-tables.h
/* The clocks supported by the hardware */
enum periph_id {
PERIPH_ID_FIRST,
PERIPH_ID_CPU = PERIPH_ID_FIRST,
- PERIPH_ID_RESERVED1,
- PERIPH_ID_RESERVED2,
- PERIPH_ID_AC97,
- PERIPH_ID_RTC,
+ PERIPH_ID_COP,
+ PERIPH_ID_TRIGSYS,
+ PERIPH_ID_RESERVED3,
+ PERIPH_ID_RESERVED4,
PERIPH_ID_TMR,
PERIPH_ID_UART1,
PERIPH_ID_UART2,
@@ -50,7 +53,7 @@
PERIPH_ID_SDMMC4,
/* 16 */
- PERIPH_ID_TWC,
+ PERIPH_ID_RESERVED16,
PERIPH_ID_PWM,
PERIPH_ID_I2S2,
PERIPH_ID_EPP,
@@ -61,12 +64,12 @@
/* 24 */
PERIPH_ID_3D,
- PERIPH_ID_IDE,
+ PERIPH_ID_RESERVED24,
PERIPH_ID_DISP2,
PERIPH_ID_DISP1,
PERIPH_ID_HOST1X,
PERIPH_ID_VCP,
- PERIPH_ID_RESERVED30,
+ PERIPH_ID_I2S0,
PERIPH_ID_CACHE2,
/* Middle word: 63:32 */
@@ -83,9 +86,9 @@
PERIPH_ID_KFUSE,
PERIPH_ID_SBC1,
PERIPH_ID_SNOR,
- PERIPH_ID_SPI1,
+ PERIPH_ID_RESERVED43,
PERIPH_ID_SBC2,
- PERIPH_ID_XIO,
+ PERIPH_ID_RESERVED45,
PERIPH_ID_SBC3,
PERIPH_ID_DVC_I2C,
@@ -122,17 +125,17 @@
/* 72 */
PERIPH_ID_AFI,
PERIPH_ID_CORESIGHT,
- PERIPH_ID_RESERVED74,
+ PERIPH_ID_PCIEXCLK,
PERIPH_ID_AVPUCQ,
PERIPH_ID_RESERVED76,
PERIPH_ID_RESERVED77,
PERIPH_ID_RESERVED78,
- PERIPH_ID_RESERVED79,
+ PERIPH_ID_DTV,
/* 80 */
- PERIPH_ID_RESERVED80,
- PERIPH_ID_RESERVED81,
- PERIPH_ID_RESERVED82,
+ PERIPH_ID_NANDSPEED,
+ PERIPH_ID_I2CSLOW,
+ PERIPH_ID_DSIB,
PERIPH_ID_RESERVED83,
PERIPH_ID_IRAMA,
PERIPH_ID_IRAMB,
@@ -141,7 +144,76 @@
/* 88 */
PERIPH_ID_CRAM2,
...extra T30 things
Regards,
Simon
>
> --
> nvpublic
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2012-02-15 21:42 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-15 18:14 [PATCH V3] ARM: tegra: Define Tegra20 CAR binding Stephen Warren
[not found] ` <1329329667-26725-1-git-send-email-swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-02-15 18:44 ` Simon Glass
[not found] ` <CAPnjgZ32TD_P4Pa650Y1MpxryxSOMtJHdJB28ZNFxv4hxqGMRA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-02-15 19:14 ` Stephen Warren
[not found] ` <74CDBE0F657A3D45AFBB94109FB122FF178FACB8D6-C7FfzLzN0UxDw2glCA4ptUEOCMrvLtNR@public.gmane.org>
2012-02-15 20:25 ` Simon Glass
[not found] ` <CAPnjgZ0VGt4+aY4ck9kjRycY+k_UyzRBxAbDD1V_O=MTyOpiCQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-02-15 21:30 ` Stephen Warren
[not found] ` <74CDBE0F657A3D45AFBB94109FB122FF178FACB957-C7FfzLzN0UxDw2glCA4ptUEOCMrvLtNR@public.gmane.org>
2012-02-15 21:42 ` Simon Glass
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox