| # SPDX-License-Identifier: Apache-2.0 |
| # |
| # Copyright (C) 2016, ARM Limited and contributors. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); you may |
| # not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| from collections import OrderedDict |
| |
| from energy_model import (ActiveState, EnergyModelNode, EnergyModelRoot, |
| PowerDomain, EnergyModel) |
| |
| a53_cluster_active_states = OrderedDict([ |
| (450000, ActiveState(power=26)), |
| (575000, ActiveState(power=30)), |
| (700000, ActiveState(power=39)), |
| (775000, ActiveState(power=47)), |
| (850000, ActiveState(power=57)), |
| ]) |
| |
| # TODO warn if any of the idle states aren't represented by power domains |
| a53_cluster_idle_states = OrderedDict([ |
| ("WFI", 56), |
| ("cpu-sleep-0", 56), |
| ("cluster-sleep-0", 17), |
| ]) |
| |
| a53_cpu_active_states = OrderedDict([ |
| (450000, ActiveState(capacity=235, power=33)), |
| (575000, ActiveState(capacity=302, power=46)), |
| (700000, ActiveState(capacity=368, power=61)), |
| (775000, ActiveState(capacity=406, power=76)), |
| (850000, ActiveState(capacity=447, power=93)), |
| ]) |
| |
| a53_cpu_idle_states = OrderedDict([ |
| ("WFI", 6), |
| ("cpu-sleep-0", 0), |
| ("cluster-sleep-0", 0), |
| ]) |
| |
| a53s = [0, 3, 4, 5] |
| |
| def a53_cpu_node(cpu): |
| return EnergyModelNode(cpu=cpu, |
| active_states=a53_cpu_active_states, |
| idle_states=a53_cpu_idle_states) |
| |
| a57_cluster_active_states = OrderedDict([ |
| ( 450000, ActiveState(power=24)), |
| ( 625000, ActiveState(power=32)), |
| ( 800000, ActiveState(power=43)), |
| ( 950000, ActiveState(power=49)), |
| (1100000, ActiveState(power=64)), |
| ]) |
| |
| a57_cluster_idle_states = OrderedDict([ |
| ("WFI", 65), |
| ("cpu-sleep-0", 65), |
| ("cluster-sleep-0", 24), |
| ]) |
| |
| a57_cpu_active_states = OrderedDict([ |
| (450000, ActiveState(capacity=417, power=168)), |
| (625000, ActiveState(capacity=579, power=251)), |
| (800000, ActiveState(capacity=744, power=359)), |
| (950000, ActiveState(capacity=883, power=479)), |
| (1100000, ActiveState(capacity=1024, power=616)), |
| ]) |
| |
| a57_cpu_idle_states = OrderedDict([ |
| ("WFI", 15), |
| ("cpu-sleep-0", 0), |
| ("cluster-sleep-0", 0), |
| ]) |
| |
| a57s = [1, 2] |
| |
| def a57_cpu_node(cpu): |
| return EnergyModelNode(cpu=cpu, |
| active_states=a57_cpu_active_states, |
| idle_states=a57_cpu_idle_states) |
| |
| juno_energy = EnergyModel( |
| root_node=EnergyModelRoot( |
| children=[ |
| EnergyModelNode( |
| name="cluster_a53", |
| active_states=a53_cluster_active_states, |
| idle_states=a53_cluster_idle_states, |
| children=[a53_cpu_node(c) for c in a53s]), |
| EnergyModelNode( |
| name="cluster_a57", |
| active_states=a57_cluster_active_states, |
| idle_states=a57_cluster_idle_states, |
| children=[a57_cpu_node(c) for c in a57s])]), |
| root_power_domain=PowerDomain(idle_states=[], children=[ |
| PowerDomain( |
| idle_states=["cluster-sleep-0"], |
| children=[PowerDomain(idle_states=["WFI", "cpu-sleep-0"], cpu=c) |
| for c in a57s]), |
| PowerDomain( |
| idle_states=["cluster-sleep-0"], |
| children=[PowerDomain(idle_states=["WFI", "cpu-sleep-0"], cpu=c) |
| for c in a53s])]), |
| freq_domains=[a53s, a57s]) |