![Linus Torvalds](/assets/img/avatar_default.png)
- Various kerneldoc script enhancements. - More RST conversions; those are slowing down as we run out of things to convert, but we're a ways from done still. - Dan's "maintainer profile entry" work landed at last. Now we just need to get maintainers to fill in the profiles... - A reworking of the parallel build setup to work better with a variety of systems (and to not take over huge systems entirely in particular). - The MAINTAINERS file is now converted to RST during the build. Hopefully nobody ever tries to print this thing, or they will need to load a lot of paper. - A script and documentation making it easy for maintainers to add Link: tags at commit time. Also included is the removal of a bunch of spurious CR characters. -----BEGIN PGP SIGNATURE----- iQFDBAABCAAtFiEEIw+MvkEiF49krdp9F0NaE2wMflgFAl3j5B0PHGNvcmJldEBs d24ubmV0AAoJEBdDWhNsDH5YtBcH/jIN2cO8/0YW2rjVT+1G6ytSdFUKx5WJ/lpf 5uBeCvuCeYhtCB6+BgnXvjykJ7jDW11/NJNjWqz/gsvD5l5FJK1rXarI/oz2Klyi kcPtDmBF/ki4wz9qXzEpa0vg8LXdjeys50S1vE75qCzxZoPP7YjuRbPnLrlIJukv JbDVi4p9kxgeHfRB4+BHOe5rFwA3mMmaxKNIX34Y+UUO2KZ0g/yUi1bAaQwQAdt+ PsORmkVQ8Puh3K9xRIr7dYlcWBlBiPqzYdvDgTVxSjrxdK6wjYjSgVk2VjC5MBUN mTSTWgyfsIcD/76/s8tq7ZRl2fw+SkCSkFo79Rb/hJwDTb7Vnng= =LPBr -----END PGP SIGNATURE----- Merge tag 'docs-5.5a' of git://git.lwn.net/linux Pull Documentation updates from Jonathan Corbet: "Here are the main documentation changes for 5.5: - Various kerneldoc script enhancements. - More RST conversions; those are slowing down as we run out of things to convert, but we're a ways from done still. - Dan's "maintainer profile entry" work landed at last. Now we just need to get maintainers to fill in the profiles... - A reworking of the parallel build setup to work better with a variety of systems (and to not take over huge systems entirely in particular). - The MAINTAINERS file is now converted to RST during the build. Hopefully nobody ever tries to print this thing, or they will need to load a lot of paper. - A script and documentation making it easy for maintainers to add Link: tags at commit time. Also included is the removal of a bunch of spurious CR characters" * tag 'docs-5.5a' of git://git.lwn.net/linux: (91 commits) docs: remove a bunch of stray CRs docs: fix up the maintainer profile document libnvdimm, MAINTAINERS: Maintainer Entry Profile Maintainer Handbook: Maintainer Entry Profile MAINTAINERS: Reclaim the P: tag for Maintainer Entry Profile docs, parallelism: Rearrange how jobserver reservations are made docs, parallelism: Do not leak blocking mode to other readers docs, parallelism: Fix failure path and add comment Documentation: Remove bootmem_debug from kernel-parameters.txt Documentation: security: core.rst: fix warnings Documentation/process/howto/kokr: Update for 4.x -> 5.x versioning Documentation/translation: Use Korean for Korean translation title docs/memory-barriers.txt: Remove remaining references to mmiowb() docs/memory-barriers.txt/kokr: Update I/O section to be clearer about CPU vs thread docs/memory-barriers.txt/kokr: Fix style, spacing and grammar in I/O section Documentation/kokr: Kill all references to mmiowb() docs/memory-barriers.txt/kokr: Rewrite "KERNEL I/O BARRIER EFFECTS" section docs: Add initial documentation for devfreq Documentation: Document how to get links with git am docs: Add request_irq() documentation ...
71 lines
3.5 KiB
ReStructuredText
71 lines
3.5 KiB
ReStructuredText
=====================================================
|
|
Freescale i.MX8 DDR Performance Monitoring Unit (PMU)
|
|
=====================================================
|
|
|
|
There are no performance counters inside the DRAM controller, so performance
|
|
signals are brought out to the edge of the controller where a set of 4 x 32 bit
|
|
counters is implemented. This is controlled by the CSV modes programed in counter
|
|
control register which causes a large number of PERF signals to be generated.
|
|
|
|
Selection of the value for each counter is done via the config registers. There
|
|
is one register for each counter. Counter 0 is special in that it always counts
|
|
“time” and when expired causes a lock on itself and the other counters and an
|
|
interrupt is raised. If any other counter overflows, it continues counting, and
|
|
no interrupt is raised.
|
|
|
|
The "format" directory describes format of the config (event ID) and config1
|
|
(AXI filtering) fields of the perf_event_attr structure, see /sys/bus/event_source/
|
|
devices/imx8_ddr0/format/. The "events" directory describes the events types
|
|
hardware supported that can be used with perf tool, see /sys/bus/event_source/
|
|
devices/imx8_ddr0/events/. The "caps" directory describes filter features implemented
|
|
in DDR PMU, see /sys/bus/events_source/devices/imx8_ddr0/caps/.
|
|
|
|
.. code-block:: bash
|
|
|
|
perf stat -a -e imx8_ddr0/cycles/ cmd
|
|
perf stat -a -e imx8_ddr0/read/,imx8_ddr0/write/ cmd
|
|
|
|
AXI filtering is only used by CSV modes 0x41 (axid-read) and 0x42 (axid-write)
|
|
to count reading or writing matches filter setting. Filter setting is various
|
|
from different DRAM controller implementations, which is distinguished by quirks
|
|
in the driver. You also can dump info from userspace, filter in "caps" directory
|
|
indicates whether PMU supports AXI ID filter or not; enhanced_filter indicates
|
|
whether PMU supports enhanced AXI ID filter or not. Value 0 for un-supported, and
|
|
value 1 for supported.
|
|
|
|
* With DDR_CAP_AXI_ID_FILTER quirk(filter: 1, enhanced_filter: 0).
|
|
Filter is defined with two configuration parts:
|
|
--AXI_ID defines AxID matching value.
|
|
--AXI_MASKING defines which bits of AxID are meaningful for the matching.
|
|
|
|
- 0: corresponding bit is masked.
|
|
- 1: corresponding bit is not masked, i.e. used to do the matching.
|
|
|
|
AXI_ID and AXI_MASKING are mapped on DPCR1 register in performance counter.
|
|
When non-masked bits are matching corresponding AXI_ID bits then counter is
|
|
incremented. Perf counter is incremented if
|
|
AxID && AXI_MASKING == AXI_ID && AXI_MASKING
|
|
|
|
This filter doesn't support filter different AXI ID for axid-read and axid-write
|
|
event at the same time as this filter is shared between counters.
|
|
|
|
.. code-block:: bash
|
|
|
|
perf stat -a -e imx8_ddr0/axid-read,axi_mask=0xMMMM,axi_id=0xDDDD/ cmd
|
|
perf stat -a -e imx8_ddr0/axid-write,axi_mask=0xMMMM,axi_id=0xDDDD/ cmd
|
|
|
|
.. note::
|
|
|
|
axi_mask is inverted in userspace(i.e. set bits are bits to mask), and
|
|
it will be reverted in driver automatically. so that the user can just specify
|
|
axi_id to monitor a specific id, rather than having to specify axi_mask.
|
|
|
|
.. code-block:: bash
|
|
|
|
perf stat -a -e imx8_ddr0/axid-read,axi_id=0x12/ cmd, which will monitor ARID=0x12
|
|
|
|
* With DDR_CAP_AXI_ID_FILTER_ENHANCED quirk(filter: 1, enhanced_filter: 1).
|
|
This is an extension to the DDR_CAP_AXI_ID_FILTER quirk which permits
|
|
counting the number of bytes (as opposed to the number of bursts) from DDR
|
|
read and write transactions concurrently with another set of data counters.
|