162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/devfreq/event/samsung,exynos-ppmu.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Samsung Exynos SoC PPMU (Platform Performance Monitoring Unit)
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Chanwoo Choi <cw00.choi@samsung.com>
1162306a36Sopenharmony_ci  - Krzysztof Kozlowski <krzk@kernel.org>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cidescription: |
1462306a36Sopenharmony_ci  The Samsung Exynos SoC has PPMU (Platform Performance Monitoring Unit) for
1562306a36Sopenharmony_ci  each IP. PPMU provides the primitive values to get performance data. These
1662306a36Sopenharmony_ci  PPMU events provide information of the SoC's behaviors so that you may use to
1762306a36Sopenharmony_ci  analyze system performance, to make behaviors visible and to count usages of
1862306a36Sopenharmony_ci  each IP (DMC, CPU, RIGHTBUS, LEFTBUS, CAM interface, LCD, G3D, MFC).  The
1962306a36Sopenharmony_ci  Exynos PPMU driver uses the devfreq-event class to provide event data to
2062306a36Sopenharmony_ci  various devfreq devices. The devfreq devices would use the event data when
2162306a36Sopenharmony_ci  determining the current state of each IP.
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ciproperties:
2462306a36Sopenharmony_ci  compatible:
2562306a36Sopenharmony_ci    enum:
2662306a36Sopenharmony_ci      - samsung,exynos-ppmu
2762306a36Sopenharmony_ci      - samsung,exynos-ppmu-v2
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci  clock-names:
3062306a36Sopenharmony_ci    items:
3162306a36Sopenharmony_ci      - const: ppmu
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci  clocks:
3462306a36Sopenharmony_ci    maxItems: 1
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci  reg:
3762306a36Sopenharmony_ci    maxItems: 1
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci  events:
4062306a36Sopenharmony_ci    type: object
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci    patternProperties:
4362306a36Sopenharmony_ci      '^ppmu-event[0-9]+(-[a-z0-9]+){,2}$':
4462306a36Sopenharmony_ci        type: object
4562306a36Sopenharmony_ci        properties:
4662306a36Sopenharmony_ci          event-name:
4762306a36Sopenharmony_ci            description: |
4862306a36Sopenharmony_ci              The unique event name among PPMU device
4962306a36Sopenharmony_ci            $ref: /schemas/types.yaml#/definitions/string
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci          event-data-type:
5262306a36Sopenharmony_ci            description: |
5362306a36Sopenharmony_ci              Define the type of data which shell be counted by the counter.
5462306a36Sopenharmony_ci              You can check include/dt-bindings/pmu/exynos_ppmu.h for all
5562306a36Sopenharmony_ci              possible type, i.e. count read requests, count write data in
5662306a36Sopenharmony_ci              bytes, etc.  This field is optional and when it is missing, the
5762306a36Sopenharmony_ci              driver code will use default data type.
5862306a36Sopenharmony_ci            $ref: /schemas/types.yaml#/definitions/uint32
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci        required:
6162306a36Sopenharmony_ci          - event-name
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci        additionalProperties: false
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci    additionalProperties: false
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_cirequired:
6862306a36Sopenharmony_ci  - compatible
6962306a36Sopenharmony_ci  - reg
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ciadditionalProperties: false
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ciexamples:
7462306a36Sopenharmony_ci  - |
7562306a36Sopenharmony_ci    // PPMUv1 nodes for Exynos3250 (although the board DTS defines events)
7662306a36Sopenharmony_ci    #include <dt-bindings/clock/exynos3250.h>
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci    ppmu_dmc0: ppmu@106a0000 {
7962306a36Sopenharmony_ci        compatible = "samsung,exynos-ppmu";
8062306a36Sopenharmony_ci        reg = <0x106a0000 0x2000>;
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci        events {
8362306a36Sopenharmony_ci            ppmu_dmc0_3: ppmu-event3-dmc0 {
8462306a36Sopenharmony_ci                event-name = "ppmu-event3-dmc0";
8562306a36Sopenharmony_ci            };
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci            ppmu_dmc0_2: ppmu-event2-dmc0 {
8862306a36Sopenharmony_ci                event-name = "ppmu-event2-dmc0";
8962306a36Sopenharmony_ci            };
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci            ppmu_dmc0_1: ppmu-event1-dmc0 {
9262306a36Sopenharmony_ci                event-name = "ppmu-event1-dmc0";
9362306a36Sopenharmony_ci            };
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci            ppmu_dmc0_0: ppmu-event0-dmc0 {
9662306a36Sopenharmony_ci                event-name = "ppmu-event0-dmc0";
9762306a36Sopenharmony_ci            };
9862306a36Sopenharmony_ci        };
9962306a36Sopenharmony_ci    };
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci    ppmu_rightbus: ppmu@112a0000 {
10262306a36Sopenharmony_ci        compatible = "samsung,exynos-ppmu";
10362306a36Sopenharmony_ci        reg = <0x112a0000 0x2000>;
10462306a36Sopenharmony_ci        clocks = <&cmu CLK_PPMURIGHT>;
10562306a36Sopenharmony_ci        clock-names = "ppmu";
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci        events {
10862306a36Sopenharmony_ci            ppmu_rightbus_3: ppmu-event3-rightbus {
10962306a36Sopenharmony_ci                event-name = "ppmu-event3-rightbus";
11062306a36Sopenharmony_ci            };
11162306a36Sopenharmony_ci        };
11262306a36Sopenharmony_ci    };
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci  - |
11562306a36Sopenharmony_ci    // PPMUv2 nodes in Exynos5433
11662306a36Sopenharmony_ci    ppmu_d0_cpu: ppmu@10480000 {
11762306a36Sopenharmony_ci        compatible = "samsung,exynos-ppmu-v2";
11862306a36Sopenharmony_ci        reg = <0x10480000 0x2000>;
11962306a36Sopenharmony_ci    };
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci    ppmu_d0_general: ppmu@10490000 {
12262306a36Sopenharmony_ci        compatible = "samsung,exynos-ppmu-v2";
12362306a36Sopenharmony_ci        reg = <0x10490000 0x2000>;
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ci        events {
12662306a36Sopenharmony_ci            ppmu_event0_d0_general: ppmu-event0-d0-general {
12762306a36Sopenharmony_ci                event-name = "ppmu-event0-d0-general";
12862306a36Sopenharmony_ci            };
12962306a36Sopenharmony_ci        };
13062306a36Sopenharmony_ci    };
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci    ppmu_d0_rt: ppmu@104a0000 {
13362306a36Sopenharmony_ci        compatible = "samsung,exynos-ppmu-v2";
13462306a36Sopenharmony_ci        reg = <0x104a0000 0x2000>;
13562306a36Sopenharmony_ci    };
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci    ppmu_d1_cpu: ppmu@104b0000 {
13862306a36Sopenharmony_ci        compatible = "samsung,exynos-ppmu-v2";
13962306a36Sopenharmony_ci        reg = <0x104b0000 0x2000>;
14062306a36Sopenharmony_ci    };
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci    ppmu_d1_general: ppmu@104c0000 {
14362306a36Sopenharmony_ci        compatible = "samsung,exynos-ppmu-v2";
14462306a36Sopenharmony_ci        reg = <0x104c0000 0x2000>;
14562306a36Sopenharmony_ci    };
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_ci    ppmu_d1_rt: ppmu@104d0000 {
14862306a36Sopenharmony_ci        compatible = "samsung,exynos-ppmu-v2";
14962306a36Sopenharmony_ci        reg = <0x104d0000 0x2000>;
15062306a36Sopenharmony_ci    };
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci  - |
15362306a36Sopenharmony_ci    // PPMUv1 nodes with event-data-type for Exynos4412
15462306a36Sopenharmony_ci    #include <dt-bindings/pmu/exynos_ppmu.h>
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci    ppmu@106a0000 {
15762306a36Sopenharmony_ci        compatible = "samsung,exynos-ppmu";
15862306a36Sopenharmony_ci        reg = <0x106a0000 0x2000>;
15962306a36Sopenharmony_ci        clocks = <&clock 400>;
16062306a36Sopenharmony_ci        clock-names = "ppmu";
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci        events {
16362306a36Sopenharmony_ci            ppmu-event3-dmc0 {
16462306a36Sopenharmony_ci                event-name = "ppmu-event3-dmc0";
16562306a36Sopenharmony_ci                event-data-type = <(PPMU_RO_DATA_CNT |
16662306a36Sopenharmony_ci                                    PPMU_WO_DATA_CNT)>;
16762306a36Sopenharmony_ci            };
16862306a36Sopenharmony_ci        };
16962306a36Sopenharmony_ci    };
170