2021-12-18 20:50:53

by David Heidelberg

[permalink] [raw]
Subject: [PATCH] dt-binding: soc: qcom: convert QCOM SMP2P binding to yaml

Convert Qualcomm SoC SMP2P binding to the yaml format.

Signed-off-by: David Heidelberg <[email protected]>
---
.../bindings/soc/qcom/qcom,smp2p.txt | 110 --------------
.../bindings/soc/qcom/qcom,smp2p.yaml | 139 ++++++++++++++++++
2 files changed, 139 insertions(+), 110 deletions(-)
delete mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.txt
create mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml

diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.txt b/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.txt
deleted file mode 100644
index 49e1d72d3648..000000000000
--- a/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.txt
+++ /dev/null
@@ -1,110 +0,0 @@
-Qualcomm Shared Memory Point 2 Point binding
-
-The Shared Memory Point to Point (SMP2P) protocol facilitates communication of
-a single 32-bit value between two processors. Each value has a single writer
-(the local side) and a single reader (the remote side). Values are uniquely
-identified in the system by the directed edge (local processor ID to remote
-processor ID) and a string identifier.
-
-- compatible:
- Usage: required
- Value type: <string>
- Definition: must be one of:
- "qcom,smp2p"
-
-- interrupts:
- Usage: required
- Value type: <prop-encoded-array>
- Definition: one entry specifying the smp2p notification interrupt
-
-- mboxes:
- Usage: required
- Value type: <prop-encoded-array>
- Definition: reference to the associated doorbell in APCS, as described
- in mailbox/mailbox.txt
-
-- qcom,ipc:
- Usage: required, unless mboxes is specified
- Value type: <prop-encoded-array>
- Definition: three entries specifying the outgoing ipc bit used for
- signaling the remote end of the smp2p edge:
- - phandle to a syscon node representing the apcs registers
- - u32 representing offset to the register within the syscon
- - u32 representing the ipc bit within the register
-
-- qcom,smem:
- Usage: required
- Value type: <u32 array>
- Definition: two identifiers of the inbound and outbound smem items used
- for this edge
-
-- qcom,local-pid:
- Usage: required
- Value type: <u32>
- Definition: specifies the identifier of the local endpoint of this edge
-
-- qcom,remote-pid:
- Usage: required
- Value type: <u32>
- Definition: specifies the identifier of the remote endpoint of this edge
-
-= SUBNODES
-Each SMP2P pair contain a set of inbound and outbound entries, these are
-described in subnodes of the smp2p device node. The node names are not
-important.
-
-- qcom,entry-name:
- Usage: required
- Value type: <string>
- Definition: specifies the name of this entry, for inbound entries this
- will be used to match against the remotely allocated entry
- and for outbound entries this name is used for allocating
- entries
-
-- interrupt-controller:
- Usage: required for incoming entries
- Value type: <empty>
- Definition: marks the entry as inbound; the node should be specified
- as a two cell interrupt-controller as defined in
- "../interrupt-controller/interrupts.txt"
- If not specified this node will denote the outgoing entry
-
-- #interrupt-cells:
- Usage: required for incoming entries
- Value type: <u32>
- Definition: must be 2 - denoting the bit in the entry and IRQ flags
-
-- #qcom,smem-state-cells:
- Usage: required for outgoing entries
- Value type: <u32>
- Definition: must be 1 - denoting the bit in the entry
-
-= EXAMPLE
-The following example shows the SMP2P setup with the wireless processor,
-defined from the 8974 apps processor's point-of-view. It encompasses one
-inbound and one outbound entry:
-
-wcnss-smp2p {
- compatible = "qcom,smp2p";
- qcom,smem = <431>, <451>;
-
- interrupts = <0 143 1>;
-
- qcom,ipc = <&apcs 8 18>;
-
- qcom,local-pid = <0>;
- qcom,remote-pid = <4>;
-
- wcnss_smp2p_out: master-kernel {
- qcom,entry-name = "master-kernel";
-
- #qcom,smem-state-cells = <1>;
- };
-
- wcnss_smp2p_in: slave-kernel {
- qcom,entry-name = "slave-kernel";
-
- interrupt-controller;
- #interrupt-cells = <2>;
- };
-};
diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml b/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml
new file mode 100644
index 000000000000..40d1c42e917b
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml
@@ -0,0 +1,139 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: "http://devicetree.org/schemas/soc/qcom/qcom,smp2p.yaml#"
+$schema: "http://devicetree.org/meta-schemas/core.yaml#"
+
+title: Qualcomm Shared Memory Point 2 Point
+
+description: |
+ The Shared Memory Point to Point (SMP2P) protocol facilitates communication of
+ a single 32-bit value between two processors. Each value has a single writer
+ (the local side) and a single reader (the remote side). Values are uniquely
+ identified in the system by the directed edge (local processor ID to remote
+ processor ID) and a string identifier.
+
+maintainers:
+ - Bjorn Andersson <[email protected]>
+
+properties:
+ compatible:
+ const: qcom,smp2p
+
+ interrupts:
+ maxItems: 1
+
+ mboxes:
+ description: >
+ reference to the associated doorbell in APCS, as described
+ in mailbox/mailbox.txt
+
+ qcom,ipc:
+ $ref: /schemas/types.yaml#/definitions/uint32-matrix
+ description: >
+ three entries specifying the outgoing ipc bit used for
+ signaling the remote end of the smp2p edge
+ minItems: 1
+ maxItems: 32 # no hard limit
+ items:
+ items:
+ - description: phandle to a syscon node representing the apcs registers
+ - description: offset to the register within the syscon
+ - description: the IPC bit within the register
+
+ qcom,smem:
+ $ref: /schemas/types.yaml#/definitions/uint32-matrix
+ description: indentifiers of the smem items used for this edge
+ items:
+ - items:
+ - description: identifier of inbound smem items
+ - items:
+ - description: identifier of outbound smem items
+
+ qcom,local-pid:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: specifies the identifier of the local endpoint of this edge
+
+ qcom,remote-pid:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: specifies the identifier of the remote endpoint of this edge
+
+patternProperties:
+ "^((master|slave)-kernel|ipa-ap-to-modem|ipa-modem-to-ap|)$":
+ type: object
+ properties:
+ interrupt-controller:
+ description: >
+ marks the entry as inbound, if not specified
+ this node will denote the outgoing entry
+
+ '#interrupt-cells':
+ const: 2
+
+ qcom,entry-name:
+ $ref: /schemas/types.yaml#/definitions/string
+ description: >
+ specifies the name of this entry, for inbound entries this will be
+ used to match against the remotely allocated entry and for outbound
+ entries this name is used for allocating entries
+
+ '#qcom,smem-state-cells':
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: required for outgoing entries
+ const: 1
+
+ required:
+ - qcom,entry-name
+
+ oneOf:
+ - required:
+ - interrupt-controller
+ - '#interrupt-cells'
+ - required:
+ - '#qcom,smem-state-cells'
+
+ additionalProperties: false
+
+required:
+ - compatible
+ - qcom,smem
+ - qcom,local-pid
+ - qcom,remote-pid
+
+anyOf:
+ - required:
+ - mboxes
+ - required:
+ - qcom,ipc
+
+additionalProperties: false
+
+examples:
+ # The following example shows the SMP2P setup with the wireless processor,
+ # defined from the 8974 apps processor's point-of-view. It encompasses one
+ # inbound and one outbound entry:
+ - |
+ wcnss-smp2p {
+ compatible = "qcom,smp2p";
+ qcom,smem = <431>, <451>;
+
+ interrupts = <0 143 1>;
+
+ qcom,ipc = <&apcs 8 18>;
+
+ qcom,local-pid = <0>;
+ qcom,remote-pid = <4>;
+
+ wcnss_smp2p_out: master-kernel {
+ qcom,entry-name = "master-kernel";
+
+ #qcom,smem-state-cells = <1>;
+ };
+
+ wcnss_smp2p_in: slave-kernel {
+ qcom,entry-name = "slave-kernel";
+
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ };
+ };
--
2.34.1



