1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright © 2021 Collabora, Ltd. 3*61046927SAndroid Build Coastguard Worker * Author: Antonio Caggiano <[email protected]> 4*61046927SAndroid Build Coastguard Worker * 5*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a copy 6*61046927SAndroid Build Coastguard Worker * of this software and associated documentation files (the "Software"), to deal 7*61046927SAndroid Build Coastguard Worker * in the Software without restriction, including without limitation the rights 8*61046927SAndroid Build Coastguard Worker * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9*61046927SAndroid Build Coastguard Worker * copies of the Software, and to permit persons to whom the Software is 10*61046927SAndroid Build Coastguard Worker * furnished to do so, subject to the following conditions: 11*61046927SAndroid Build Coastguard Worker * 12*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included in 13*61046927SAndroid Build Coastguard Worker * all copies or substantial portions of the Software. 14*61046927SAndroid Build Coastguard Worker * 15*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18*61046927SAndroid Build Coastguard Worker * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20*61046927SAndroid Build Coastguard Worker * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21*61046927SAndroid Build Coastguard Worker * THE SOFTWARE. 22*61046927SAndroid Build Coastguard Worker */ 23*61046927SAndroid Build Coastguard Worker 24*61046927SAndroid Build Coastguard Worker #ifndef PAN_PERF_H 25*61046927SAndroid Build Coastguard Worker #define PAN_PERF_H 26*61046927SAndroid Build Coastguard Worker 27*61046927SAndroid Build Coastguard Worker #include <stdint.h> 28*61046927SAndroid Build Coastguard Worker 29*61046927SAndroid Build Coastguard Worker #if defined(__cplusplus) 30*61046927SAndroid Build Coastguard Worker extern "C" { 31*61046927SAndroid Build Coastguard Worker #endif 32*61046927SAndroid Build Coastguard Worker 33*61046927SAndroid Build Coastguard Worker #define PAN_PERF_MAX_CATEGORIES 4 34*61046927SAndroid Build Coastguard Worker #define PAN_PERF_MAX_COUNTERS 64 35*61046927SAndroid Build Coastguard Worker 36*61046927SAndroid Build Coastguard Worker struct pan_kmod_dev; 37*61046927SAndroid Build Coastguard Worker struct pan_kmod_dev_props; 38*61046927SAndroid Build Coastguard Worker struct panfrost_model; 39*61046927SAndroid Build Coastguard Worker struct panfrost_perf_category; 40*61046927SAndroid Build Coastguard Worker struct panfrost_perf; 41*61046927SAndroid Build Coastguard Worker 42*61046927SAndroid Build Coastguard Worker enum panfrost_perf_counter_units { 43*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_CYCLES, 44*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_JOBS, 45*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_TASKS, 46*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_PRIMITIVES, 47*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_BEATS, 48*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_REQUESTS, 49*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_WARPS, 50*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_QUADS, 51*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_TILES, 52*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_INSTRUCTIONS, 53*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_TRANSACTIONS, 54*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_THREADS, 55*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_BYTES, 56*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_PIXELS, 57*61046927SAndroid Build Coastguard Worker PAN_PERF_COUNTER_UNITS_ISSUES, 58*61046927SAndroid Build Coastguard Worker }; 59*61046927SAndroid Build Coastguard Worker 60*61046927SAndroid Build Coastguard Worker struct panfrost_perf_counter { 61*61046927SAndroid Build Coastguard Worker const char *name; 62*61046927SAndroid Build Coastguard Worker const char *desc; 63*61046927SAndroid Build Coastguard Worker const char *symbol_name; 64*61046927SAndroid Build Coastguard Worker enum panfrost_perf_counter_units units; 65*61046927SAndroid Build Coastguard Worker // Offset of this counter's value within the category 66*61046927SAndroid Build Coastguard Worker uint32_t offset; 67*61046927SAndroid Build Coastguard Worker unsigned category_index; 68*61046927SAndroid Build Coastguard Worker }; 69*61046927SAndroid Build Coastguard Worker 70*61046927SAndroid Build Coastguard Worker struct panfrost_perf_category { 71*61046927SAndroid Build Coastguard Worker const char *name; 72*61046927SAndroid Build Coastguard Worker 73*61046927SAndroid Build Coastguard Worker struct panfrost_perf_counter counters[PAN_PERF_MAX_COUNTERS]; 74*61046927SAndroid Build Coastguard Worker uint32_t n_counters; 75*61046927SAndroid Build Coastguard Worker 76*61046927SAndroid Build Coastguard Worker /* Offset of this category within the counters memory block */ 77*61046927SAndroid Build Coastguard Worker unsigned offset; 78*61046927SAndroid Build Coastguard Worker }; 79*61046927SAndroid Build Coastguard Worker 80*61046927SAndroid Build Coastguard Worker struct panfrost_perf_config { 81*61046927SAndroid Build Coastguard Worker const char *name; 82*61046927SAndroid Build Coastguard Worker 83*61046927SAndroid Build Coastguard Worker struct panfrost_perf_category categories[PAN_PERF_MAX_CATEGORIES]; 84*61046927SAndroid Build Coastguard Worker uint32_t n_categories; 85*61046927SAndroid Build Coastguard Worker }; 86*61046927SAndroid Build Coastguard Worker 87*61046927SAndroid Build Coastguard Worker struct panfrost_perf { 88*61046927SAndroid Build Coastguard Worker struct pan_kmod_dev *dev; 89*61046927SAndroid Build Coastguard Worker unsigned core_id_range; 90*61046927SAndroid Build Coastguard Worker const struct panfrost_perf_config *cfg; 91*61046927SAndroid Build Coastguard Worker 92*61046927SAndroid Build Coastguard Worker // Memory where to dump counter values 93*61046927SAndroid Build Coastguard Worker uint32_t *counter_values; 94*61046927SAndroid Build Coastguard Worker uint32_t n_counter_values; 95*61046927SAndroid Build Coastguard Worker 96*61046927SAndroid Build Coastguard Worker /* Offsets of categories */ 97*61046927SAndroid Build Coastguard Worker unsigned category_offset[PAN_PERF_MAX_CATEGORIES]; 98*61046927SAndroid Build Coastguard Worker }; 99*61046927SAndroid Build Coastguard Worker 100*61046927SAndroid Build Coastguard Worker uint32_t panfrost_perf_counter_read(const struct panfrost_perf_counter *counter, 101*61046927SAndroid Build Coastguard Worker const struct panfrost_perf *perf); 102*61046927SAndroid Build Coastguard Worker 103*61046927SAndroid Build Coastguard Worker void panfrost_perf_init(struct panfrost_perf *perf, int fd); 104*61046927SAndroid Build Coastguard Worker 105*61046927SAndroid Build Coastguard Worker int panfrost_perf_enable(struct panfrost_perf *perf); 106*61046927SAndroid Build Coastguard Worker 107*61046927SAndroid Build Coastguard Worker int panfrost_perf_disable(struct panfrost_perf *perf); 108*61046927SAndroid Build Coastguard Worker 109*61046927SAndroid Build Coastguard Worker int panfrost_perf_dump(struct panfrost_perf *perf); 110*61046927SAndroid Build Coastguard Worker 111*61046927SAndroid Build Coastguard Worker #if defined(__cplusplus) 112*61046927SAndroid Build Coastguard Worker } // extern "C" 113*61046927SAndroid Build Coastguard Worker #endif 114*61046927SAndroid Build Coastguard Worker 115*61046927SAndroid Build Coastguard Worker #endif // PAN_PERF_H 116