Re: [PATCH v8 1/4] dt-bindings: clock: Document external clocks for MSM8998 gcc

From: Jeffrey Hugo
Date: Tue Nov 12 2019 - 11:25:50 EST


On 11/11/2019 5:44 PM, Rob Herring wrote:
On Fri, Nov 08, 2019 at 04:17:16PM -0700, Jeffrey Hugo wrote:
The global clock controller on MSM8998 can consume a number of external
clocks. Document them.

Signed-off-by: Jeffrey Hugo <jhugo@xxxxxxxxxxxxxx>
---
.../devicetree/bindings/clock/qcom,gcc.yaml | 47 +++++++++++++++-------
1 file changed, 33 insertions(+), 14 deletions(-)

diff --git a/Documentation/devicetree/bindings/clock/qcom,gcc.yaml b/Documentation/devicetree/bindings/clock/qcom,gcc.yaml
index e73a56f..2f3512b 100644
--- a/Documentation/devicetree/bindings/clock/qcom,gcc.yaml
+++ b/Documentation/devicetree/bindings/clock/qcom,gcc.yaml
@@ -40,20 +40,38 @@ properties:
- qcom,gcc-sm8150
clocks:
- minItems: 1

1 or 2 clocks are no longer allowed?

Correct.

The primary reason is that Stephen indicated in previous discussions that if the hardware exists, it should be indicated in DT, regardless if the driver uses it. In the 7180 and 8150 case, the hardware exists, so these should not be optional.

The secondary reason is I found that the schema was broken anyways. In the way it was written, if you implemented sleep, you could not skip xo_ao, however there is a dts that did exactly that.

The third reason was that I couldn't find a way to write valid yaml to preserve the original meaning. when you have an "items" as a subnode of "oneOf", you no longer have control over the minItems/maxItems, so all 3 became required anyways. I find it disappointing that the "version" of Yaml used for DT bindings is not documented, so after several hours of trial and error, I just gave up since I found this to work (failed cases just gave me an error with no indication of what was wrong, not even a line number).


- maxItems: 3
- items:
- - description: Board XO source
- - description: Board active XO source
- - description: Sleep clock source
+ oneOf:
+ #qcom,gcc-sm8150
+ #qcom,gcc-sc7180

Typically, this would be an if/then schema, but I'm okay with leaving it
like this. Depends whether you want to check the clocks match the
compatible.

Is there an example somewhere? The only thing I found was example-schema.yaml which seemed to suggest this way.


+ - items:
+ - description: Board XO source
+ - description: Board active XO source
+ - description: Sleep clock source
+ #qcom,gcc-msm8998
+ - items:
+ - description: Board XO source
+ - description: USB 3.0 phy pipe clock
+ - description: UFS phy rx symbol clock for pipe 0
+ - description: UFS phy rx symbol clock for pipe 1
+ - description: UFS phy tx symbol clock
+ - description: PCIE phy pipe clock
clock-names:
- minItems: 1
- maxItems: 3
- items:
- - const: bi_tcxo
- - const: bi_tcxo_ao
- - const: sleep_clk
+ oneOf:
+ #qcom,gcc-sm8150
+ #qcom,gcc-sc7180
+ - items:
+ - const: bi_tcxo
+ - const: bi_tcxo_ao
+ - const: sleep_clk
+ #qcom,gcc-msm8998
+ - items:
+ - const: xo
+ - const: usb3_pipe
+ - const: ufs_rx_symbol0
+ - const: ufs_rx_symbol1
+ - const: ufs_tx_symbol0
+ - const: pcie0_pipe
'#clock-cells':
const: 1
@@ -118,6 +136,7 @@ else:
compatible:
contains:
enum:
+ - qcom,gcc-msm8998
- qcom,gcc-sm8150
- qcom,gcc-sc7180
then:
@@ -179,8 +198,8 @@ examples:
clock-controller@100000 {
compatible = "qcom,gcc-sc7180";
reg = <0x100000 0x1f0000>;
- clocks = <&rpmhcc 0>, <&rpmhcc 1>;
- clock-names = "bi_tcxo", "bi_tcxo_ao";
+ clocks = <&rpmhcc 0>, <&rpmhcc 1>, <0>;
+ clock-names = "bi_tcxo", "bi_tcxo_ao", "sleep_clk";

The patch subject says 8998, but this is changing sc7180.

I'm fixing up the example so that it no longer fails checks. See the above comment.


#clock-cells = <1>;
#reset-cells = <1>;
#power-domain-cells = <1>;
--
Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.



--
Jeffrey Hugo
Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.