| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- # SPDX-License-Identifier: BSD-2-Clause
- %YAML 1.2
- ---
- $id: http://devicetree.org/schemas/perf/riscv,pmu.yaml#
- $schema: http://devicetree.org/meta-schemas/core.yaml#
- title: RISC-V SBI PMU events
- maintainers:
- - Atish Patra <atishp@rivosinc.com>
- description: |
- The SBI PMU extension allows supervisor software to configure, start and
- stop any performance counter at anytime. Thus, a user can leverage all
- capabilities of performance analysis tools, such as perf, if the SBI PMU
- extension is enabled. The following constraints apply:
- The platform must provide information about PMU event to counter mappings
- either via device tree or another way, specific to the platform.
- Without the event to counter mappings, the SBI PMU extension cannot be used.
- Platforms should provide information about the PMU event selector values
- that should be encoded in the expected value of MHPMEVENTx while configuring
- MHPMCOUNTERx for that specific event. The can either be done via device tree
- or another way, specific to the platform.
- The exact value to be written to MHPMEVENTx is completely dependent on the
- platform.
- For information on the SBI specification see the section "Performance
- Monitoring Unit Extension" of:
- https://github.com/riscv-non-isa/riscv-sbi-doc/blob/master/riscv-sbi.adoc
- properties:
- compatible:
- const: riscv,pmu
- riscv,event-to-mhpmevent:
- $ref: /schemas/types.yaml#/definitions/uint32-matrix
- description:
- Represents an ONE-to-ONE mapping between a PMU event and the event
- selector value that the platform expects to be written to the MHPMEVENTx
- CSR for that event.
- The mapping is encoded in an matrix format where each element represents
- an event.
- This property shouldn't encode any raw hardware event.
- items:
- items:
- - description: event_idx, a 20-bit wide encoding of the event type and
- code. Refer to the SBI specification for a complete description of
- the event types and codes.
- - description: upper 32 bits of the event selector value for MHPMEVENTx
- - description: lower 32 bits of the event selector value for MHPMEVENTx
- riscv,event-to-mhpmcounters:
- $ref: /schemas/types.yaml#/definitions/uint32-matrix
- description:
- Represents a MANY-to-MANY mapping between a range of events and all the
- MHPMCOUNTERx in a bitmap format that can be used to monitor these range
- of events. The information is encoded in an matrix format where each
- element represents a certain range of events and corresponding counters.
- This property shouldn't encode any raw event.
- items:
- items:
- - description: first event_idx of the range of events
- - description: last event_idx of the range of events
- - description: bitmap of MHPMCOUNTERx for this event
- riscv,raw-event-to-mhpmcounters:
- $ref: /schemas/types.yaml#/definitions/uint32-matrix
- description:
- Represents an ONE-to-MANY or MANY-to-MANY mapping between the rawevent(s)
- and all the MHPMCOUNTERx in a bitmap format that can be used to monitor
- that raw event.
- The encoding of the raw events are platform specific. The information is
- encoded in a matrix format where each element represents the specific raw
- event(s).
- If a platform directly encodes each raw PMU event as a unique ID, the
- value of variant must be 0xffffffff_ffffffff.
- items:
- items:
- - description:
- upper 32 invariant bits for the range of events
- - description:
- lower 32 invariant bits for the range of events
- - description:
- upper 32 bits of the variant bit mask for the range of events
- - description:
- lower 32 bits of the variant bit mask for the range of events
- - description:
- bitmap of all MHPMCOUNTERx that can monitor the range of events
- dependencies:
- riscv,event-to-mhpmevent: [ "riscv,event-to-mhpmcounters" ]
- required:
- - compatible
- additionalProperties: false
- examples:
- - |
- pmu {
- compatible = "riscv,pmu";
- riscv,event-to-mhpmevent = <0x0000B 0x0000 0x0001>;
- riscv,event-to-mhpmcounters = <0x00001 0x00001 0x00000001>,
- <0x00002 0x00002 0x00000004>,
- <0x00003 0x0000A 0x00000ff8>,
- <0x10000 0x10033 0x000ff000>;
- riscv,raw-event-to-mhpmcounters =
- /* For event ID 0x0002 */
- <0x0000 0x0002 0xffffffff 0xffffffff 0x00000f8>,
- /* For event ID 0-4 */
- <0x0 0x0 0xffffffff 0xfffffff0 0x00000ff0>,
- /* For event ID 0xffffffff0000000f - 0xffffffff000000ff */
- <0xffffffff 0x0 0xffffffff 0xffffff0f 0x00000ff0>;
- };
- - |
- /*
- * For HiFive Unmatched board the encodings can be found here
- * https://sifive.cdn.prismic.io/sifive/1a82e600-1f93-4f41-b2d8-86ed8b16acba_fu740-c000-manual-v1p6.pdf
- *
- * This example also binds standard SBI PMU hardware IDs to U74 PMU event
- * codes, U74 uses a bitfield for events encoding, so several U74 events
- * can be bound to a single perf ID.
- * See SBI PMU hardware IDs in arch/riscv/include/asm/sbi.h
- */
- pmu {
- compatible = "riscv,pmu";
- riscv,event-to-mhpmevent =
- /* SBI_PMU_HW_CACHE_REFERENCES -> Instruction or Data cache/ITIM busy */
- <0x00003 0x00000000 0x1801>,
- /* SBI_PMU_HW_CACHE_MISSES -> Instruction or Data cache miss or MMIO access */
- <0x00004 0x00000000 0x0302>,
- /* SBI_PMU_HW_BRANCH_INSTRUCTIONS -> Conditional branch retired */
- <0x00005 0x00000000 0x4000>,
- /* SBI_PMU_HW_BRANCH_MISSES -> Branch or jump misprediction */
- <0x00006 0x00000000 0x6001>,
- /* L1D_READ_MISS -> Data cache miss or MMIO access */
- <0x10001 0x00000000 0x0202>,
- /* L1D_WRITE_ACCESS -> Data cache write-back */
- <0x10002 0x00000000 0x0402>,
- /* L1I_READ_ACCESS -> Instruction cache miss */
- <0x10009 0x00000000 0x0102>,
- /* LL_READ_MISS -> UTLB miss */
- <0x10011 0x00000000 0x2002>,
- /* DTLB_READ_MISS -> Data TLB miss */
- <0x10019 0x00000000 0x1002>,
- /* ITLB_READ_MISS-> Instruction TLB miss */
- <0x10021 0x00000000 0x0802>;
- riscv,event-to-mhpmcounters = <0x00003 0x00006 0x18>,
- <0x10001 0x10002 0x18>,
- <0x10009 0x10009 0x18>,
- <0x10011 0x10011 0x18>,
- <0x10019 0x10019 0x18>,
- <0x10021 0x10021 0x18>;
- riscv,raw-event-to-mhpmcounters = <0x0 0x0 0xffffffff 0xfc0000ff 0x18>,
- <0x0 0x1 0xffffffff 0xfff800ff 0x18>,
- <0x0 0x2 0xffffffff 0xffffe0ff 0x18>;
- };
|