cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

opp-v2.yaml (13898B)


      1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
      2%YAML 1.2
      3---
      4$id: http://devicetree.org/schemas/opp/opp-v2.yaml#
      5$schema: http://devicetree.org/meta-schemas/core.yaml#
      6
      7title: Generic OPP (Operating Performance Points) Bindings
      8
      9maintainers:
     10  - Viresh Kumar <viresh.kumar@linaro.org>
     11
     12allOf:
     13  - $ref: opp-v2-base.yaml#
     14
     15properties:
     16  compatible:
     17    const: operating-points-v2
     18
     19unevaluatedProperties: false
     20
     21examples:
     22  - |
     23    /*
     24     * Example 1: Single cluster Dual-core ARM cortex A9, switch DVFS states
     25     * together.
     26     */
     27    cpus {
     28        #address-cells = <1>;
     29        #size-cells = <0>;
     30
     31        cpu@0 {
     32            compatible = "arm,cortex-a9";
     33            device_type = "cpu";
     34            reg = <0>;
     35            next-level-cache = <&L2>;
     36            clocks = <&clk_controller 0>;
     37            clock-names = "cpu";
     38            cpu-supply = <&cpu_supply0>;
     39            operating-points-v2 = <&cpu0_opp_table0>;
     40        };
     41
     42        cpu@1 {
     43            compatible = "arm,cortex-a9";
     44            device_type = "cpu";
     45            reg = <1>;
     46            next-level-cache = <&L2>;
     47            clocks = <&clk_controller 0>;
     48            clock-names = "cpu";
     49            cpu-supply = <&cpu_supply0>;
     50            operating-points-v2 = <&cpu0_opp_table0>;
     51        };
     52    };
     53
     54    cpu0_opp_table0: opp-table {
     55        compatible = "operating-points-v2";
     56        opp-shared;
     57
     58        opp-1000000000 {
     59            opp-hz = /bits/ 64 <1000000000>;
     60            opp-microvolt = <975000 970000 985000>;
     61            opp-microamp = <70000>;
     62            clock-latency-ns = <300000>;
     63            opp-suspend;
     64        };
     65        opp-1100000000 {
     66            opp-hz = /bits/ 64 <1100000000>;
     67            opp-microvolt = <1000000 980000 1010000>;
     68            opp-microamp = <80000>;
     69            clock-latency-ns = <310000>;
     70        };
     71        opp-1200000000 {
     72            opp-hz = /bits/ 64 <1200000000>;
     73            opp-microvolt = <1025000>;
     74            clock-latency-ns = <290000>;
     75            turbo-mode;
     76        };
     77    };
     78
     79  - |
     80    /*
     81     * Example 2: Single cluster, Quad-core Qualcom-krait, switches DVFS states
     82     * independently.
     83     */
     84    cpus {
     85        #address-cells = <1>;
     86        #size-cells = <0>;
     87
     88        cpu@0 {
     89            compatible = "qcom,krait";
     90            device_type = "cpu";
     91            reg = <0>;
     92            next-level-cache = <&L2>;
     93            clocks = <&clk_controller 0>;
     94            clock-names = "cpu";
     95            cpu-supply = <&cpu_supply0>;
     96            operating-points-v2 = <&cpu_opp_table>;
     97        };
     98
     99        cpu@1 {
    100            compatible = "qcom,krait";
    101            device_type = "cpu";
    102            reg = <1>;
    103            next-level-cache = <&L2>;
    104            clocks = <&clk_controller 1>;
    105            clock-names = "cpu";
    106            cpu-supply = <&cpu_supply1>;
    107            operating-points-v2 = <&cpu_opp_table>;
    108        };
    109
    110        cpu@2 {
    111            compatible = "qcom,krait";
    112            device_type = "cpu";
    113            reg = <2>;
    114            next-level-cache = <&L2>;
    115            clocks = <&clk_controller 2>;
    116            clock-names = "cpu";
    117            cpu-supply = <&cpu_supply2>;
    118            operating-points-v2 = <&cpu_opp_table>;
    119        };
    120
    121        cpu@3 {
    122            compatible = "qcom,krait";
    123            device_type = "cpu";
    124            reg = <3>;
    125            next-level-cache = <&L2>;
    126            clocks = <&clk_controller 3>;
    127            clock-names = "cpu";
    128            cpu-supply = <&cpu_supply3>;
    129            operating-points-v2 = <&cpu_opp_table>;
    130        };
    131    };
    132
    133    cpu_opp_table: opp-table {
    134        compatible = "operating-points-v2";
    135
    136        /*
    137         * Missing opp-shared property means CPUs switch DVFS states
    138         * independently.
    139         */
    140
    141        opp-1000000000 {
    142            opp-hz = /bits/ 64 <1000000000>;
    143            opp-microvolt = <975000 970000 985000>;
    144            opp-microamp = <70000>;
    145            clock-latency-ns = <300000>;
    146            opp-suspend;
    147        };
    148        opp-1100000000 {
    149            opp-hz = /bits/ 64 <1100000000>;
    150            opp-microvolt = <1000000 980000 1010000>;
    151            opp-microamp = <80000>;
    152            clock-latency-ns = <310000>;
    153        };
    154        opp-1200000000 {
    155            opp-hz = /bits/ 64 <1200000000>;
    156            opp-microvolt = <1025000>;
    157            opp-microamp = <90000>;
    158            lock-latency-ns = <290000>;
    159            turbo-mode;
    160        };
    161    };
    162
    163  - |
    164    /*
    165     * Example 3: Dual-cluster, Dual-core per cluster. CPUs within a cluster switch
    166     * DVFS state together.
    167     */
    168    cpus {
    169        #address-cells = <1>;
    170        #size-cells = <0>;
    171
    172        cpu@0 {
    173            compatible = "arm,cortex-a7";
    174            device_type = "cpu";
    175            reg = <0>;
    176            next-level-cache = <&L2>;
    177            clocks = <&clk_controller 0>;
    178            clock-names = "cpu";
    179            cpu-supply = <&cpu_supply0>;
    180            operating-points-v2 = <&cluster0_opp>;
    181        };
    182
    183        cpu@1 {
    184            compatible = "arm,cortex-a7";
    185            device_type = "cpu";
    186            reg = <1>;
    187            next-level-cache = <&L2>;
    188            clocks = <&clk_controller 0>;
    189            clock-names = "cpu";
    190            cpu-supply = <&cpu_supply0>;
    191            operating-points-v2 = <&cluster0_opp>;
    192        };
    193
    194        cpu@100 {
    195            compatible = "arm,cortex-a15";
    196            device_type = "cpu";
    197            reg = <100>;
    198            next-level-cache = <&L2>;
    199            clocks = <&clk_controller 1>;
    200            clock-names = "cpu";
    201            cpu-supply = <&cpu_supply1>;
    202            operating-points-v2 = <&cluster1_opp>;
    203        };
    204
    205        cpu@101 {
    206            compatible = "arm,cortex-a15";
    207            device_type = "cpu";
    208            reg = <101>;
    209            next-level-cache = <&L2>;
    210            clocks = <&clk_controller 1>;
    211            clock-names = "cpu";
    212            cpu-supply = <&cpu_supply1>;
    213            operating-points-v2 = <&cluster1_opp>;
    214        };
    215    };
    216
    217    cluster0_opp: opp-table-0 {
    218        compatible = "operating-points-v2";
    219        opp-shared;
    220
    221        opp-1000000000 {
    222            opp-hz = /bits/ 64 <1000000000>;
    223            opp-microvolt = <975000 970000 985000>;
    224            opp-microamp = <70000>;
    225            clock-latency-ns = <300000>;
    226            opp-suspend;
    227        };
    228        opp-1100000000 {
    229            opp-hz = /bits/ 64 <1100000000>;
    230            opp-microvolt = <1000000 980000 1010000>;
    231            opp-microamp = <80000>;
    232            clock-latency-ns = <310000>;
    233        };
    234        opp-1200000000 {
    235            opp-hz = /bits/ 64 <1200000000>;
    236            opp-microvolt = <1025000>;
    237            opp-microamp = <90000>;
    238            clock-latency-ns = <290000>;
    239            turbo-mode;
    240        };
    241    };
    242
    243    cluster1_opp: opp-table-1 {
    244        compatible = "operating-points-v2";
    245        opp-shared;
    246
    247        opp-1300000000 {
    248            opp-hz = /bits/ 64 <1300000000>;
    249            opp-microvolt = <1050000 1045000 1055000>;
    250            opp-microamp = <95000>;
    251            clock-latency-ns = <400000>;
    252            opp-suspend;
    253        };
    254        opp-1400000000 {
    255            opp-hz = /bits/ 64 <1400000000>;
    256            opp-microvolt = <1075000>;
    257            opp-microamp = <100000>;
    258            clock-latency-ns = <400000>;
    259        };
    260        opp-1500000000 {
    261            opp-hz = /bits/ 64 <1500000000>;
    262            opp-microvolt = <1100000 1010000 1110000>;
    263            opp-microamp = <95000>;
    264            clock-latency-ns = <400000>;
    265            turbo-mode;
    266        };
    267    };
    268
    269  - |
    270    /* Example 4: Handling multiple regulators */
    271    cpus {
    272        #address-cells = <1>;
    273        #size-cells = <0>;
    274
    275        cpu@0 {
    276            compatible = "foo,cpu-type";
    277            device_type = "cpu";
    278            reg = <0>;
    279
    280            vcc0-supply = <&cpu_supply0>;
    281            vcc1-supply = <&cpu_supply1>;
    282            vcc2-supply = <&cpu_supply2>;
    283            operating-points-v2 = <&cpu0_opp_table4>;
    284        };
    285    };
    286
    287    cpu0_opp_table4: opp-table-0 {
    288        compatible = "operating-points-v2";
    289        opp-shared;
    290
    291        opp-1000000000 {
    292            opp-hz = /bits/ 64 <1000000000>;
    293            opp-microvolt = <970000>, /* Supply 0 */
    294                            <960000>, /* Supply 1 */
    295                            <960000>; /* Supply 2 */
    296            opp-microamp =  <70000>,  /* Supply 0 */
    297                            <70000>,  /* Supply 1 */
    298                            <70000>;  /* Supply 2 */
    299            clock-latency-ns = <300000>;
    300        };
    301
    302        /* OR */
    303
    304        opp-1000000001 {
    305            opp-hz = /bits/ 64 <1000000001>;
    306            opp-microvolt = <975000 970000 985000>, /* Supply 0 */
    307                            <965000 960000 975000>, /* Supply 1 */
    308                            <965000 960000 975000>; /* Supply 2 */
    309            opp-microamp =  <70000>,    /* Supply 0 */
    310                <70000>,    /* Supply 1 */
    311                <70000>;    /* Supply 2 */
    312            clock-latency-ns = <300000>;
    313        };
    314
    315        /* OR */
    316
    317        opp-1000000002 {
    318            opp-hz = /bits/ 64 <1000000002>;
    319            opp-microvolt = <975000 970000 985000>, /* Supply 0 */
    320                <965000 960000 975000>, /* Supply 1 */
    321                <965000 960000 975000>; /* Supply 2 */
    322            opp-microamp =  <70000>,    /* Supply 0 */
    323                <0>,      /* Supply 1 doesn't need this */
    324                <70000>;    /* Supply 2 */
    325            clock-latency-ns = <300000>;
    326        };
    327    };
    328
    329  - |
    330    /*
    331     * Example 5: opp-supported-hw
    332     * (example: three level hierarchy of versions: cuts, substrate and process)
    333     */
    334    cpus {
    335        #address-cells = <1>;
    336        #size-cells = <0>;
    337
    338        cpu@0 {
    339            compatible = "arm,cortex-a7";
    340            device_type = "cpu";
    341            reg = <0>;
    342            cpu-supply = <&cpu_supply>;
    343            operating-points-v2 = <&cpu0_opp_table_slow>;
    344        };
    345    };
    346
    347    cpu0_opp_table_slow: opp-table {
    348        compatible = "operating-points-v2";
    349        opp-shared;
    350
    351        opp-600000000 {
    352            /*
    353             * Supports all substrate and process versions for 0xF
    354             * cuts, i.e. only first four cuts.
    355             */
    356            opp-supported-hw = <0xF 0xFFFFFFFF 0xFFFFFFFF>;
    357            opp-hz = /bits/ 64 <600000000>;
    358        };
    359
    360        opp-800000000 {
    361            /*
    362             * Supports:
    363             * - cuts: only one, 6th cut (represented by 6th bit).
    364             * - substrate: supports 16 different substrate versions
    365             * - process: supports 9 different process versions
    366             */
    367            opp-supported-hw = <0x20 0xff0000ff 0x0000f4f0>;
    368            opp-hz = /bits/ 64 <800000000>;
    369        };
    370
    371        opp-900000000 {
    372            /*
    373             * Supports:
    374             * - All cuts and substrate where process version is 0x2.
    375             * - All cuts and process where substrate version is 0x2.
    376             */
    377            opp-supported-hw = <0xFFFFFFFF 0xFFFFFFFF 0x02>,
    378                               <0xFFFFFFFF 0x01 0xFFFFFFFF>;
    379            opp-hz = /bits/ 64 <900000000>;
    380        };
    381    };
    382
    383  - |
    384    /*
    385     * Example 6: opp-microvolt-<name>, opp-microamp-<name>:
    386     * (example: device with two possible microvolt ranges: slow and fast)
    387     */
    388    cpus {
    389        #address-cells = <1>;
    390        #size-cells = <0>;
    391
    392        cpu@0 {
    393            compatible = "arm,cortex-a7";
    394            device_type = "cpu";
    395            reg = <0>;
    396            operating-points-v2 = <&cpu0_opp_table6>;
    397        };
    398    };
    399
    400    cpu0_opp_table6: opp-table-0 {
    401        compatible = "operating-points-v2";
    402        opp-shared;
    403
    404        opp-1000000000 {
    405            opp-hz = /bits/ 64 <1000000000>;
    406            opp-microvolt-slow = <915000 900000 925000>;
    407            opp-microvolt-fast = <975000 970000 985000>;
    408            opp-microamp-slow =  <70000>;
    409            opp-microamp-fast =  <71000>;
    410        };
    411
    412        opp-1200000000 {
    413            opp-hz = /bits/ 64 <1200000000>;
    414            opp-microvolt-slow = <915000 900000 925000>, /* Supply vcc0 */
    415                                 <925000 910000 935000>; /* Supply vcc1 */
    416            opp-microvolt-fast = <975000 970000 985000>, /* Supply vcc0 */
    417                                 <965000 960000 975000>; /* Supply vcc1 */
    418            opp-microamp =  <70000>; /* Will be used for both slow/fast */
    419        };
    420    };
    421
    422  - |
    423    /*
    424     * Example 7: Single cluster Quad-core ARM cortex A53, OPP points from firmware,
    425     * distinct clock controls but two sets of clock/voltage/current lines.
    426     */
    427    cpus {
    428        #address-cells = <2>;
    429        #size-cells = <0>;
    430
    431        cpu@0 {
    432            compatible = "arm,cortex-a53";
    433            device_type = "cpu";
    434            reg = <0x0 0x100>;
    435            next-level-cache = <&A53_L2>;
    436            clocks = <&dvfs_controller 0>;
    437            operating-points-v2 = <&cpu_opp0_table>;
    438        };
    439        cpu@1 {
    440            compatible = "arm,cortex-a53";
    441            device_type = "cpu";
    442            reg = <0x0 0x101>;
    443            next-level-cache = <&A53_L2>;
    444            clocks = <&dvfs_controller 1>;
    445            operating-points-v2 = <&cpu_opp0_table>;
    446        };
    447        cpu@2 {
    448            compatible = "arm,cortex-a53";
    449            device_type = "cpu";
    450            reg = <0x0 0x102>;
    451            next-level-cache = <&A53_L2>;
    452            clocks = <&dvfs_controller 2>;
    453            operating-points-v2 = <&cpu_opp1_table>;
    454        };
    455        cpu@3 {
    456            compatible = "arm,cortex-a53";
    457            device_type = "cpu";
    458            reg = <0x0 0x103>;
    459            next-level-cache = <&A53_L2>;
    460            clocks = <&dvfs_controller 3>;
    461            operating-points-v2 = <&cpu_opp1_table>;
    462        };
    463
    464    };
    465
    466    cpu_opp0_table: opp-table-0 {
    467        compatible = "operating-points-v2";
    468        opp-shared;
    469    };
    470
    471    cpu_opp1_table: opp-table-1 {
    472        compatible = "operating-points-v2";
    473        opp-shared;
    474    };
    475...