| Qualcomm Shared Memory State Machine |
| |
| The Shared Memory State Machine facilitates broadcasting of single bit state |
| information between the processors in a Qualcomm SoC. Each processor is |
| assigned 32 bits of state that can be modified. A processor can through a |
| matrix of bitmaps signal subscription of notifications upon changes to a |
| certain bit owned by a certain remote processor. |
| |
| - compatible: |
| Usage: required |
| Value type: <string> |
| Definition: must be one of: |
| "qcom,smsm" |
| |
| - qcom,ipc-N: |
| Usage: required |
| Value type: <prop-encoded-array> |
| Definition: three entries specifying the outgoing ipc bit used for |
| signaling the N:th remote processor |
| - 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,local-host: |
| Usage: optional |
| Value type: <u32> |
| Definition: identifier of the local processor in the list of hosts, or |
| in other words specifier of the column in the subscription |
| matrix representing the local processor |
| defaults to host 0 |
| |
| - #address-cells: |
| Usage: required |
| Value type: <u32> |
| Definition: must be 1 |
| |
| - #size-cells: |
| Usage: required |
| Value type: <u32> |
| Definition: must be 0 |
| |
| = SUBNODES |
| Each processor's state bits are described by a subnode of the smsm device node. |
| Nodes can either be flagged as an interrupt-controller to denote a remote |
| processor's state bits or the local processors bits. The node names are not |
| important. |
| |
| - reg: |
| Usage: required |
| Value type: <u32> |
| Definition: specifies the offset, in words, of the first bit for this |
| entry |
| |
| - #qcom,smem-state-cells: |
| Usage: required for local entry |
| Value type: <u32> |
| Definition: must be 1 - denotes bit number |
| |
| - interrupt-controller: |
| Usage: required for remote entries |
| Value type: <empty> |
| Definition: marks the entry as a interrupt-controller and the state bits |
| to belong to a remote processor |
| |
| - #interrupt-cells: |
| Usage: required for remote entries |
| Value type: <u32> |
| Definition: must be 2 - denotes bit number and IRQ flags |
| |
| - interrupts: |
| Usage: required for remote entries |
| Value type: <prop-encoded-array> |
| Definition: one entry specifying remote IRQ used by the remote processor |
| to signal changes of its state bits |
| |
| |
| = EXAMPLE |
| The following example shows the SMEM setup for controlling properties of the |
| wireless processor, defined from the 8974 apps processor's point-of-view. It |
| encompasses one outbound entry and the outgoing interrupt for the wireless |
| processor. |
| |
| smsm { |
| compatible = "qcom,smsm"; |
| |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| qcom,ipc-3 = <&apcs 8 19>; |
| |
| apps_smsm: apps@0 { |
| reg = <0>; |
| |
| #qcom,smem-state-cells = <1>; |
| }; |
| |
| wcnss_smsm: wcnss@7 { |
| reg = <7>; |
| interrupts = <0 144 1>; |
| |
| interrupt-controller; |
| #interrupt-cells = <2>; |
| }; |
| }; |