| // SPDX-License-Identifier: MIT | |
| // | |
| // Copyright 2025 Advanced Micro Devices, Inc. | |
| #ifndef _DC_PROBE_H_ | |
| #define _DC_PROBE_H_ | |
| #include "os_types.h" | |
| /** | |
| * enum dc_probe_type - What DM wants to probe. | |
| * | |
| * Each value names a measurable quantity as an abstraction. DC resolves it to | |
| * whatever HW measurement block fulfills it. DM never selects the HW block. | |
| */ | |
| enum dc_probe_type { | |
| DC_PROBE_PEAK_MEM_BW = 0, | |
| DC_PROBE_AVG_MEM_BW, | |
| DC_PROBE_MEM_LATENCY, | |
| DC_PROBE_URGENT_RAMP_LATENCY, | |
| DC_PROBE_URGENT_ASSERTION_COUNT, | |
| DC_PROBE_PREFETCH_DATA_SIZE, | |
| }; | |
| /** | |
| * enum dc_probe_target_state - Target lifecycle state DM wants DC to reach. | |
| * | |
| * DM sets this to describe the final state DC must reach by the end of the | |
| * commit. DC performs whatever HW transition sequence is needed. | |
| * | |
| * @DC_PROBE_NOT_MEASURING: probe inactive, no valid data available. | |
| * @DC_PROBE_MEASURING: probe runs continuously. The latest value can be | |
| * read back at any time and may differ on each read. | |
| * @DC_PROBE_MEASURED: probe performed one shot. The result is latched and | |
| * stays valid until DM transitions back to DC_PROBE_NOT_MEASURING. | |
| */ | |
| enum dc_probe_target_state { | |
| DC_PROBE_NOT_MEASURING = 0, | |
| DC_PROBE_MEASURING, | |
| DC_PROBE_MEASURED, | |
| }; | |
| /** | |
| * enum dc_probe_scope_type - What the probe is scoped to. | |
| * @DC_PROBE_SCOPE_GLOBAL: whole memory subsystem, no stream/plane selector. | |
| * | |
| * Only GLOBAL is implemented. Per-stream/plane scoping must select targets by | |
| * stable id, not object pointer — dc_state copy semantics would dangle a raw | |
| * pointer when the absolute-set commit removes or replaces the target. | |
| */ | |
| enum dc_probe_scope_type { | |
| DC_PROBE_SCOPE_GLOBAL = 0, | |
| }; | |
| /** | |
| * struct dc_probe_scope - Selects what a probe measures against. | |
| * @type: scope kind, only DC_PROBE_SCOPE_GLOBAL is implemented. | |
| */ | |
| struct dc_probe_scope { | |
| enum dc_probe_scope_type type; | |
| }; | |
| /** | |
| * struct dc_probe_state - DM-authored descriptor of a single probe. | |
| * | |
| * A plain inline value with copy semantics: no allocation, no refcount. DC | |
| * resolves each descriptor to a HW measurement instance and diffs the desired | |
| * set against the committed set to plan the transition. | |
| * | |
| * @type: what to measure. | |
| * @target_state: desired lifecycle state for this probe. | |
| * @scope: what the probe is scoped to (GLOBAL only for now). | |
| */ | |
| struct dc_probe_state { | |
| enum dc_probe_type type; | |
| enum dc_probe_target_state target_state; | |
| struct dc_probe_scope scope; | |
| }; | |
| #define MAX_PROBES 1 | |
| /** | |
| * struct dc_probe_updates - Absolute set of probes DM wants active. | |
| * | |
| * Mirrors the plane/stream absolute-set model: the array is the complete | |
| * desired set. DC compares it against the committed set to add, remove, or | |
| * transition probes. | |
| * | |
| * @probes: desired probe descriptors. | |
| * @probe_count: number of valid entries in @probes. | |
| */ | |
| struct dc_probe_updates { | |
| struct dc_probe_state probes[MAX_PROBES]; | |
| int probe_count; | |
| }; | |
| #endif /* _DC_PROBE_H_ */ |