| // 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_ */ |