Home | History | Annotate | Download | only in platforms
      1 # SPDX-License-Identifier: Apache-2.0
      2 #
      3 # Copyright (C) 2016, ARM Limited and contributors.
      4 #
      5 # Licensed under the Apache License, Version 2.0 (the "License"); you may
      6 # not use this file except in compliance with the License.
      7 # You may obtain a copy of the License at
      8 #
      9 # http://www.apache.org/licenses/LICENSE-2.0
     10 #
     11 # Unless required by applicable law or agreed to in writing, software
     12 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     13 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 # See the License for the specific language governing permissions and
     15 # limitations under the License.
     16 #
     17 from energy_model import (ActiveState, EnergyModelNode, EnergyModelRoot,
     18                           PowerDomain, EnergyModel)
     19 
     20 from collections import OrderedDict
     21 
     22 silver_cpu_active_states = OrderedDict([
     23     ( 307200, ActiveState(capacity=149, power=90)),
     24     ( 384000, ActiveState(capacity=188, power=111)),
     25     ( 460800, ActiveState(capacity=225, power=133)),
     26     ( 537600, ActiveState(capacity=257, power=160)),
     27     ( 614400, ActiveState(capacity=281, power=182)),
     28     ( 691200, ActiveState(capacity=315, power=210)),
     29     ( 768000, ActiveState(capacity=368, power=251)),
     30     ( 844800, ActiveState(capacity=406, power=306)),
     31     ( 902400, ActiveState(capacity=428, power=332)),
     32     ( 979200, ActiveState(capacity=469, power=379)),
     33     (1056000, ActiveState(capacity=502, power=438)),
     34     (1132800, ActiveState(capacity=538, power=494)),
     35     (1209600, ActiveState(capacity=581, power=550)),
     36     (1286400, ActiveState(capacity=611, power=613)),
     37     (1363200, ActiveState(capacity=648, power=670)),
     38     (1440000, ActiveState(capacity=684, power=752)),
     39     (1516800, ActiveState(capacity=729, power=848)),
     40     (1593600, ActiveState(capacity=763, power=925)),
     41 ])
     42 
     43 silver_cluster_active_states = OrderedDict([
     44     ( 307200, ActiveState(power=4)),
     45     ( 384000, ActiveState(power=4)),
     46     ( 460800, ActiveState(power=4)),
     47     ( 537600, ActiveState(power=4)),
     48     ( 614400, ActiveState(power=4)),
     49     ( 691200, ActiveState(power=4)),
     50     ( 768000, ActiveState(power=8)),
     51     ( 844800, ActiveState(power=9)),
     52     ( 902400, ActiveState(power=15)),
     53     ( 979200, ActiveState(power=16)),
     54     (1056000, ActiveState(power=21)),
     55     (1132800, ActiveState(power=22)),
     56     (1209600, ActiveState(power=29)),
     57     (1286400, ActiveState(power=32)),
     58     (1363200, ActiveState(power=42)),
     59     (1440000, ActiveState(power=49)),
     60     # This power value is 41 (invalid!) in the released kernel. Patch it to
     61     # avoid errors.
     62     (1516800, ActiveState(power=52)),
     63     (1593600, ActiveState(power=52)),
     64 ])
     65 
     66 gold_cpu_active_states = OrderedDict([
     67     ( 307200, ActiveState(capacity=149, power=93)),
     68     ( 384000, ActiveState(capacity=188, power=111)),
     69     ( 460800, ActiveState(capacity=225, power=133)),
     70     ( 537600, ActiveState(capacity=257, power=160)),
     71     ( 614400, ActiveState(capacity=281, power=182)),
     72     ( 691200, ActiveState(capacity=315, power=210)),
     73     ( 748800, ActiveState(capacity=348, power=252)),
     74     ( 825600, ActiveState(capacity=374, power=290)),
     75     ( 902400, ActiveState(capacity=428, power=332)),
     76     ( 979200, ActiveState(capacity=469, power=379)),
     77     (1056000, ActiveState(capacity=502, power=438)),
     78     (1132800, ActiveState(capacity=538, power=494)),
     79     (1209600, ActiveState(capacity=581, power=550)),
     80     (1286400, ActiveState(capacity=611, power=613)),
     81     (1363200, ActiveState(capacity=648, power=670)),
     82     (1440000, ActiveState(capacity=684, power=752)),
     83     (1516800, ActiveState(capacity=729, power=848)),
     84     (1593600, ActiveState(capacity=763, power=925)),
     85     (1670400, ActiveState(capacity=795, power=1018)),
     86     (1747200, ActiveState(capacity=832, power=1073)),
     87     (1824000, ActiveState(capacity=868, power=1209)),
     88     (1900800, ActiveState(capacity=905, power=1298)),
     89     (1977600, ActiveState(capacity=952, power=1428)),
     90     (2054400, ActiveState(capacity=979, power=1521)),
     91     (2150400, ActiveState(capacity=1024, power=1715)),
     92 ])
     93 
     94 gold_cluster_active_states = OrderedDict([
     95     ( 307200, ActiveState(power=4)),
     96     ( 384000, ActiveState(power=4)),
     97     ( 460800, ActiveState(power=4)),
     98     ( 537600, ActiveState(power=4)),
     99     ( 614400, ActiveState(power=4)),
    100     ( 691200, ActiveState(power=4)),
    101     ( 748800, ActiveState(power=7)),
    102     ( 825600, ActiveState(power=10)),
    103     ( 902400, ActiveState(power=15)),
    104     ( 979200, ActiveState(power=16)),
    105     (1056000, ActiveState(power=21)),
    106     (1132800, ActiveState(power=22)),
    107     (1209600, ActiveState(power=29)),
    108     (1286400, ActiveState(power=32)),
    109     (1363200, ActiveState(power=42)),
    110     (1440000, ActiveState(power=49)),
    111     # This power value is 41 (invalid!) in the released kernel. Patch it to
    112     # avoid errors.
    113     (1516800, ActiveState(power=52)),
    114     (1593600, ActiveState(power=52)),
    115     (1670400, ActiveState(power=62)),
    116     (1747200, ActiveState(power=69)),
    117     (1824000, ActiveState(power=75)),
    118     (1900800, ActiveState(power=81)),
    119     (1977600, ActiveState(power=90)),
    120     (2054400, ActiveState(power=93)),
    121     (2150400, ActiveState(power=96)),
    122 ])
    123 
    124 # TODO warn if any of the idle states aren't represented by power domains
    125 cpu_idle_states = OrderedDict([
    126     ("WFI",               2),
    127     ("cpu-sleep-0",       0),
    128     ("cluster-sleep-0",   0),
    129 ])
    130 
    131 cluster_idle_states = OrderedDict([
    132     ("WFI",               0),
    133     ("cpu-sleep-0",       0),
    134     ("cluster-sleep-0",   0),
    135 ])
    136 
    137 silvers = [0, 1]
    138 golds = [2, 3]
    139 
    140 def silver_cpu_node(cpu):
    141     return EnergyModelNode(cpu=cpu,
    142                            active_states=silver_cpu_active_states,
    143                            idle_states=cpu_idle_states)
    144 
    145 def gold_cpu_node(cpu):
    146     return EnergyModelNode(cpu=cpu,
    147                            active_states=gold_cpu_active_states,
    148                            idle_states=cpu_idle_states)
    149 
    150 def cpu_pd(cpu):
    151     return PowerDomain(cpu=cpu, idle_states=["WFI", "cpu-sleep-0"])
    152 
    153 pixel_energy = EnergyModel(
    154     root_node=EnergyModelRoot(children=[
    155         EnergyModelNode(name='cluster_silver',
    156                         children=[silver_cpu_node(c) for c in silvers],
    157                         active_states=silver_cluster_active_states,
    158                         idle_states=cluster_idle_states),
    159         EnergyModelNode(name='cluster_gold',
    160                         children=[gold_cpu_node(c) for c in golds],
    161                         active_states=gold_cluster_active_states,
    162                         idle_states=cluster_idle_states)]),
    163     root_power_domain=PowerDomain(idle_states=[], children=[
    164         PowerDomain(idle_states=['cluster-sleep-0'], children=[
    165             cpu_pd(c) for c in silvers]),
    166         PowerDomain(idle_states=['cluster-sleep-0'], children=[
    167             cpu_pd(c) for c in golds])]),
    168     freq_domains=[silvers, golds])
    169