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#
17from energy_model import (ActiveState, EnergyModelNode, EnergyModelRoot,
18                          PowerDomain, EnergyModel)
19
20from collections import OrderedDict
21
22cluster_active_states = OrderedDict([
23    ( 208000, ActiveState(capacity=178, power=16)),
24    ( 432000, ActiveState(capacity=369, power=29)),
25    ( 729000, ActiveState(capacity=622, power=47)),
26    ( 960000, ActiveState(capacity=819, power=75)),
27    (1200000, ActiveState(capacity=1024, power=112))
28])
29
30cluster_idle_states = OrderedDict([
31    ('WFI', 47),
32    ('cpu-sleep', 47),
33    ('cluster-sleep', 0)
34])
35
36cpu_active_states = OrderedDict([
37    ( 208000,  ActiveState(capacity=178,  power=69)),
38    ( 432000,  ActiveState(capacity=369,  power=124)),
39    ( 729000,  ActiveState(capacity=622,  power=224)),
40    ( 960000,  ActiveState(capacity=819,  power=367)),
41    (1200000, ActiveState(capacity=1024, power=670))
42])
43
44cpu_idle_states = OrderedDict([
45    ('WFI', 15), ('cpu-sleep', 0), ('cluster-sleep', 0)
46])
47
48def cpu_pd(cpu):
49    return PowerDomain(cpu=cpu, idle_states=['WFI', 'cpu-sleep'])
50
51def cpu_node(cpu):
52    return EnergyModelNode(cpu=cpu,
53                           active_states=cpu_active_states,
54                           idle_states=cpu_idle_states)
55hikey_energy = EnergyModel(
56    root_node=EnergyModelRoot(children=[
57        EnergyModelNode(name='cluster0',
58                        children=[cpu_node(c) for c in [0, 1, 2, 3]],
59                        active_states=cluster_active_states,
60                        idle_states=cluster_idle_states),
61        EnergyModelNode(name='cluster1',
62                        children=[cpu_node(c) for c in [4, 5, 6, 7]],
63                        active_states=cluster_active_states,
64                        idle_states=cluster_idle_states)]),
65    root_power_domain=PowerDomain(idle_states=[], children=[
66        PowerDomain(idle_states=["cluster-sleep"], children=[
67            cpu_pd(c) for c in [0, 1, 2, 3]]),
68        PowerDomain(idle_states=["cluster-sleep"], children=[
69            cpu_pd(c) for c in [4, 5, 6, 7]])]),
70    freq_domains=[[0, 1, 2, 3, 4, 5, 6, 7]])
71