Sound Open Firmware
Loading...
Searching...
No Matches
telemetry.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-3-Clause
2 *
3 * Copyright(c) 2024 Intel Corporation. All rights reserved.
4 */
5
6#ifndef __SOF_TELEMETRY_H__
7#define __SOF_TELEMETRY_H__
8
9#include <ipc4/base_fw.h>
10#ifdef __ZEPHYR__
11#include <zephyr/timing/timing.h>
12#endif
13
14#ifndef CONFIG_INTEL_ADSP_DEBUG_SLOT_MANAGER
15/* Slot in memory window 2 (Debug Window) to be used as telemetry slot */
16#define SOF_DW_TELEMETRY_SLOT 1
17#endif
18
19/* Memory of average algorithm of performance queue */
20#define SOF_AVG_PERF_MEAS_DEPTH 64
21/* Number of runs taken to calculate average (algorithm resolution) */
22#define SOF_AVG_PERF_MEAS_PERIOD 16
23
24/* Systick here is not to be confused with neither Zephyr tick nor SOF scheduler tick,
25 * it's a legacy name for counting execution time
26 */
38
39/*
40 * This is the structure of telemetry data in memory window.
41 * If you need to define a field, you should also define the fields before it to
42 * keep the internal structures aligned with each other.
43 */
45 uint32_t separator_1;
46 struct system_tick_info system_tick_info[CONFIG_MAX_CORE_COUNT];
47 /*
48 * uint32_t separator_2;
49 * deadlock_info_s deadlock_info[FW_REPORTED_MAX_CORES_COUNT];
50 * uint32_t separator_3;
51 * assert_info_s assert_info;
52 * uint32_t separator_4;
53 * xxxruns_info_s xxxruns_info;
54 * uint32_t separator_5;
55 * performance_info_s performance_info;
56 * uint32_t separator_6;
57 * mem_pools_info_s mem_pools_info;
58 * uint32_t separator_7;
59 * timeout_info_s timeout_info;
60 * uint32_t separator_8;
61 * ulp_telemetry_s ulp_telemetry;
62 * uint32_t separator_9;
63 * transition_info_s evad_transition_info;
64 * uint32_t separator_10;
65 * task_info_s task_info[FW_MAX_REPORTED_TASKS];
66 * uint32_t separator_11;
67 * transition_info_s d0i3_info[FW_REPORTED_MAX_CORES_COUNT];
68 * uint32_t separator_12;
69 * interrupt_stats_info_s interrupt_stats;
70 * uint32_t separator_13;
71 * loaded_libraries_s loaded_libraries;
72 * //uint32_t __pad_for_exception_record;
73 * uint32_t separator_exception;
74 * CoreExceptionRecord core_exception_record[FW_REPORTED_MAX_CORES_COUNT];
75 */
76} __packed;
77
78/* Reference FW used a normal Queue here.
79 * Implementing simplified queue just for avg calculation.
80 * Queue is circular, oldest element replaced by latest
81 */
84 /* next empty element, head if queue is full, else tail */
85 size_t index;
86 uint8_t full;
87 /* number of items AND index of next empty box */
88 size_t size;
89 size_t sum;
90};
91
92void telemetry_update(uint32_t begin_ccount, uint32_t current_ccount);
93#ifdef CONFIG_INTEL_ADSP_DEBUG_SLOT_MANAGER
94struct system_tick_info *telemetry_get_systick_info_ptr(void);
95#endif
96
97#ifdef CONFIG_TIMING_FUNCTIONS
98#define telemetry_timestamp timing_counter_get
99#else
100#define telemetry_timestamp sof_cycle_get_64
101#endif
102
103#endif /*__SOF_TELEMETRY_H__ */
#define __packed
Definition ext_manifest.h:43
Definition telemetry.h:27
uint32_t last_ccount
Definition telemetry.h:31
uint32_t peak_utilization
Definition telemetry.h:33
uint32_t rsvd[2]
Definition telemetry.h:36
uint32_t last_time_elapsed
Definition telemetry.h:29
uint32_t count
Definition telemetry.h:28
uint32_t max_time_elapsed
Definition telemetry.h:30
uint32_t avg_utilization
Definition telemetry.h:32
uint32_t peak_utilization_4k
Definition telemetry.h:34
uint32_t peak_utilization_8k
Definition telemetry.h:35
Definition telemetry.h:82
size_t elements[SOF_AVG_PERF_MEAS_DEPTH]
Definition telemetry.h:83
uint8_t full
Definition telemetry.h:86
size_t size
Definition telemetry.h:88
size_t sum
Definition telemetry.h:89
size_t index
Definition telemetry.h:85
Definition telemetry.h:44
uint32_t separator_1
Definition telemetry.h:45
struct system_tick_info system_tick_info[CONFIG_MAX_CORE_COUNT]
Definition telemetry.h:46
void telemetry_update(uint32_t begin_ccount, uint32_t current_ccount)
#define SOF_AVG_PERF_MEAS_DEPTH
Definition telemetry.h:20