xref: /arm-trusted-firmware/docs/components/fconf/amu-bindings.rst (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700SchasingluluActivity Monitor Unit (AMU) Bindings
2*91f16700Schasinglulu====================================
3*91f16700Schasinglulu
4*91f16700SchasingluluTo support platform-defined Activity Monitor Unit (|AMU|) auxiliary counters
5*91f16700Schasingluluthrough FCONF, the ``HW_CONFIG`` device tree accepts several |AMU|-specific
6*91f16700Schasinglulunodes and properties.
7*91f16700Schasinglulu
8*91f16700SchasingluluBindings
9*91f16700Schasinglulu^^^^^^^^
10*91f16700Schasinglulu
11*91f16700Schasinglulu.. contents::
12*91f16700Schasinglulu    :local:
13*91f16700Schasinglulu
14*91f16700Schasinglulu``/cpus/cpus/cpu*`` node properties
15*91f16700Schasinglulu"""""""""""""""""""""""""""""""""""
16*91f16700Schasinglulu
17*91f16700SchasingluluThe ``cpu`` node has been augmented to support a handle to an associated |AMU|
18*91f16700Schasingluluview, which should describe the counters offered by the core.
19*91f16700Schasinglulu
20*91f16700Schasinglulu+---------------+-------+---------------+-------------------------------------+
21*91f16700Schasinglulu| Property name | Usage | Value type    | Description                         |
22*91f16700Schasinglulu+===============+=======+===============+=====================================+
23*91f16700Schasinglulu| ``amu``       | O     | ``<phandle>`` | If present, indicates that an |AMU| |
24*91f16700Schasinglulu|               |       |               | is available and its counters are   |
25*91f16700Schasinglulu|               |       |               | described by the node provided.     |
26*91f16700Schasinglulu+---------------+-------+---------------+-------------------------------------+
27*91f16700Schasinglulu
28*91f16700Schasinglulu``/cpus/amus`` node properties
29*91f16700Schasinglulu""""""""""""""""""""""""""""""
30*91f16700Schasinglulu
31*91f16700SchasingluluThe ``amus`` node describes the |AMUs| implemented by the cores in the system.
32*91f16700SchasingluluThis node does not have any properties.
33*91f16700Schasinglulu
34*91f16700Schasinglulu``/cpus/amus/amu*`` node properties
35*91f16700Schasinglulu"""""""""""""""""""""""""""""""""""
36*91f16700Schasinglulu
37*91f16700SchasingluluAn ``amu`` node describes the layout and meaning of the auxiliary counter
38*91f16700Schasingluluregisters of one or more |AMUs|, and may be shared by multiple cores.
39*91f16700Schasinglulu
40*91f16700Schasinglulu+--------------------+-------+------------+------------------------------------+
41*91f16700Schasinglulu| Property name      | Usage | Value type | Description                        |
42*91f16700Schasinglulu+====================+=======+============+====================================+
43*91f16700Schasinglulu| ``#address-cells`` | R     | ``<u32>``  | Value shall be 1. Specifies that   |
44*91f16700Schasinglulu|                    |       |            | the ``reg`` property array of      |
45*91f16700Schasinglulu|                    |       |            | children of this node uses a       |
46*91f16700Schasinglulu|                    |       |            | single cell.                       |
47*91f16700Schasinglulu+--------------------+-------+------------+------------------------------------+
48*91f16700Schasinglulu| ``#size-cells``    | R     | ``<u32>``  | Value shall be 0. Specifies that   |
49*91f16700Schasinglulu|                    |       |            | no size is required in the ``reg`` |
50*91f16700Schasinglulu|                    |       |            | property in children of this node. |
51*91f16700Schasinglulu+--------------------+-------+------------+------------------------------------+
52*91f16700Schasinglulu
53*91f16700Schasinglulu``/cpus/amus/amu*/counter*`` node properties
54*91f16700Schasinglulu""""""""""""""""""""""""""""""""""""""""""""
55*91f16700Schasinglulu
56*91f16700SchasingluluA ``counter`` node describes an auxiliary counter belonging to the parent |AMU|
57*91f16700Schasingluluview.
58*91f16700Schasinglulu
59*91f16700Schasinglulu+-------------------+-------+-------------+------------------------------------+
60*91f16700Schasinglulu| Property name     | Usage | Value type  | Description                        |
61*91f16700Schasinglulu+===================+=======+=============+====================================+
62*91f16700Schasinglulu| ``reg``           | R     | array       | Represents the counter register    |
63*91f16700Schasinglulu|                   |       |             | index, and must be a single cell.  |
64*91f16700Schasinglulu+-------------------+-------+-------------+------------------------------------+
65*91f16700Schasinglulu| ``enable-at-el3`` | O     | ``<empty>`` | The presence of this property      |
66*91f16700Schasinglulu|                   |       |             | indicates that this counter should |
67*91f16700Schasinglulu|                   |       |             | be enabled prior to EL3 exit.      |
68*91f16700Schasinglulu+-------------------+-------+-------------+------------------------------------+
69*91f16700Schasinglulu
70*91f16700SchasingluluExample
71*91f16700Schasinglulu^^^^^^^
72*91f16700Schasinglulu
73*91f16700SchasingluluAn example system offering four cores made up of two clusters, where the cores
74*91f16700Schasingluluof each cluster share different |AMUs|, may use something like the following:
75*91f16700Schasinglulu
76*91f16700Schasinglulu.. code-block::
77*91f16700Schasinglulu
78*91f16700Schasinglulu    cpus {
79*91f16700Schasinglulu        #address-cells = <2>;
80*91f16700Schasinglulu        #size-cells = <0>;
81*91f16700Schasinglulu
82*91f16700Schasinglulu        amus {
83*91f16700Schasinglulu            amu0: amu-0 {
84*91f16700Schasinglulu                #address-cells = <1>;
85*91f16700Schasinglulu                #size-cells = <0>;
86*91f16700Schasinglulu
87*91f16700Schasinglulu                counterX: counter@0 {
88*91f16700Schasinglulu                    reg = <0>;
89*91f16700Schasinglulu
90*91f16700Schasinglulu                    enable-at-el3;
91*91f16700Schasinglulu                };
92*91f16700Schasinglulu
93*91f16700Schasinglulu                counterY: counter@1 {
94*91f16700Schasinglulu                    reg = <1>;
95*91f16700Schasinglulu
96*91f16700Schasinglulu                    enable-at-el3;
97*91f16700Schasinglulu                };
98*91f16700Schasinglulu            };
99*91f16700Schasinglulu
100*91f16700Schasinglulu            amu1: amu-1 {
101*91f16700Schasinglulu                #address-cells = <1>;
102*91f16700Schasinglulu                #size-cells = <0>;
103*91f16700Schasinglulu
104*91f16700Schasinglulu                counterZ: counter@0 {
105*91f16700Schasinglulu                    reg = <0>;
106*91f16700Schasinglulu
107*91f16700Schasinglulu                    enable-at-el3;
108*91f16700Schasinglulu                };
109*91f16700Schasinglulu            };
110*91f16700Schasinglulu        };
111*91f16700Schasinglulu
112*91f16700Schasinglulu        cpu0@00000 {
113*91f16700Schasinglulu            ...
114*91f16700Schasinglulu
115*91f16700Schasinglulu            amu = <&amu0>;
116*91f16700Schasinglulu        };
117*91f16700Schasinglulu
118*91f16700Schasinglulu        cpu1@00100 {
119*91f16700Schasinglulu            ...
120*91f16700Schasinglulu
121*91f16700Schasinglulu            amu = <&amu0>;
122*91f16700Schasinglulu        };
123*91f16700Schasinglulu
124*91f16700Schasinglulu        cpu2@10000 {
125*91f16700Schasinglulu            ...
126*91f16700Schasinglulu
127*91f16700Schasinglulu            amu = <&amu1>;
128*91f16700Schasinglulu        };
129*91f16700Schasinglulu
130*91f16700Schasinglulu        cpu3@10100 {
131*91f16700Schasinglulu            ...
132*91f16700Schasinglulu
133*91f16700Schasinglulu            amu = <&amu1>;
134*91f16700Schasinglulu        };
135*91f16700Schasinglulu    }
136*91f16700Schasinglulu
137*91f16700SchasingluluIn this situation, ``cpu0`` and ``cpu1`` (the two cores in the first cluster),
138*91f16700Schasinglulushare the view of their AMUs defined by ``amu0``. Likewise, ``cpu2`` and
139*91f16700Schasinglulu``cpu3`` (the two cores in the second cluster), share the view of their |AMUs|
140*91f16700Schasingluludefined by ``amu1``. This will cause ``counterX`` and ``counterY`` to be enabled
141*91f16700Schasinglulufor both ``cpu0`` and ``cpu1``, and ``counterZ`` to be enabled for both ``cpu2``
142*91f16700Schasingluluand ``cpu3``.
143