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