1*4882a593SmuzhiyunQCOM CPR (Core Power Reduction) 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunCPR (Core Power Reduction) is a technology to reduce core power on a CPU 4*4882a593Smuzhiyunor other device. Each OPP of a device corresponds to a "corner" that has 5*4882a593Smuzhiyuna range of valid voltages for a particular frequency. While the device is 6*4882a593Smuzhiyunrunning at a particular frequency, CPR monitors dynamic factors such as 7*4882a593Smuzhiyuntemperature, etc. and suggests adjustments to the voltage to save power 8*4882a593Smuzhiyunand meet silicon characteristic requirements. 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun- compatible: 11*4882a593Smuzhiyun Usage: required 12*4882a593Smuzhiyun Value type: <string> 13*4882a593Smuzhiyun Definition: should be "qcom,qcs404-cpr", "qcom,cpr" for qcs404 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun- reg: 16*4882a593Smuzhiyun Usage: required 17*4882a593Smuzhiyun Value type: <prop-encoded-array> 18*4882a593Smuzhiyun Definition: base address and size of the rbcpr register region 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun- interrupts: 21*4882a593Smuzhiyun Usage: required 22*4882a593Smuzhiyun Value type: <prop-encoded-array> 23*4882a593Smuzhiyun Definition: should specify the CPR interrupt 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun- clocks: 26*4882a593Smuzhiyun Usage: required 27*4882a593Smuzhiyun Value type: <prop-encoded-array> 28*4882a593Smuzhiyun Definition: phandle to the reference clock 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun- clock-names: 31*4882a593Smuzhiyun Usage: required 32*4882a593Smuzhiyun Value type: <stringlist> 33*4882a593Smuzhiyun Definition: must be "ref" 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun- vdd-apc-supply: 36*4882a593Smuzhiyun Usage: required 37*4882a593Smuzhiyun Value type: <phandle> 38*4882a593Smuzhiyun Definition: phandle to the vdd-apc-supply regulator 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun- #power-domain-cells: 41*4882a593Smuzhiyun Usage: required 42*4882a593Smuzhiyun Value type: <u32> 43*4882a593Smuzhiyun Definition: should be 0 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun- operating-points-v2: 46*4882a593Smuzhiyun Usage: required 47*4882a593Smuzhiyun Value type: <phandle> 48*4882a593Smuzhiyun Definition: A phandle to the OPP table containing the 49*4882a593Smuzhiyun performance states supported by the CPR 50*4882a593Smuzhiyun power domain 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun- acc-syscon: 53*4882a593Smuzhiyun Usage: optional 54*4882a593Smuzhiyun Value type: <phandle> 55*4882a593Smuzhiyun Definition: phandle to syscon for writing ACC settings 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun- nvmem-cells: 58*4882a593Smuzhiyun Usage: required 59*4882a593Smuzhiyun Value type: <phandle> 60*4882a593Smuzhiyun Definition: phandle to nvmem cells containing the data 61*4882a593Smuzhiyun that makes up a fuse corner, for each fuse corner. 62*4882a593Smuzhiyun As well as the CPR fuse revision. 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun- nvmem-cell-names: 65*4882a593Smuzhiyun Usage: required 66*4882a593Smuzhiyun Value type: <stringlist> 67*4882a593Smuzhiyun Definition: should be "cpr_quotient_offset1", "cpr_quotient_offset2", 68*4882a593Smuzhiyun "cpr_quotient_offset3", "cpr_init_voltage1", 69*4882a593Smuzhiyun "cpr_init_voltage2", "cpr_init_voltage3", "cpr_quotient1", 70*4882a593Smuzhiyun "cpr_quotient2", "cpr_quotient3", "cpr_ring_osc1", 71*4882a593Smuzhiyun "cpr_ring_osc2", "cpr_ring_osc3", "cpr_fuse_revision" 72*4882a593Smuzhiyun for qcs404. 73*4882a593Smuzhiyun 74*4882a593SmuzhiyunExample: 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun cpr_opp_table: cpr-opp-table { 77*4882a593Smuzhiyun compatible = "operating-points-v2-qcom-level"; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun cpr_opp1: opp1 { 80*4882a593Smuzhiyun opp-level = <1>; 81*4882a593Smuzhiyun qcom,opp-fuse-level = <1>; 82*4882a593Smuzhiyun }; 83*4882a593Smuzhiyun cpr_opp2: opp2 { 84*4882a593Smuzhiyun opp-level = <2>; 85*4882a593Smuzhiyun qcom,opp-fuse-level = <2>; 86*4882a593Smuzhiyun }; 87*4882a593Smuzhiyun cpr_opp3: opp3 { 88*4882a593Smuzhiyun opp-level = <3>; 89*4882a593Smuzhiyun qcom,opp-fuse-level = <3>; 90*4882a593Smuzhiyun }; 91*4882a593Smuzhiyun }; 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun power-controller@b018000 { 94*4882a593Smuzhiyun compatible = "qcom,qcs404-cpr", "qcom,cpr"; 95*4882a593Smuzhiyun reg = <0x0b018000 0x1000>; 96*4882a593Smuzhiyun interrupts = <0 15 IRQ_TYPE_EDGE_RISING>; 97*4882a593Smuzhiyun clocks = <&xo_board>; 98*4882a593Smuzhiyun clock-names = "ref"; 99*4882a593Smuzhiyun vdd-apc-supply = <&pms405_s3>; 100*4882a593Smuzhiyun #power-domain-cells = <0>; 101*4882a593Smuzhiyun operating-points-v2 = <&cpr_opp_table>; 102*4882a593Smuzhiyun acc-syscon = <&tcsr>; 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun nvmem-cells = <&cpr_efuse_quot_offset1>, 105*4882a593Smuzhiyun <&cpr_efuse_quot_offset2>, 106*4882a593Smuzhiyun <&cpr_efuse_quot_offset3>, 107*4882a593Smuzhiyun <&cpr_efuse_init_voltage1>, 108*4882a593Smuzhiyun <&cpr_efuse_init_voltage2>, 109*4882a593Smuzhiyun <&cpr_efuse_init_voltage3>, 110*4882a593Smuzhiyun <&cpr_efuse_quot1>, 111*4882a593Smuzhiyun <&cpr_efuse_quot2>, 112*4882a593Smuzhiyun <&cpr_efuse_quot3>, 113*4882a593Smuzhiyun <&cpr_efuse_ring1>, 114*4882a593Smuzhiyun <&cpr_efuse_ring2>, 115*4882a593Smuzhiyun <&cpr_efuse_ring3>, 116*4882a593Smuzhiyun <&cpr_efuse_revision>; 117*4882a593Smuzhiyun nvmem-cell-names = "cpr_quotient_offset1", 118*4882a593Smuzhiyun "cpr_quotient_offset2", 119*4882a593Smuzhiyun "cpr_quotient_offset3", 120*4882a593Smuzhiyun "cpr_init_voltage1", 121*4882a593Smuzhiyun "cpr_init_voltage2", 122*4882a593Smuzhiyun "cpr_init_voltage3", 123*4882a593Smuzhiyun "cpr_quotient1", 124*4882a593Smuzhiyun "cpr_quotient2", 125*4882a593Smuzhiyun "cpr_quotient3", 126*4882a593Smuzhiyun "cpr_ring_osc1", 127*4882a593Smuzhiyun "cpr_ring_osc2", 128*4882a593Smuzhiyun "cpr_ring_osc3", 129*4882a593Smuzhiyun "cpr_fuse_revision"; 130*4882a593Smuzhiyun }; 131