2021-12-19 21:57:29

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH] dt-binding: soc: qcom: convert QCOM SMP2P binding to yaml

On Sat, 18 Dec 2021 21:50:39 +0100, David Heidelberg wrote:
> Convert Qualcomm SoC SMP2P binding to the yaml format.
>
> Signed-off-by: David Heidelberg <[email protected]>
> ---
> .../bindings/soc/qcom/qcom,smp2p.txt | 110 --------------
> .../bindings/soc/qcom/qcom,smp2p.yaml | 139 ++++++++++++++++++
> 2 files changed, 139 insertions(+), 110 deletions(-)
> delete mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.txt
> create mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml
>

My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
on your patch (DT_CHECKER_FLAGS is new in v5.13):

yamllint warnings/errors:

dtschema/dtc warnings/errors:
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/net/qcom,ipa.example.dt.yaml: smp2p-mpss: 'qcom,smem' is a required property
From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/net/qcom,ipa.example.dt.yaml: smp2p-mpss: 'qcom,local-pid' is a required property
From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/net/qcom,ipa.example.dt.yaml: smp2p-mpss: 'qcom,remote-pid' is a required property
From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/net/qcom,ipa.example.dt.yaml: smp2p-mpss: 'anyOf' conditional failed, one must be fixed:
'mboxes' is a required property
'qcom,ipc' is a required property
From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/mailbox/qcom-ipcc.example.dt.yaml: smp2p-modem: 'qcom,smem' is a required property
From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/mailbox/qcom-ipcc.example.dt.yaml: smp2p-modem: 'qcom,local-pid' is a required property
From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/mailbox/qcom-ipcc.example.dt.yaml: smp2p-modem: 'qcom,remote-pid' is a required property
From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/patch/1570617

