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