| 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>; |
| }; |
| }; |