This check can fail if there are any dependencies. The base for a patch
series is generally the most recent rc1.

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:

pip3 install dtschema --upgrade

Please check and re-submit.


2022-02-01 20:50:47

by Bjorn Andersson

[permalink] [raw]
Subject: Re: [PATCH] dt-binding: soc: qcom: convert QCOM SMP2P binding to yaml

On Sat 18 Dec 14:50 CST 2021, David Heidelberg wrote:

> Convert Qualcomm SoC SMP2P binding to the yaml format.
>
> Signed-off-by: David Heidelberg <[email protected]>
> ---
> .../bindings/soc/qcom/qcom,smp2p.txt | 110 --------------
> .../bindings/soc/qcom/qcom,smp2p.yaml | 139 ++++++++++++++++++
> 2 files changed, 139 insertions(+), 110 deletions(-)
> delete mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.txt
> create mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml
>
> diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.txt b/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.txt
> deleted file mode 100644
> index 49e1d72d3648..000000000000
> --- a/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.txt
> +++ /dev/null
> @@ -1,110 +0,0 @@
> -Qualcomm Shared Memory Point 2 Point binding
> -
> -The Shared Memory Point to Point (SMP2P) protocol facilitates communication of
> -a single 32-bit value between two processors. Each value has a single writer
> -(the local side) and a single reader (the remote side). Values are uniquely
> -identified in the system by the directed edge (local processor ID to remote
> -processor ID) and a string identifier.
> -
> -- compatible:
> - Usage: required
> - Value type: <string>
> - Definition: must be one of:
> - "qcom,smp2p"
> -
> -- interrupts:
> - Usage: required
> - Value type: <prop-encoded-array>
> - Definition: one entry specifying the smp2p notification interrupt
> -
> -- mboxes:
> - Usage: required
> - Value type: <prop-encoded-array>
> - Definition: reference to the associated doorbell in APCS, as described
> - in mailbox/mailbox.txt
> -
> -- qcom,ipc:
> - Usage: required, unless mboxes is specified
> - Value type: <prop-encoded-array>
> - Definition: three entries specifying the outgoing ipc bit used for
> - signaling the remote end of the smp2p edge:
> - - phandle to a syscon node representing the apcs registers
> - - u32 representing offset to the register within the syscon
> - - u32 representing the ipc bit within the register
> -
> -- qcom,smem:
> - Usage: required
> - Value type: <u32 array>
> - Definition: two identifiers of the inbound and outbound smem items used
> - for this edge
> -
> -- qcom,local-pid:
> - Usage: required
> - Value type: <u32>
> - Definition: specifies the identifier of the local endpoint of this edge
> -
> -- qcom,remote-pid:
> - Usage: required
> - Value type: <u32>
> - Definition: specifies the identifier of the remote endpoint of this edge
> -
> -= SUBNODES
> -Each SMP2P pair contain a set of inbound and outbound entries, these are
> -described in subnodes of the smp2p device node. The node names are not
> -important.
> -
> -- qcom,entry-name:
> - Usage: required
> - Value type: <string>
> - Definition: specifies the name of this entry, for inbound entries this
> - will be used to match against the remotely allocated entry
> - and for outbound entries this name is used for allocating
> - entries
> -
> -- interrupt-controller:
> - Usage: required for incoming entries
> - Value type: <empty>
> - Definition: marks the entry as inbound; the node should be specified
> - as a two cell interrupt-controller as defined in
> - "../interrupt-controller/interrupts.txt"
> - If not specified this node will denote the outgoing entry
> -
> -- #interrupt-cells:
> - Usage: required for incoming entries
> - Value type: <u32>
> - Definition: must be 2 - denoting the bit in the entry and IRQ flags
> -
> -- #qcom,smem-state-cells:
> - Usage: required for outgoing entries
> - Value type: <u32>
> - Definition: must be 1 - denoting the bit in the entry
> -
> -= EXAMPLE
> -The following example shows the SMP2P setup with the wireless processor,
> -defined from the 8974 apps processor's point-of-view. It encompasses one
> -inbound and one outbound entry:
> -
> -wcnss-smp2p {
> - compatible = "qcom,smp2p";
> - qcom,smem = <431>, <451>;
> -
> - interrupts = <0 143 1>;
> -
> - qcom,ipc = <&apcs 8 18>;
> -
> - qcom,local-pid = <0>;
> - qcom,remote-pid = <4>;
> -
> - wcnss_smp2p_out: master-kernel {
> - qcom,entry-name = "master-kernel";
> -
> - #qcom,smem-state-cells = <1>;
> - };
> -
> - wcnss_smp2p_in: slave-kernel {
> - qcom,entry-name = "slave-kernel";
> -
> - interrupt-controller;
> - #interrupt-cells = <2>;
> - };
> -};
> diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml b/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml
> new file mode 100644
> index 000000000000..40d1c42e917b
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml
> @@ -0,0 +1,139 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: "http://devicetree.org/schemas/soc/qcom/qcom,smp2p.yaml#"
> +$schema: "http://devicetree.org/meta-schemas/core.yaml#"
> +
> +title: Qualcomm Shared Memory Point 2 Point
> +
> +description: |

