1*7ae85e64SWenjing Liu // SPDX-License-Identifier: MIT 2*7ae85e64SWenjing Liu // 3*7ae85e64SWenjing Liu // Copyright 2025 Advanced Micro Devices, Inc. 4*7ae85e64SWenjing Liu 5*7ae85e64SWenjing Liu #ifndef _DC_PROBE_H_ 6*7ae85e64SWenjing Liu #define _DC_PROBE_H_ 7*7ae85e64SWenjing Liu 8*7ae85e64SWenjing Liu #include "os_types.h" 9*7ae85e64SWenjing Liu 10*7ae85e64SWenjing Liu /** 11*7ae85e64SWenjing Liu * enum dc_probe_type - What DM wants to probe. 12*7ae85e64SWenjing Liu * 13*7ae85e64SWenjing Liu * Each value names a measurable quantity as an abstraction. DC resolves it to 14*7ae85e64SWenjing Liu * whatever HW measurement block fulfills it. DM never selects the HW block. 15*7ae85e64SWenjing Liu */ 16*7ae85e64SWenjing Liu enum dc_probe_type { 17*7ae85e64SWenjing Liu DC_PROBE_PEAK_MEM_BW = 0, 18*7ae85e64SWenjing Liu DC_PROBE_AVG_MEM_BW, 19*7ae85e64SWenjing Liu DC_PROBE_MEM_LATENCY, 20*7ae85e64SWenjing Liu DC_PROBE_URGENT_RAMP_LATENCY, 21*7ae85e64SWenjing Liu DC_PROBE_URGENT_ASSERTION_COUNT, 22*7ae85e64SWenjing Liu DC_PROBE_PREFETCH_DATA_SIZE, 23*7ae85e64SWenjing Liu }; 24*7ae85e64SWenjing Liu 25*7ae85e64SWenjing Liu /** 26*7ae85e64SWenjing Liu * enum dc_probe_target_state - Target lifecycle state DM wants DC to reach. 27*7ae85e64SWenjing Liu * 28*7ae85e64SWenjing Liu * DM sets this to describe the final state DC must reach by the end of the 29*7ae85e64SWenjing Liu * commit. DC performs whatever HW transition sequence is needed. 30*7ae85e64SWenjing Liu * 31*7ae85e64SWenjing Liu * @DC_PROBE_NOT_MEASURING: probe inactive, no valid data available. 32*7ae85e64SWenjing Liu * @DC_PROBE_MEASURING: probe runs continuously. The latest value can be 33*7ae85e64SWenjing Liu * read back at any time and may differ on each read. 34*7ae85e64SWenjing Liu * @DC_PROBE_MEASURED: probe performed one shot. The result is latched and 35*7ae85e64SWenjing Liu * stays valid until DM transitions back to DC_PROBE_NOT_MEASURING. 36*7ae85e64SWenjing Liu */ 37*7ae85e64SWenjing Liu enum dc_probe_target_state { 38*7ae85e64SWenjing Liu DC_PROBE_NOT_MEASURING = 0, 39*7ae85e64SWenjing Liu DC_PROBE_MEASURING, 40*7ae85e64SWenjing Liu DC_PROBE_MEASURED, 41*7ae85e64SWenjing Liu }; 42*7ae85e64SWenjing Liu 43*7ae85e64SWenjing Liu /** 44*7ae85e64SWenjing Liu * enum dc_probe_scope_type - What the probe is scoped to. 45*7ae85e64SWenjing Liu * @DC_PROBE_SCOPE_GLOBAL: whole memory subsystem, no stream/plane selector. 46*7ae85e64SWenjing Liu * 47*7ae85e64SWenjing Liu * Only GLOBAL is implemented. Per-stream/plane scoping must select targets by 48*7ae85e64SWenjing Liu * stable id, not object pointer — dc_state copy semantics would dangle a raw 49*7ae85e64SWenjing Liu * pointer when the absolute-set commit removes or replaces the target. 50*7ae85e64SWenjing Liu */ 51*7ae85e64SWenjing Liu enum dc_probe_scope_type { 52*7ae85e64SWenjing Liu DC_PROBE_SCOPE_GLOBAL = 0, 53*7ae85e64SWenjing Liu }; 54*7ae85e64SWenjing Liu 55*7ae85e64SWenjing Liu /** 56*7ae85e64SWenjing Liu * struct dc_probe_scope - Selects what a probe measures against. 57*7ae85e64SWenjing Liu * @type: scope kind, only DC_PROBE_SCOPE_GLOBAL is implemented. 58*7ae85e64SWenjing Liu */ 59*7ae85e64SWenjing Liu struct dc_probe_scope { 60*7ae85e64SWenjing Liu enum dc_probe_scope_type type; 61*7ae85e64SWenjing Liu }; 62*7ae85e64SWenjing Liu 63*7ae85e64SWenjing Liu /** 64*7ae85e64SWenjing Liu * struct dc_probe_state - DM-authored descriptor of a single probe. 65*7ae85e64SWenjing Liu * 66*7ae85e64SWenjing Liu * A plain inline value with copy semantics: no allocation, no refcount. DC 67*7ae85e64SWenjing Liu * resolves each descriptor to a HW measurement instance and diffs the desired 68*7ae85e64SWenjing Liu * set against the committed set to plan the transition. 69*7ae85e64SWenjing Liu * 70*7ae85e64SWenjing Liu * @type: what to measure. 71*7ae85e64SWenjing Liu * @target_state: desired lifecycle state for this probe. 72*7ae85e64SWenjing Liu * @scope: what the probe is scoped to (GLOBAL only for now). 73*7ae85e64SWenjing Liu */ 74*7ae85e64SWenjing Liu struct dc_probe_state { 75*7ae85e64SWenjing Liu enum dc_probe_type type; 76*7ae85e64SWenjing Liu enum dc_probe_target_state target_state; 77*7ae85e64SWenjing Liu struct dc_probe_scope scope; 78*7ae85e64SWenjing Liu }; 79*7ae85e64SWenjing Liu 80*7ae85e64SWenjing Liu #define MAX_PROBES 1 81*7ae85e64SWenjing Liu 82*7ae85e64SWenjing Liu /** 83*7ae85e64SWenjing Liu * struct dc_probe_updates - Absolute set of probes DM wants active. 84*7ae85e64SWenjing Liu * 85*7ae85e64SWenjing Liu * Mirrors the plane/stream absolute-set model: the array is the complete 86*7ae85e64SWenjing Liu * desired set. DC compares it against the committed set to add, remove, or 87*7ae85e64SWenjing Liu * transition probes. 88*7ae85e64SWenjing Liu * 89*7ae85e64SWenjing Liu * @probes: desired probe descriptors. 90*7ae85e64SWenjing Liu * @probe_count: number of valid entries in @probes. 91*7ae85e64SWenjing Liu */ 92*7ae85e64SWenjing Liu struct dc_probe_updates { 93*7ae85e64SWenjing Liu struct dc_probe_state probes[MAX_PROBES]; 94*7ae85e64SWenjing Liu int probe_count; 95*7ae85e64SWenjing Liu }; 96*7ae85e64SWenjing Liu 97*7ae85e64SWenjing Liu #endif /* _DC_PROBE_H_ */ 98