mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-27 04:22:58 +00:00
Define PMU events for GT frequency (actual and requested). The instantaneous values for these frequencies will be displayed. Following PMU events are being added: xe_0000_00_02.0/gt-actual-frequency/ [Kernel PMU event] xe_0000_00_02.0/gt-requested-frequency/ [Kernel PMU event] Standard perf commands can be used to monitor GT frequency: $ perf stat -e xe_0000_00_02.0/gt-requested-frequency,gt=0/ -I1000 1.001229762 1483 Mhz xe_0000_00_02.0/gt-requested-frequency,gt=0/ 2.006175406 1483 Mhz xe_0000_00_02.0/gt-requested-frequency,gt=0/ v2: Use locks while storing/reading samples, keep track of multiple clients (Lucas) and other general cleanup. v3: Review comments (Lucas) and use event counts instead of mask for active events. v4: Add freq events to event_param_valid method (Riana) v5: Use instantaneous values instead of aggregating (Lucas) v6: Obtain fwake at init for freq events as well and use non fwake variant method for reading requested freq to avoid lockdep issues (Lucas) v7: Review comments (Rodrigo, Lucas) Cc: Riana Tauro <riana.tauro@intel.com> Cc: Lucas De Marchi <lucas.demarchi@intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Signed-off-by: Vinay Belgaumkar <vinay.belgaumkar@intel.com> Signed-off-by: John Harrison <John.C.Harrison@Intel.com> Link: https://lore.kernel.org/r/20250331204827.2535393-1-vinay.belgaumkar@intel.com
43 lines
1.5 KiB
C
43 lines
1.5 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2022 Intel Corporation
|
|
*/
|
|
|
|
#ifndef _XE_GUC_PC_H_
|
|
#define _XE_GUC_PC_H_
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct xe_guc_pc;
|
|
enum slpc_gucrc_mode;
|
|
struct drm_printer;
|
|
|
|
int xe_guc_pc_init(struct xe_guc_pc *pc);
|
|
int xe_guc_pc_start(struct xe_guc_pc *pc);
|
|
int xe_guc_pc_stop(struct xe_guc_pc *pc);
|
|
int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc);
|
|
int xe_guc_pc_override_gucrc_mode(struct xe_guc_pc *pc, enum slpc_gucrc_mode mode);
|
|
int xe_guc_pc_unset_gucrc_mode(struct xe_guc_pc *pc);
|
|
void xe_guc_pc_print(struct xe_guc_pc *pc, struct drm_printer *p);
|
|
|
|
u32 xe_guc_pc_get_act_freq(struct xe_guc_pc *pc);
|
|
int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq);
|
|
u32 xe_guc_pc_get_cur_freq_fw(struct xe_guc_pc *pc);
|
|
u32 xe_guc_pc_get_rp0_freq(struct xe_guc_pc *pc);
|
|
u32 xe_guc_pc_get_rpa_freq(struct xe_guc_pc *pc);
|
|
u32 xe_guc_pc_get_rpe_freq(struct xe_guc_pc *pc);
|
|
u32 xe_guc_pc_get_rpn_freq(struct xe_guc_pc *pc);
|
|
int xe_guc_pc_get_min_freq(struct xe_guc_pc *pc, u32 *freq);
|
|
int xe_guc_pc_set_min_freq(struct xe_guc_pc *pc, u32 freq);
|
|
int xe_guc_pc_get_max_freq(struct xe_guc_pc *pc, u32 *freq);
|
|
int xe_guc_pc_set_max_freq(struct xe_guc_pc *pc, u32 freq);
|
|
|
|
enum xe_gt_idle_state xe_guc_pc_c_status(struct xe_guc_pc *pc);
|
|
u64 xe_guc_pc_rc6_residency(struct xe_guc_pc *pc);
|
|
u64 xe_guc_pc_mc6_residency(struct xe_guc_pc *pc);
|
|
void xe_guc_pc_init_early(struct xe_guc_pc *pc);
|
|
int xe_guc_pc_restore_stashed_freq(struct xe_guc_pc *pc);
|
|
void xe_guc_pc_raise_unslice(struct xe_guc_pc *pc);
|
|
|
|
#endif /* _XE_GUC_PC_H_ */
|