Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * arm_spe_decoder.h: Arm Statistical Profiling Extensions support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  * Copyright (c) 2019-2020, Arm Ltd.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) #ifndef INCLUDE__ARM_SPE_DECODER_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) #define INCLUDE__ARM_SPE_DECODER_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <stdbool.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <stddef.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <stdint.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include "arm-spe-pkt-decoder.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) enum arm_spe_events {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) 	EV_EXCEPTION_GEN	= 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 	EV_RETIRED		= 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 	EV_L1D_ACCESS		= 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 	EV_L1D_REFILL		= 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 	EV_TLB_ACCESS		= 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 	EV_TLB_WALK		= 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 	EV_NOT_TAKEN		= 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 	EV_MISPRED		= 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 	EV_LLC_ACCESS		= 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 	EV_LLC_MISS		= 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 	EV_REMOTE_ACCESS	= 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 	EV_ALIGNMENT		= 11,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 	EV_PARTIAL_PREDICATE	= 17,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 	EV_EMPTY_PREDICATE	= 18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) enum arm_spe_sample_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 	ARM_SPE_L1D_ACCESS	= 1 << 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 	ARM_SPE_L1D_MISS	= 1 << 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 	ARM_SPE_LLC_ACCESS	= 1 << 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	ARM_SPE_LLC_MISS	= 1 << 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	ARM_SPE_TLB_ACCESS	= 1 << 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 	ARM_SPE_TLB_MISS	= 1 << 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 	ARM_SPE_BRANCH_MISS	= 1 << 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 	ARM_SPE_REMOTE_ACCESS	= 1 << 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) struct arm_spe_record {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 	enum arm_spe_sample_type type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 	u64 from_ip;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 	u64 to_ip;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 	u64 timestamp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) struct arm_spe_insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) struct arm_spe_buffer {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 	const unsigned char *buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 	size_t len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 	u64 offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 	u64 trace_nr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) struct arm_spe_params {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 	int (*get_trace)(struct arm_spe_buffer *buffer, void *data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 	void *data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) struct arm_spe_decoder {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 	int (*get_trace)(struct arm_spe_buffer *buffer, void *data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 	void *data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 	struct arm_spe_record record;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 	const unsigned char *buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) 	size_t len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) 	struct arm_spe_pkt packet;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) struct arm_spe_decoder *arm_spe_decoder_new(struct arm_spe_params *params);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) void arm_spe_decoder_free(struct arm_spe_decoder *decoder);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) int arm_spe_decode(struct arm_spe_decoder *decoder);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #endif