1*4882a593SmuzhiyunQualcomm RPM Clock Controller Binding 2*4882a593Smuzhiyun------------------------------------------------ 3*4882a593SmuzhiyunThe RPM is a dedicated hardware engine for managing the shared 4*4882a593SmuzhiyunSoC resources in order to keep the lowest power profile. It 5*4882a593Smuzhiyuncommunicates with other hardware subsystems via shared memory 6*4882a593Smuzhiyunand accepts clock requests, aggregates the requests and turns 7*4882a593Smuzhiyunthe clocks on/off or scales them on demand. 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunRequired properties : 10*4882a593Smuzhiyun- compatible : shall contain only one of the following. The generic 11*4882a593Smuzhiyun compatible "qcom,rpmcc" should be also included. 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun "qcom,rpmcc-msm8660", "qcom,rpmcc" 14*4882a593Smuzhiyun "qcom,rpmcc-apq8060", "qcom,rpmcc" 15*4882a593Smuzhiyun "qcom,rpmcc-msm8916", "qcom,rpmcc" 16*4882a593Smuzhiyun "qcom,rpmcc-msm8936", "qcom,rpmcc" 17*4882a593Smuzhiyun "qcom,rpmcc-msm8974", "qcom,rpmcc" 18*4882a593Smuzhiyun "qcom,rpmcc-msm8976", "qcom,rpmcc" 19*4882a593Smuzhiyun "qcom,rpmcc-apq8064", "qcom,rpmcc" 20*4882a593Smuzhiyun "qcom,rpmcc-ipq806x", "qcom,rpmcc" 21*4882a593Smuzhiyun "qcom,rpmcc-msm8992",·"qcom,rpmcc" 22*4882a593Smuzhiyun "qcom,rpmcc-msm8994",·"qcom,rpmcc" 23*4882a593Smuzhiyun "qcom,rpmcc-msm8996", "qcom,rpmcc" 24*4882a593Smuzhiyun "qcom,rpmcc-msm8998", "qcom,rpmcc" 25*4882a593Smuzhiyun "qcom,rpmcc-qcs404", "qcom,rpmcc" 26*4882a593Smuzhiyun "qcom,rpmcc-sdm660", "qcom,rpmcc" 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun- #clock-cells : shall contain 1 29*4882a593Smuzhiyun 30*4882a593SmuzhiyunThe clock enumerators are defined in <dt-bindings/clock/qcom,rpmcc.h> 31*4882a593Smuzhiyunand come in pairs: FOO_CLK followed by FOO_A_CLK. The latter clock 32*4882a593Smuzhiyunis an "active" clock, which means that the consumer only care that the 33*4882a593Smuzhiyunclock is available when the apps CPU subsystem is active, i.e. not 34*4882a593Smuzhiyunsuspended or in deep idle. If it is important that the clock keeps running 35*4882a593Smuzhiyunduring system suspend, you need to specify the non-active clock, the one 36*4882a593Smuzhiyunnot containing *_A_* in the enumerator name. 37*4882a593Smuzhiyun 38*4882a593SmuzhiyunExample: 39*4882a593Smuzhiyun smd { 40*4882a593Smuzhiyun compatible = "qcom,smd"; 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun rpm { 43*4882a593Smuzhiyun interrupts = <0 168 1>; 44*4882a593Smuzhiyun qcom,ipc = <&apcs 8 0>; 45*4882a593Smuzhiyun qcom,smd-edge = <15>; 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun rpm_requests { 48*4882a593Smuzhiyun compatible = "qcom,rpm-msm8916"; 49*4882a593Smuzhiyun qcom,smd-channels = "rpm_requests"; 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun rpmcc: clock-controller { 52*4882a593Smuzhiyun compatible = "qcom,rpmcc-msm8916", "qcom,rpmcc"; 53*4882a593Smuzhiyun #clock-cells = <1>; 54*4882a593Smuzhiyun }; 55*4882a593Smuzhiyun }; 56*4882a593Smuzhiyun }; 57*4882a593Smuzhiyun }; 58