Qualcomm Shared Memory Driver (SMD) binding 
 | 
  
 | 
This binding describes the Qualcomm Shared Memory Driver, a fifo based 
 | 
communication channel for sending data between the various subsystems in 
 | 
Qualcomm platforms. 
 | 
  
 | 
- compatible: 
 | 
    Usage: required 
 | 
    Value type: <stringlist> 
 | 
    Definition: must be "qcom,smd" 
 | 
  
 | 
= EDGES 
 | 
  
 | 
Each subnode of the SMD node represents a remote subsystem or a remote 
 | 
processor of some sort - or in SMD language an "edge". The name of the edges 
 | 
are not important. 
 | 
The edge is described by the following properties: 
 | 
  
 | 
- interrupts: 
 | 
    Usage: required 
 | 
    Value type: <prop-encoded-array> 
 | 
    Definition: should specify the IRQ used by the remote processor to 
 | 
            signal this processor about communication related updates 
 | 
  
 | 
- 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 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,smd-edge: 
 | 
    Usage: required 
 | 
    Value type: <u32> 
 | 
    Definition: the identifier of the remote processor in the smd channel 
 | 
            allocation table 
 | 
  
 | 
- qcom,remote-pid: 
 | 
    Usage: optional 
 | 
    Value type: <u32> 
 | 
    Definition: the identifier for the remote processor as known by the rest 
 | 
            of the system. 
 | 
  
 | 
- label: 
 | 
    Usage: optional 
 | 
    Value type: <string> 
 | 
    Definition: name of the edge, used for debugging and identification 
 | 
            purposes. The node name will be used if this is not 
 | 
            present. 
 | 
  
 | 
= SMD DEVICES 
 | 
  
 | 
In turn, subnodes of the "edges" represent devices tied to SMD channels on that 
 | 
"edge". The names of the devices are not important. The properties of these 
 | 
nodes are defined by the individual bindings for the SMD devices - but must 
 | 
contain the following property: 
 | 
  
 | 
- qcom,smd-channels: 
 | 
    Usage: required 
 | 
    Value type: <stringlist> 
 | 
    Definition: a list of channels tied to this device, used for matching 
 | 
            the device to channels 
 | 
  
 | 
= EXAMPLE 
 | 
  
 | 
The following example represents a smd node, with one edge representing the 
 | 
"rpm" subsystem. For the "rpm" subsystem we have a device tied to the 
 | 
"rpm_request" channel. 
 | 
  
 | 
    apcs: syscon@f9011000 { 
 | 
        compatible = "syscon"; 
 | 
        reg = <0xf9011000 0x1000>; 
 | 
    }; 
 | 
  
 | 
    smd { 
 | 
        compatible = "qcom,smd"; 
 | 
  
 | 
        rpm { 
 | 
            interrupts = <0 168 1>; 
 | 
            qcom,ipc = <&apcs 8 0>; 
 | 
            qcom,smd-edge = <15>; 
 | 
  
 | 
            rpm_requests { 
 | 
                compatible = "qcom,rpm-msm8974"; 
 | 
                qcom,smd-channels = "rpm_requests"; 
 | 
  
 | 
                ... 
 | 
            }; 
 | 
        }; 
 | 
    }; 
 |