18c2ecf20Sopenharmony_ciQualcomm RPM Clock Controller Binding
28c2ecf20Sopenharmony_ci------------------------------------------------
38c2ecf20Sopenharmony_ciThe RPM is a dedicated hardware engine for managing the shared
48c2ecf20Sopenharmony_ciSoC resources in order to keep the lowest power profile. It
58c2ecf20Sopenharmony_cicommunicates with other hardware subsystems via shared memory
68c2ecf20Sopenharmony_ciand accepts clock requests, aggregates the requests and turns
78c2ecf20Sopenharmony_cithe clocks on/off or scales them on demand.
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ciRequired properties :
108c2ecf20Sopenharmony_ci- compatible : shall contain only one of the following. The generic
118c2ecf20Sopenharmony_ci               compatible "qcom,rpmcc" should be also included.
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci			"qcom,rpmcc-msm8660", "qcom,rpmcc"
148c2ecf20Sopenharmony_ci			"qcom,rpmcc-apq8060", "qcom,rpmcc"
158c2ecf20Sopenharmony_ci			"qcom,rpmcc-msm8916", "qcom,rpmcc"
168c2ecf20Sopenharmony_ci			"qcom,rpmcc-msm8936", "qcom,rpmcc"
178c2ecf20Sopenharmony_ci			"qcom,rpmcc-msm8974", "qcom,rpmcc"
188c2ecf20Sopenharmony_ci			"qcom,rpmcc-msm8976", "qcom,rpmcc"
198c2ecf20Sopenharmony_ci			"qcom,rpmcc-apq8064", "qcom,rpmcc"
208c2ecf20Sopenharmony_ci			"qcom,rpmcc-ipq806x", "qcom,rpmcc"
218c2ecf20Sopenharmony_ci			"qcom,rpmcc-msm8992",·"qcom,rpmcc"
228c2ecf20Sopenharmony_ci			"qcom,rpmcc-msm8994",·"qcom,rpmcc"
238c2ecf20Sopenharmony_ci			"qcom,rpmcc-msm8996", "qcom,rpmcc"
248c2ecf20Sopenharmony_ci			"qcom,rpmcc-msm8998", "qcom,rpmcc"
258c2ecf20Sopenharmony_ci			"qcom,rpmcc-qcs404", "qcom,rpmcc"
268c2ecf20Sopenharmony_ci			"qcom,rpmcc-sdm660", "qcom,rpmcc"
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci- #clock-cells : shall contain 1
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ciThe clock enumerators are defined in <dt-bindings/clock/qcom,rpmcc.h>
318c2ecf20Sopenharmony_ciand come in pairs: FOO_CLK followed by FOO_A_CLK. The latter clock
328c2ecf20Sopenharmony_ciis an "active" clock, which means that the consumer only care that the
338c2ecf20Sopenharmony_ciclock is available when the apps CPU subsystem is active, i.e. not
348c2ecf20Sopenharmony_cisuspended or in deep idle. If it is important that the clock keeps running
358c2ecf20Sopenharmony_ciduring system suspend, you need to specify the non-active clock, the one
368c2ecf20Sopenharmony_cinot containing *_A_* in the enumerator name.
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ciExample:
398c2ecf20Sopenharmony_ci	smd {
408c2ecf20Sopenharmony_ci		compatible = "qcom,smd";
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci		rpm {
438c2ecf20Sopenharmony_ci			interrupts = <0 168 1>;
448c2ecf20Sopenharmony_ci			qcom,ipc = <&apcs 8 0>;
458c2ecf20Sopenharmony_ci			qcom,smd-edge = <15>;
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci			rpm_requests {
488c2ecf20Sopenharmony_ci				compatible = "qcom,rpm-msm8916";
498c2ecf20Sopenharmony_ci				qcom,smd-channels = "rpm_requests";
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci				rpmcc: clock-controller {
528c2ecf20Sopenharmony_ci					compatible = "qcom,rpmcc-msm8916", "qcom,rpmcc";
538c2ecf20Sopenharmony_ci					#clock-cells = <1>;
548c2ecf20Sopenharmony_ci				};
558c2ecf20Sopenharmony_ci			};
568c2ecf20Sopenharmony_ci		};
578c2ecf20Sopenharmony_ci	};
58