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