| |
| * Samsung Exynos PPMU (Platform Performance Monitoring Unit) device |
| |
| The Samsung Exynos SoC has PPMU (Platform Performance Monitoring Unit) for |
| each IP. PPMU provides the primitive values to get performance data. These |
| PPMU events provide information of the SoC's behaviors so that you may |
| use to analyze system performance, to make behaviors visible and to count |
| usages of each IP (DMC, CPU, RIGHTBUS, LEFTBUS, CAM interface, LCD, G3D, MFC). |
| The Exynos PPMU driver uses the devfreq-event class to provide event data |
| to various devfreq devices. The devfreq devices would use the event data when |
| derterming the current state of each IP. |
| |
| Required properties: |
| - compatible: Should be "samsung,exynos-ppmu". |
| - reg: physical base address of each PPMU and length of memory mapped region. |
| |
| Optional properties: |
| - clock-names : the name of clock used by the PPMU, "ppmu" |
| - clocks : phandles for clock specified in "clock-names" property |
| - #clock-cells: should be 1. |
| |
| Example1 : PPMU nodes in exynos3250.dtsi are listed below. |
| |
| ppmu_dmc0: ppmu_dmc0@106a0000 { |
| compatible = "samsung,exynos-ppmu"; |
| reg = <0x106a0000 0x2000>; |
| status = "disabled"; |
| }; |
| |
| ppmu_dmc1: ppmu_dmc1@106b0000 { |
| compatible = "samsung,exynos-ppmu"; |
| reg = <0x106b0000 0x2000>; |
| status = "disabled"; |
| }; |
| |
| ppmu_cpu: ppmu_cpu@106c0000 { |
| compatible = "samsung,exynos-ppmu"; |
| reg = <0x106c0000 0x2000>; |
| status = "disabled"; |
| }; |
| |
| ppmu_rightbus: ppmu_rightbus@112a0000 { |
| compatible = "samsung,exynos-ppmu"; |
| reg = <0x112a0000 0x2000>; |
| clocks = <&cmu CLK_PPMURIGHT>; |
| clock-names = "ppmu"; |
| status = "disabled"; |
| }; |
| |
| ppmu_leftbus: ppmu_leftbus0@116a0000 { |
| compatible = "samsung,exynos-ppmu"; |
| reg = <0x116a0000 0x2000>; |
| clocks = <&cmu CLK_PPMULEFT>; |
| clock-names = "ppmu"; |
| status = "disabled"; |
| }; |
| |
| Example2 : Events of each PPMU node in exynos3250-rinato.dts are listed below. |
| |
| &ppmu_dmc0 { |
| status = "okay"; |
| |
| events { |
| ppmu_dmc0_3: ppmu-event3-dmc0 { |
| event-name = "ppmu-event3-dmc0"; |
| }; |
| |
| ppmu_dmc0_2: ppmu-event2-dmc0 { |
| event-name = "ppmu-event2-dmc0"; |
| }; |
| |
| ppmu_dmc0_1: ppmu-event1-dmc0 { |
| event-name = "ppmu-event1-dmc0"; |
| }; |
| |
| ppmu_dmc0_0: ppmu-event0-dmc0 { |
| event-name = "ppmu-event0-dmc0"; |
| }; |
| }; |
| }; |
| |
| &ppmu_dmc1 { |
| status = "okay"; |
| |
| events { |
| ppmu_dmc1_3: ppmu-event3-dmc1 { |
| event-name = "ppmu-event3-dmc1"; |
| }; |
| }; |
| }; |
| |
| &ppmu_leftbus { |
| status = "okay"; |
| |
| events { |
| ppmu_leftbus_3: ppmu-event3-leftbus { |
| event-name = "ppmu-event3-leftbus"; |
| }; |
| }; |
| }; |
| |
| &ppmu_rightbus { |
| status = "okay"; |
| |
| events { |
| ppmu_rightbus_3: ppmu-event3-rightbus { |
| event-name = "ppmu-event3-rightbus"; |
| }; |
| }; |
| }; |