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