1*4882a593SmuzhiyunQualcomm Technologies, Inc. CPUFREQ Bindings 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunCPUFREQ HW is a hardware engine used by some Qualcomm Technologies, Inc. (QTI) 4*4882a593SmuzhiyunSoCs to manage frequency in hardware. It is capable of controlling frequency 5*4882a593Smuzhiyunfor multiple clusters. 6*4882a593Smuzhiyun 7*4882a593SmuzhiyunProperties: 8*4882a593Smuzhiyun- compatible 9*4882a593Smuzhiyun Usage: required 10*4882a593Smuzhiyun Value type: <string> 11*4882a593Smuzhiyun Definition: must be "qcom,cpufreq-hw" or "qcom,cpufreq-epss". 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun- clocks 14*4882a593Smuzhiyun Usage: required 15*4882a593Smuzhiyun Value type: <phandle> From common clock binding. 16*4882a593Smuzhiyun Definition: clock handle for XO clock and GPLL0 clock. 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun- clock-names 19*4882a593Smuzhiyun Usage: required 20*4882a593Smuzhiyun Value type: <string> From common clock binding. 21*4882a593Smuzhiyun Definition: must be "xo", "alternate". 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun- reg 24*4882a593Smuzhiyun Usage: required 25*4882a593Smuzhiyun Value type: <prop-encoded-array> 26*4882a593Smuzhiyun Definition: Addresses and sizes for the memory of the HW bases in 27*4882a593Smuzhiyun each frequency domain. 28*4882a593Smuzhiyun- reg-names 29*4882a593Smuzhiyun Usage: Optional 30*4882a593Smuzhiyun Value type: <string> 31*4882a593Smuzhiyun Definition: Frequency domain name i.e. 32*4882a593Smuzhiyun "freq-domain0", "freq-domain1". 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun- #freq-domain-cells: 35*4882a593Smuzhiyun Usage: required. 36*4882a593Smuzhiyun Definition: Number of cells in a freqency domain specifier. 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun* Property qcom,freq-domain 39*4882a593SmuzhiyunDevices supporting freq-domain must set their "qcom,freq-domain" property with 40*4882a593Smuzhiyunphandle to a cpufreq_hw followed by the Domain ID(0/1) in the CPU DT node. 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun 43*4882a593SmuzhiyunExample: 44*4882a593Smuzhiyun 45*4882a593SmuzhiyunExample 1: Dual-cluster, Quad-core per cluster. CPUs within a cluster switch 46*4882a593SmuzhiyunDCVS state together. 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun/ { 49*4882a593Smuzhiyun cpus { 50*4882a593Smuzhiyun #address-cells = <2>; 51*4882a593Smuzhiyun #size-cells = <0>; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun CPU0: cpu@0 { 54*4882a593Smuzhiyun device_type = "cpu"; 55*4882a593Smuzhiyun compatible = "qcom,kryo385"; 56*4882a593Smuzhiyun reg = <0x0 0x0>; 57*4882a593Smuzhiyun enable-method = "psci"; 58*4882a593Smuzhiyun next-level-cache = <&L2_0>; 59*4882a593Smuzhiyun qcom,freq-domain = <&cpufreq_hw 0>; 60*4882a593Smuzhiyun L2_0: l2-cache { 61*4882a593Smuzhiyun compatible = "cache"; 62*4882a593Smuzhiyun next-level-cache = <&L3_0>; 63*4882a593Smuzhiyun L3_0: l3-cache { 64*4882a593Smuzhiyun compatible = "cache"; 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun }; 67*4882a593Smuzhiyun }; 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun CPU1: cpu@100 { 70*4882a593Smuzhiyun device_type = "cpu"; 71*4882a593Smuzhiyun compatible = "qcom,kryo385"; 72*4882a593Smuzhiyun reg = <0x0 0x100>; 73*4882a593Smuzhiyun enable-method = "psci"; 74*4882a593Smuzhiyun next-level-cache = <&L2_100>; 75*4882a593Smuzhiyun qcom,freq-domain = <&cpufreq_hw 0>; 76*4882a593Smuzhiyun L2_100: l2-cache { 77*4882a593Smuzhiyun compatible = "cache"; 78*4882a593Smuzhiyun next-level-cache = <&L3_0>; 79*4882a593Smuzhiyun }; 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun CPU2: cpu@200 { 83*4882a593Smuzhiyun device_type = "cpu"; 84*4882a593Smuzhiyun compatible = "qcom,kryo385"; 85*4882a593Smuzhiyun reg = <0x0 0x200>; 86*4882a593Smuzhiyun enable-method = "psci"; 87*4882a593Smuzhiyun next-level-cache = <&L2_200>; 88*4882a593Smuzhiyun qcom,freq-domain = <&cpufreq_hw 0>; 89*4882a593Smuzhiyun L2_200: l2-cache { 90*4882a593Smuzhiyun compatible = "cache"; 91*4882a593Smuzhiyun next-level-cache = <&L3_0>; 92*4882a593Smuzhiyun }; 93*4882a593Smuzhiyun }; 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun CPU3: cpu@300 { 96*4882a593Smuzhiyun device_type = "cpu"; 97*4882a593Smuzhiyun compatible = "qcom,kryo385"; 98*4882a593Smuzhiyun reg = <0x0 0x300>; 99*4882a593Smuzhiyun enable-method = "psci"; 100*4882a593Smuzhiyun next-level-cache = <&L2_300>; 101*4882a593Smuzhiyun qcom,freq-domain = <&cpufreq_hw 0>; 102*4882a593Smuzhiyun L2_300: l2-cache { 103*4882a593Smuzhiyun compatible = "cache"; 104*4882a593Smuzhiyun next-level-cache = <&L3_0>; 105*4882a593Smuzhiyun }; 106*4882a593Smuzhiyun }; 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun CPU4: cpu@400 { 109*4882a593Smuzhiyun device_type = "cpu"; 110*4882a593Smuzhiyun compatible = "qcom,kryo385"; 111*4882a593Smuzhiyun reg = <0x0 0x400>; 112*4882a593Smuzhiyun enable-method = "psci"; 113*4882a593Smuzhiyun next-level-cache = <&L2_400>; 114*4882a593Smuzhiyun qcom,freq-domain = <&cpufreq_hw 1>; 115*4882a593Smuzhiyun L2_400: l2-cache { 116*4882a593Smuzhiyun compatible = "cache"; 117*4882a593Smuzhiyun next-level-cache = <&L3_0>; 118*4882a593Smuzhiyun }; 119*4882a593Smuzhiyun }; 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun CPU5: cpu@500 { 122*4882a593Smuzhiyun device_type = "cpu"; 123*4882a593Smuzhiyun compatible = "qcom,kryo385"; 124*4882a593Smuzhiyun reg = <0x0 0x500>; 125*4882a593Smuzhiyun enable-method = "psci"; 126*4882a593Smuzhiyun next-level-cache = <&L2_500>; 127*4882a593Smuzhiyun qcom,freq-domain = <&cpufreq_hw 1>; 128*4882a593Smuzhiyun L2_500: l2-cache { 129*4882a593Smuzhiyun compatible = "cache"; 130*4882a593Smuzhiyun next-level-cache = <&L3_0>; 131*4882a593Smuzhiyun }; 132*4882a593Smuzhiyun }; 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun CPU6: cpu@600 { 135*4882a593Smuzhiyun device_type = "cpu"; 136*4882a593Smuzhiyun compatible = "qcom,kryo385"; 137*4882a593Smuzhiyun reg = <0x0 0x600>; 138*4882a593Smuzhiyun enable-method = "psci"; 139*4882a593Smuzhiyun next-level-cache = <&L2_600>; 140*4882a593Smuzhiyun qcom,freq-domain = <&cpufreq_hw 1>; 141*4882a593Smuzhiyun L2_600: l2-cache { 142*4882a593Smuzhiyun compatible = "cache"; 143*4882a593Smuzhiyun next-level-cache = <&L3_0>; 144*4882a593Smuzhiyun }; 145*4882a593Smuzhiyun }; 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun CPU7: cpu@700 { 148*4882a593Smuzhiyun device_type = "cpu"; 149*4882a593Smuzhiyun compatible = "qcom,kryo385"; 150*4882a593Smuzhiyun reg = <0x0 0x700>; 151*4882a593Smuzhiyun enable-method = "psci"; 152*4882a593Smuzhiyun next-level-cache = <&L2_700>; 153*4882a593Smuzhiyun qcom,freq-domain = <&cpufreq_hw 1>; 154*4882a593Smuzhiyun L2_700: l2-cache { 155*4882a593Smuzhiyun compatible = "cache"; 156*4882a593Smuzhiyun next-level-cache = <&L3_0>; 157*4882a593Smuzhiyun }; 158*4882a593Smuzhiyun }; 159*4882a593Smuzhiyun }; 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun soc { 162*4882a593Smuzhiyun cpufreq_hw: cpufreq@17d43000 { 163*4882a593Smuzhiyun compatible = "qcom,cpufreq-hw"; 164*4882a593Smuzhiyun reg = <0x17d43000 0x1400>, <0x17d45800 0x1400>; 165*4882a593Smuzhiyun reg-names = "freq-domain0", "freq-domain1"; 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun clocks = <&rpmhcc RPMH_CXO_CLK>, <&gcc GPLL0>; 168*4882a593Smuzhiyun clock-names = "xo", "alternate"; 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun #freq-domain-cells = <1>; 171*4882a593Smuzhiyun }; 172*4882a593Smuzhiyun} 173