162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci=========================================================== 462306a36Sopenharmony_ciAmlogic SoC DDR Bandwidth Performance Monitoring Unit (PMU) 562306a36Sopenharmony_ci=========================================================== 662306a36Sopenharmony_ci 762306a36Sopenharmony_ciThe Amlogic Meson G12 SoC contains a bandwidth monitor inside DRAM controller. 862306a36Sopenharmony_ciThe monitor includes 4 channels. Each channel can count the request accessing 962306a36Sopenharmony_ciDRAM. The channel can count up to 3 AXI port simultaneously. It can be helpful 1062306a36Sopenharmony_cito show if the performance bottleneck is on DDR bandwidth. 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciCurrently, this driver supports the following 5 perf events: 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci+ meson_ddr_bw/total_rw_bytes/ 1562306a36Sopenharmony_ci+ meson_ddr_bw/chan_1_rw_bytes/ 1662306a36Sopenharmony_ci+ meson_ddr_bw/chan_2_rw_bytes/ 1762306a36Sopenharmony_ci+ meson_ddr_bw/chan_3_rw_bytes/ 1862306a36Sopenharmony_ci+ meson_ddr_bw/chan_4_rw_bytes/ 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cimeson_ddr_bw/chan_{1,2,3,4}_rw_bytes/ events are channel-specific events. 2162306a36Sopenharmony_ciEach channel support filtering, which can let the channel to monitor 2262306a36Sopenharmony_ciindividual IP module in SoC. 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ciBelow are DDR access request event filter keywords: 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci+ arm - from CPU 2762306a36Sopenharmony_ci+ vpu_read1 - from OSD + VPP read 2862306a36Sopenharmony_ci+ gpu - from 3D GPU 2962306a36Sopenharmony_ci+ pcie - from PCIe controller 3062306a36Sopenharmony_ci+ hdcp - from HDCP controller 3162306a36Sopenharmony_ci+ hevc_front - from HEVC codec front end 3262306a36Sopenharmony_ci+ usb3_0 - from USB3.0 controller 3362306a36Sopenharmony_ci+ hevc_back - from HEVC codec back end 3462306a36Sopenharmony_ci+ h265enc - from HEVC encoder 3562306a36Sopenharmony_ci+ vpu_read2 - from DI read 3662306a36Sopenharmony_ci+ vpu_write1 - from VDIN write 3762306a36Sopenharmony_ci+ vpu_write2 - from di write 3862306a36Sopenharmony_ci+ vdec - from legacy codec video decoder 3962306a36Sopenharmony_ci+ hcodec - from H264 encoder 4062306a36Sopenharmony_ci+ ge2d - from ge2d 4162306a36Sopenharmony_ci+ spicc1 - from SPI controller 1 4262306a36Sopenharmony_ci+ usb0 - from USB2.0 controller 0 4362306a36Sopenharmony_ci+ dma - from system DMA controller 1 4462306a36Sopenharmony_ci+ arb0 - from arb0 4562306a36Sopenharmony_ci+ sd_emmc_b - from SD eMMC b controller 4662306a36Sopenharmony_ci+ usb1 - from USB2.0 controller 1 4762306a36Sopenharmony_ci+ audio - from Audio module 4862306a36Sopenharmony_ci+ sd_emmc_c - from SD eMMC c controller 4962306a36Sopenharmony_ci+ spicc2 - from SPI controller 2 5062306a36Sopenharmony_ci+ ethernet - from Ethernet controller 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ciExamples: 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci + Show the total DDR bandwidth per seconds: 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci .. code-block:: bash 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci perf stat -a -e meson_ddr_bw/total_rw_bytes/ -I 1000 sleep 10 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci + Show individual DDR bandwidth from CPU and GPU respectively, as well as 6362306a36Sopenharmony_ci sum of them: 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci .. code-block:: bash 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci perf stat -a -e meson_ddr_bw/chan_1_rw_bytes,arm=1/ -I 1000 sleep 10 6862306a36Sopenharmony_ci perf stat -a -e meson_ddr_bw/chan_2_rw_bytes,gpu=1/ -I 1000 sleep 10 6962306a36Sopenharmony_ci perf stat -a -e meson_ddr_bw/chan_3_rw_bytes,arm=1,gpu=1/ -I 1000 sleep 10 7062306a36Sopenharmony_ci 71