You may omit the pipe.

> + The Shared Memory Point to Point (SMP2P) protocol facilitates communication of
> + a single 32-bit value between two processors. Each value has a single writer
> + (the local side) and a single reader (the remote side). Values are uniquely
> + identified in the system by the directed edge (local processor ID to remote
> + processor ID) and a string identifier.
> +
> +maintainers:
> + - Bjorn Andersson <[email protected]>
> +
> +properties:
> + compatible:
> + const: qcom,smp2p
> +
> + interrupts:
> + maxItems: 1
> +
> + mboxes:
> + description: >
> + reference to the associated doorbell in APCS, as described
> + in mailbox/mailbox.txt
> +
> + qcom,ipc:
> + $ref: /schemas/types.yaml#/definitions/uint32-matrix
> + description: >
> + three entries specifying the outgoing ipc bit used for
> + signaling the remote end of the smp2p edge
> + minItems: 1
> + maxItems: 32 # no hard limit
> + items:
> + items:
> + - description: phandle to a syscon node representing the apcs registers
> + - description: offset to the register within the syscon
> + - description: the IPC bit within the register
> +
> + qcom,smem:
> + $ref: /schemas/types.yaml#/definitions/uint32-matrix
> + description: indentifiers of the smem items used for this edge
> + items:
> + - items:
> + - description: identifier of inbound smem items
> + - items:
> + - description: identifier of outbound smem items
> +
> + qcom,local-pid:
> + $ref: /schemas/types.yaml#/definitions/uint32
> + description: specifies the identifier of the local endpoint of this edge
> +
> + qcom,remote-pid:
> + $ref: /schemas/types.yaml#/definitions/uint32
> + description: specifies the identifier of the remote endpoint of this edge
> +
> +patternProperties:
> + "^((master|slave)-kernel|ipa-ap-to-modem|ipa-modem-to-ap|)$":

These are simply the identifiers in "qcom,entry-name" and putting them
in the binding would mean that whenever we have additions (there are
some for e.g. WiFi on newer platforms) we have to update the binding.

So I would prefer if we just skip the constraints on the names of the
child nodes.

Regards,
Bjorn

> + type: object
> + properties:
> + interrupt-controller:
> + description: >
> + marks the entry as inbound, if not specified
> + this node will denote the outgoing entry
> +
> + '#interrupt-cells':
> + const: 2
> +
> + qcom,entry-name:
> + $ref: /schemas/types.yaml#/definitions/string
> + description: >
> + specifies the name of this entry, for inbound entries this will be
> + used to match against the remotely allocated entry and for outbound
> + entries this name is used for allocating entries
> +
> + '#qcom,smem-state-cells':
> + $ref: /schemas/types.yaml#/definitions/uint32
> + description: required for outgoing entries
> + const: 1
> +
> + required:
> + - qcom,entry-name
> +
> + oneOf:
> + - required:
> + - interrupt-controller
> + - '#interrupt-cells'
> + - required:
> + - '#qcom,smem-state-cells'
> +
> + additionalProperties: false
> +
> +required:
> + - compatible
> + - qcom,smem
> + - qcom,local-pid
> + - qcom,remote-pid
> +
> +anyOf:
> + - required:
> + - mboxes
> + - required:
> + - qcom,ipc
> +
> +additionalProperties: false
> +
> +examples:
> + # The following example shows the SMP2P setup with the wireless processor,
> + # defined from the 8974 apps processor's point-of-view. It encompasses one
> + # inbound and one outbound entry:
> + - |
> + wcnss-smp2p {
> + compatible = "qcom,smp2p";
> + qcom,smem = <431>, <451>;
> +
> + interrupts = <0 143 1>;
> +
> + qcom,ipc = <&apcs 8 18>;
> +
> + qcom,local-pid = <0>;
> + qcom,remote-pid = <4>;
> +
> + wcnss_smp2p_out: master-kernel {
> + qcom,entry-name = "master-kernel";
> +
> + #qcom,smem-state-cells = <1>;
> + };
> +
> + wcnss_smp2p_in: slave-kernel {
> + qcom,entry-name = "slave-kernel";
> +
> + interrupt-controller;
> + #interrupt-cells = <2>;
> + };
> + };
> --
> 2.34.1
>