18c2ecf20Sopenharmony_ciQualcomm Shared Memory Driver (SMD) binding
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ciThis binding describes the Qualcomm Shared Memory Driver, a fifo based
48c2ecf20Sopenharmony_cicommunication channel for sending data between the various subsystems in
58c2ecf20Sopenharmony_ciQualcomm platforms.
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci- compatible:
88c2ecf20Sopenharmony_ci	Usage: required
98c2ecf20Sopenharmony_ci	Value type: <stringlist>
108c2ecf20Sopenharmony_ci	Definition: must be "qcom,smd"
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci= EDGES
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ciEach subnode of the SMD node represents a remote subsystem or a remote
158c2ecf20Sopenharmony_ciprocessor of some sort - or in SMD language an "edge". The name of the edges
168c2ecf20Sopenharmony_ciare not important.
178c2ecf20Sopenharmony_ciThe edge is described by the following properties:
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci- interrupts:
208c2ecf20Sopenharmony_ci	Usage: required
218c2ecf20Sopenharmony_ci	Value type: <prop-encoded-array>
228c2ecf20Sopenharmony_ci	Definition: should specify the IRQ used by the remote processor to
238c2ecf20Sopenharmony_ci		    signal this processor about communication related updates
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci- mboxes:
268c2ecf20Sopenharmony_ci	Usage: required
278c2ecf20Sopenharmony_ci	Value type: <prop-encoded-array>
288c2ecf20Sopenharmony_ci	Definition: reference to the associated doorbell in APCS, as described
298c2ecf20Sopenharmony_ci		    in mailbox/mailbox.txt
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci- qcom,ipc:
328c2ecf20Sopenharmony_ci	Usage: required, unless mboxes is specified
338c2ecf20Sopenharmony_ci	Value type: <prop-encoded-array>
348c2ecf20Sopenharmony_ci	Definition: three entries specifying the outgoing ipc bit used for
358c2ecf20Sopenharmony_ci		    signaling the remote processor:
368c2ecf20Sopenharmony_ci		    - phandle to a syscon node representing the apcs registers
378c2ecf20Sopenharmony_ci		    - u32 representing offset to the register within the syscon
388c2ecf20Sopenharmony_ci		    - u32 representing the ipc bit within the register
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci- qcom,smd-edge:
418c2ecf20Sopenharmony_ci	Usage: required
428c2ecf20Sopenharmony_ci	Value type: <u32>
438c2ecf20Sopenharmony_ci	Definition: the identifier of the remote processor in the smd channel
448c2ecf20Sopenharmony_ci		    allocation table
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci- qcom,remote-pid:
478c2ecf20Sopenharmony_ci	Usage: optional
488c2ecf20Sopenharmony_ci	Value type: <u32>
498c2ecf20Sopenharmony_ci	Definition: the identifier for the remote processor as known by the rest
508c2ecf20Sopenharmony_ci		    of the system.
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci- label:
538c2ecf20Sopenharmony_ci	Usage: optional
548c2ecf20Sopenharmony_ci	Value type: <string>
558c2ecf20Sopenharmony_ci	Definition: name of the edge, used for debugging and identification
568c2ecf20Sopenharmony_ci		    purposes. The node name will be used if this is not
578c2ecf20Sopenharmony_ci		    present.
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ci= SMD DEVICES
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ciIn turn, subnodes of the "edges" represent devices tied to SMD channels on that
628c2ecf20Sopenharmony_ci"edge". The names of the devices are not important. The properties of these
638c2ecf20Sopenharmony_cinodes are defined by the individual bindings for the SMD devices - but must
648c2ecf20Sopenharmony_cicontain the following property:
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ci- qcom,smd-channels:
678c2ecf20Sopenharmony_ci	Usage: required
688c2ecf20Sopenharmony_ci	Value type: <stringlist>
698c2ecf20Sopenharmony_ci	Definition: a list of channels tied to this device, used for matching
708c2ecf20Sopenharmony_ci		    the device to channels
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci= EXAMPLE
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ciThe following example represents a smd node, with one edge representing the
758c2ecf20Sopenharmony_ci"rpm" subsystem. For the "rpm" subsystem we have a device tied to the
768c2ecf20Sopenharmony_ci"rpm_request" channel.
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_ci	apcs: syscon@f9011000 {
798c2ecf20Sopenharmony_ci		compatible = "syscon";
808c2ecf20Sopenharmony_ci		reg = <0xf9011000 0x1000>;
818c2ecf20Sopenharmony_ci	};
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ci	smd {
848c2ecf20Sopenharmony_ci		compatible = "qcom,smd";
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_ci		rpm {
878c2ecf20Sopenharmony_ci			interrupts = <0 168 1>;
888c2ecf20Sopenharmony_ci			qcom,ipc = <&apcs 8 0>;
898c2ecf20Sopenharmony_ci			qcom,smd-edge = <15>;
908c2ecf20Sopenharmony_ci
918c2ecf20Sopenharmony_ci			rpm_requests {
928c2ecf20Sopenharmony_ci				compatible = "qcom,rpm-msm8974";
938c2ecf20Sopenharmony_ci				qcom,smd-channels = "rpm_requests";
948c2ecf20Sopenharmony_ci
958c2ecf20Sopenharmony_ci				...
968c2ecf20Sopenharmony_ci			};
978c2ecf20Sopenharmony_ci		};
988c2ecf20Sopenharmony_ci	};
99