# 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=1023, 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])