Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Intel SOC Telemetry Driver Header File
0004  * Copyright (C) 2015, Intel Corporation.
0005  * All Rights Reserved.
0006  */
0007 #ifndef INTEL_TELEMETRY_H
0008 #define INTEL_TELEMETRY_H
0009 
0010 #define TELEM_MAX_EVENTS_SRAM       28
0011 #define TELEM_MAX_OS_ALLOCATED_EVENTS   20
0012 
0013 #include <asm/intel_scu_ipc.h>
0014 
0015 enum telemetry_unit {
0016     TELEM_PSS = 0,
0017     TELEM_IOSS,
0018     TELEM_UNIT_NONE
0019 };
0020 
0021 struct telemetry_evtlog {
0022     u32 telem_evtid;
0023     u64 telem_evtlog;
0024 };
0025 
0026 struct telemetry_evtconfig {
0027     /* Array of Event-IDs to Enable */
0028     u32 *evtmap;
0029 
0030     /* Number of Events (<29) in evtmap */
0031     u8 num_evts;
0032 
0033     /* Sampling period */
0034     u8 period;
0035 };
0036 
0037 struct telemetry_evtmap {
0038     const char *name;
0039     u32 evt_id;
0040 };
0041 
0042 struct telemetry_unit_config {
0043     struct telemetry_evtmap *telem_evts;
0044     void __iomem *regmap;
0045     u8 ssram_evts_used;
0046     u8 curr_period;
0047     u8 max_period;
0048     u8 min_period;
0049 };
0050 
0051 struct telemetry_plt_config {
0052     struct telemetry_unit_config pss_config;
0053     struct telemetry_unit_config ioss_config;
0054     struct mutex telem_trace_lock;
0055     struct mutex telem_lock;
0056     struct intel_pmc_dev *pmc;
0057     struct intel_scu_ipc_dev *scu;
0058     bool telem_in_use;
0059 };
0060 
0061 struct telemetry_core_ops {
0062     int (*get_sampling_period)(u8 *pss_min_period, u8 *pss_max_period,
0063                    u8 *ioss_min_period, u8 *ioss_max_period);
0064 
0065     int (*get_eventconfig)(struct telemetry_evtconfig *pss_evtconfig,
0066                    struct telemetry_evtconfig *ioss_evtconfig,
0067                    int pss_len, int ioss_len);
0068 
0069     int (*update_events)(struct telemetry_evtconfig pss_evtconfig,
0070                  struct telemetry_evtconfig ioss_evtconfig);
0071 
0072     int (*set_sampling_period)(u8 pss_period, u8 ioss_period);
0073 
0074     int (*get_trace_verbosity)(enum telemetry_unit telem_unit,
0075                    u32 *verbosity);
0076 
0077     int (*set_trace_verbosity)(enum telemetry_unit telem_unit,
0078                    u32 verbosity);
0079 
0080     int (*raw_read_eventlog)(enum telemetry_unit telem_unit,
0081                  struct telemetry_evtlog *evtlog,
0082                  int len, int log_all_evts);
0083 
0084     int (*read_eventlog)(enum telemetry_unit telem_unit,
0085                  struct telemetry_evtlog *evtlog,
0086                  int len, int log_all_evts);
0087 
0088     int (*add_events)(u8 num_pss_evts, u8 num_ioss_evts,
0089               u32 *pss_evtmap, u32 *ioss_evtmap);
0090 
0091     int (*reset_events)(void);
0092 };
0093 
0094 int telemetry_set_pltdata(const struct telemetry_core_ops *ops,
0095               struct telemetry_plt_config *pltconfig);
0096 
0097 int telemetry_clear_pltdata(void);
0098 
0099 struct telemetry_plt_config *telemetry_get_pltdata(void);
0100 
0101 int telemetry_get_evtname(enum telemetry_unit telem_unit,
0102               const char **name, int len);
0103 
0104 int telemetry_update_events(struct telemetry_evtconfig pss_evtconfig,
0105                 struct telemetry_evtconfig ioss_evtconfig);
0106 
0107 int telemetry_add_events(u8 num_pss_evts, u8 num_ioss_evts,
0108              u32 *pss_evtmap, u32 *ioss_evtmap);
0109 
0110 int telemetry_reset_events(void);
0111 
0112 int telemetry_get_eventconfig(struct telemetry_evtconfig *pss_config,
0113                   struct telemetry_evtconfig *ioss_config,
0114                   int pss_len, int ioss_len);
0115 
0116 int telemetry_read_events(enum telemetry_unit telem_unit,
0117               struct telemetry_evtlog *evtlog, int len);
0118 
0119 int telemetry_raw_read_events(enum telemetry_unit telem_unit,
0120                   struct telemetry_evtlog *evtlog, int len);
0121 
0122 int telemetry_read_eventlog(enum telemetry_unit telem_unit,
0123                 struct telemetry_evtlog *evtlog, int len);
0124 
0125 int telemetry_raw_read_eventlog(enum telemetry_unit telem_unit,
0126                 struct telemetry_evtlog *evtlog, int len);
0127 
0128 int telemetry_get_sampling_period(u8 *pss_min_period, u8 *pss_max_period,
0129                   u8 *ioss_min_period, u8 *ioss_max_period);
0130 
0131 int telemetry_set_sampling_period(u8 pss_period, u8 ioss_period);
0132 
0133 int telemetry_set_trace_verbosity(enum telemetry_unit telem_unit,
0134                   u32 verbosity);
0135 
0136 int telemetry_get_trace_verbosity(enum telemetry_unit telem_unit,
0137                   u32 *verbosity);
0138 
0139 #endif /* INTEL_TELEMETRY_H */