Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 1 | /** |
Jon Medhurst | b1d0744 | 2015-05-08 12:04:18 +0100 | [diff] [blame] | 2 | * Copyright (C) ARM Limited 2010-2015. All rights reserved. |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 3 | * |
| 4 | * This program is free software; you can redistribute it and/or modify |
| 5 | * it under the terms of the GNU General Public License version 2 as |
| 6 | * published by the Free Software Foundation. |
| 7 | */ |
| 8 | |
| 9 | #include "gator.h" |
| 10 | |
| 11 | #include <linux/slab.h> |
| 12 | #include <linux/module.h> |
| 13 | #include <linux/time.h> |
| 14 | #include <linux/math64.h> |
| 15 | |
| 16 | #ifdef MALI_SUPPORT |
Jon Medhurst | 15ce78d | 2014-04-10 09:02:02 +0100 | [diff] [blame] | 17 | #ifdef MALI_DIR_MIDGARD |
| 18 | /* New DDK Directory structure with kernel/drivers/gpu/arm/midgard*/ |
| 19 | #include "mali_linux_trace.h" |
| 20 | #else |
| 21 | /* Old DDK Directory structure with kernel/drivers/gpu/arm/t6xx*/ |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 22 | #include "linux/mali_linux_trace.h" |
| 23 | #endif |
Jon Medhurst | 15ce78d | 2014-04-10 09:02:02 +0100 | [diff] [blame] | 24 | #endif |
| 25 | |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 26 | /* |
| 27 | * Taken from MALI_PROFILING_EVENT_TYPE_* items in Mali DDK. |
| 28 | */ |
| 29 | #define EVENT_TYPE_SINGLE 0 |
| 30 | #define EVENT_TYPE_START 1 |
| 31 | #define EVENT_TYPE_STOP 2 |
| 32 | #define EVENT_TYPE_SUSPEND 3 |
| 33 | #define EVENT_TYPE_RESUME 4 |
| 34 | |
| 35 | /* Note whether tracepoints have been registered */ |
| 36 | static int mali_timeline_trace_registered; |
| 37 | static int mali_job_slots_trace_registered; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 38 | |
| 39 | enum { |
| 40 | GPU_UNIT_NONE = 0, |
| 41 | GPU_UNIT_VP, |
| 42 | GPU_UNIT_FP, |
| 43 | GPU_UNIT_CL, |
| 44 | NUMBER_OF_GPU_UNITS |
| 45 | }; |
| 46 | |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 47 | #if defined(MALI_SUPPORT) |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 48 | |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 49 | struct mali_activity { |
| 50 | int core; |
| 51 | int key; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 52 | int count; |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 53 | int last_activity; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 54 | int last_pid; |
| 55 | }; |
| 56 | |
| 57 | #define NUMBER_OF_GPU_CORES 16 |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 58 | static struct mali_activity mali_activities[NUMBER_OF_GPU_UNITS*NUMBER_OF_GPU_CORES]; |
| 59 | static DEFINE_SPINLOCK(mali_activities_lock); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 60 | |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 61 | /* Only one event should be running on a unit and core at a time (ie, |
| 62 | * a start event can only be followed by a stop and vice versa), but |
| 63 | * because the kernel only knows when a job is enqueued and not |
| 64 | * started, it is possible for a start1, start2, stop1, stop2. Change |
| 65 | * it back into start1, stop1, start2, stop2 by queueing up start2 and |
| 66 | * releasing it when stop1 is received. |
Jon Medhurst | d369859 | 2013-10-10 16:48:56 +0100 | [diff] [blame] | 67 | */ |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 68 | |
| 69 | static int mali_activity_index(int core, int key) |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 70 | { |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 71 | int i; |
| 72 | |
| 73 | for (i = 0; i < ARRAY_SIZE(mali_activities); ++i) { |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 74 | if ((mali_activities[i].core == core) && (mali_activities[i].key == key)) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 75 | break; |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 76 | if ((mali_activities[i].core == 0) && (mali_activities[i].key == 0)) { |
| 77 | mali_activities[i].core = core; |
| 78 | mali_activities[i].key = key; |
| 79 | break; |
| 80 | } |
| 81 | } |
| 82 | BUG_ON(i >= ARRAY_SIZE(mali_activities)); |
| 83 | |
| 84 | return i; |
| 85 | } |
| 86 | |
| 87 | static void mali_activity_enqueue(int core, int key, int activity, int pid) |
| 88 | { |
| 89 | int i; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 90 | int count; |
| 91 | |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 92 | spin_lock(&mali_activities_lock); |
| 93 | i = mali_activity_index(core, key); |
| 94 | |
| 95 | count = mali_activities[i].count; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 96 | BUG_ON(count < 0); |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 97 | ++mali_activities[i].count; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 98 | if (count) { |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 99 | mali_activities[i].last_activity = activity; |
| 100 | mali_activities[i].last_pid = pid; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 101 | } |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 102 | spin_unlock(&mali_activities_lock); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 103 | |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 104 | if (!count) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 105 | gator_marshal_activity_switch(core, key, activity, pid); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 106 | } |
| 107 | |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 108 | static void mali_activity_stop(int core, int key) |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 109 | { |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 110 | int i; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 111 | int count; |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 112 | int last_activity = 0; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 113 | int last_pid = 0; |
| 114 | |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 115 | spin_lock(&mali_activities_lock); |
| 116 | i = mali_activity_index(core, key); |
| 117 | |
| 118 | if (mali_activities[i].count == 0) { |
| 119 | spin_unlock(&mali_activities_lock); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 120 | return; |
| 121 | } |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 122 | --mali_activities[i].count; |
| 123 | count = mali_activities[i].count; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 124 | if (count) { |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 125 | last_activity = mali_activities[i].last_activity; |
| 126 | last_pid = mali_activities[i].last_pid; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 127 | } |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 128 | spin_unlock(&mali_activities_lock); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 129 | |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 130 | gator_marshal_activity_switch(core, key, 0, 0); |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 131 | if (count) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 132 | gator_marshal_activity_switch(core, key, last_activity, last_pid); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 133 | } |
| 134 | |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 135 | void mali_activity_clear(struct mali_counter mali_activity[], size_t mali_activity_size) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 136 | { |
| 137 | int activity; |
| 138 | int cores; |
| 139 | int core; |
| 140 | |
| 141 | for (activity = 0; activity < mali_activity_size; ++activity) { |
| 142 | cores = mali_activity[activity].cores; |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 143 | if (cores < 0) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 144 | cores = 1; |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 145 | for (core = 0; core < cores; ++core) { |
| 146 | if (mali_activity[activity].enabled) { |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 147 | preempt_disable(); |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 148 | gator_marshal_activity_switch(core, mali_activity[activity].key, 0, 0); |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 149 | preempt_enable(); |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 150 | } |
| 151 | } |
| 152 | } |
| 153 | } |
| 154 | |
| 155 | #endif |
| 156 | |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 157 | #if defined(MALI_SUPPORT) && (MALI_SUPPORT != MALI_MIDGARD) |
Jon Medhurst | d369859 | 2013-10-10 16:48:56 +0100 | [diff] [blame] | 158 | #include "gator_events_mali_4xx.h" |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 159 | |
| 160 | /* |
| 161 | * Taken from MALI_PROFILING_EVENT_CHANNEL_* in Mali DDK. |
| 162 | */ |
| 163 | enum { |
| 164 | EVENT_CHANNEL_SOFTWARE = 0, |
| 165 | EVENT_CHANNEL_VP0 = 1, |
| 166 | EVENT_CHANNEL_FP0 = 5, |
| 167 | EVENT_CHANNEL_FP1, |
| 168 | EVENT_CHANNEL_FP2, |
| 169 | EVENT_CHANNEL_FP3, |
| 170 | EVENT_CHANNEL_FP4, |
| 171 | EVENT_CHANNEL_FP5, |
| 172 | EVENT_CHANNEL_FP6, |
| 173 | EVENT_CHANNEL_FP7, |
| 174 | EVENT_CHANNEL_GPU = 21 |
| 175 | }; |
| 176 | |
| 177 | /** |
| 178 | * These events are applicable when the type MALI_PROFILING_EVENT_TYPE_SINGLE is used from the GPU channel |
| 179 | */ |
| 180 | enum { |
| 181 | EVENT_REASON_SINGLE_GPU_NONE = 0, |
| 182 | EVENT_REASON_SINGLE_GPU_FREQ_VOLT_CHANGE = 1, |
| 183 | }; |
| 184 | |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 185 | struct mali_counter mali_activity[2]; |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 186 | |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 187 | GATOR_DEFINE_PROBE(mali_timeline_event, TP_PROTO(unsigned int event_id, unsigned int d0, unsigned int d1, unsigned int d2, unsigned int d3, unsigned int d4)) |
| 188 | { |
| 189 | unsigned int component, state; |
| 190 | |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 191 | /* do as much work as possible before disabling interrupts */ |
| 192 | component = (event_id >> 16) & 0xFF; /* component is an 8-bit field */ |
| 193 | state = (event_id >> 24) & 0xF; /* state is a 4-bit field */ |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 194 | |
| 195 | switch (state) { |
| 196 | case EVENT_TYPE_START: |
| 197 | if (component == EVENT_CHANNEL_VP0) { |
| 198 | /* tgid = d0; pid = d1; */ |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 199 | if (mali_activity[1].enabled) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 200 | mali_activity_enqueue(0, mali_activity[1].key, 1, d1); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 201 | } else if (component >= EVENT_CHANNEL_FP0 && component <= EVENT_CHANNEL_FP7) { |
| 202 | /* tgid = d0; pid = d1; */ |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 203 | if (mali_activity[0].enabled) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 204 | mali_activity_enqueue(component - EVENT_CHANNEL_FP0, mali_activity[0].key, 1, d1); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 205 | } |
| 206 | break; |
| 207 | |
| 208 | case EVENT_TYPE_STOP: |
| 209 | if (component == EVENT_CHANNEL_VP0) { |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 210 | if (mali_activity[1].enabled) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 211 | mali_activity_stop(0, mali_activity[1].key); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 212 | } else if (component >= EVENT_CHANNEL_FP0 && component <= EVENT_CHANNEL_FP7) { |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 213 | if (mali_activity[0].enabled) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 214 | mali_activity_stop(component - EVENT_CHANNEL_FP0, mali_activity[0].key); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 215 | } |
| 216 | break; |
| 217 | |
| 218 | case EVENT_TYPE_SINGLE: |
| 219 | if (component == EVENT_CHANNEL_GPU) { |
| 220 | unsigned int reason = (event_id & 0xffff); |
| 221 | |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 222 | if (reason == EVENT_REASON_SINGLE_GPU_FREQ_VOLT_CHANGE) |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 223 | gator_events_mali_log_dvfs_event(d0, d1); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 224 | } |
| 225 | break; |
| 226 | |
| 227 | default: |
| 228 | break; |
| 229 | } |
| 230 | } |
| 231 | #endif |
| 232 | |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 233 | #if defined(MALI_SUPPORT) && (MALI_SUPPORT == MALI_MIDGARD) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 234 | |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 235 | struct mali_counter mali_activity[3]; |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 236 | |
Jon Medhurst | d369859 | 2013-10-10 16:48:56 +0100 | [diff] [blame] | 237 | #if defined(MALI_JOB_SLOTS_EVENT_CHANGED) |
| 238 | GATOR_DEFINE_PROBE(mali_job_slots_event, TP_PROTO(unsigned int event_id, unsigned int tgid, unsigned int pid, unsigned char job_id)) |
| 239 | #else |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 240 | GATOR_DEFINE_PROBE(mali_job_slots_event, TP_PROTO(unsigned int event_id, unsigned int tgid, unsigned int pid)) |
Jon Medhurst | d369859 | 2013-10-10 16:48:56 +0100 | [diff] [blame] | 241 | #endif |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 242 | { |
| 243 | unsigned int component, state, unit; |
Jon Medhurst | d369859 | 2013-10-10 16:48:56 +0100 | [diff] [blame] | 244 | #if !defined(MALI_JOB_SLOTS_EVENT_CHANGED) |
| 245 | unsigned char job_id = 0; |
| 246 | #endif |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 247 | |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 248 | component = (event_id >> 16) & 0xFF; /* component is an 8-bit field */ |
| 249 | state = (event_id >> 24) & 0xF; /* state is a 4-bit field */ |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 250 | |
| 251 | switch (component) { |
| 252 | case 0: |
| 253 | unit = GPU_UNIT_FP; |
| 254 | break; |
| 255 | case 1: |
| 256 | unit = GPU_UNIT_VP; |
| 257 | break; |
| 258 | case 2: |
| 259 | unit = GPU_UNIT_CL; |
| 260 | break; |
| 261 | default: |
| 262 | unit = GPU_UNIT_NONE; |
| 263 | } |
| 264 | |
| 265 | if (unit != GPU_UNIT_NONE) { |
| 266 | switch (state) { |
| 267 | case EVENT_TYPE_START: |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 268 | if (mali_activity[component].enabled) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 269 | mali_activity_enqueue(0, mali_activity[component].key, 1, (pid != 0 ? pid : tgid)); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 270 | break; |
| 271 | case EVENT_TYPE_STOP: |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 272 | default: /* Some jobs can be soft-stopped, so ensure that this terminates the activity trace. */ |
| 273 | if (mali_activity[component].enabled) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 274 | mali_activity_stop(0, mali_activity[component].key); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 275 | break; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 276 | } |
| 277 | } |
| 278 | } |
| 279 | #endif |
| 280 | |
Jon Medhurst | 15ce78d | 2014-04-10 09:02:02 +0100 | [diff] [blame] | 281 | static int gator_trace_gpu_start(void) |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 282 | { |
| 283 | /* |
| 284 | * Returns nonzero for installation failed |
| 285 | * Absence of gpu trace points is not an error |
| 286 | */ |
| 287 | |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 288 | #if defined(MALI_SUPPORT) |
| 289 | memset(&mali_activities, 0, sizeof(mali_activities)); |
| 290 | #endif |
| 291 | mali_timeline_trace_registered = mali_job_slots_trace_registered = 0; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 292 | |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 293 | #if defined(MALI_SUPPORT) && (MALI_SUPPORT != MALI_MIDGARD) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 294 | mali_activity_clear(mali_activity, ARRAY_SIZE(mali_activity)); |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 295 | if (!GATOR_REGISTER_TRACE(mali_timeline_event)) |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 296 | mali_timeline_trace_registered = 1; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 297 | #endif |
| 298 | |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 299 | #if defined(MALI_SUPPORT) && (MALI_SUPPORT == MALI_MIDGARD) |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 300 | mali_activity_clear(mali_activity, ARRAY_SIZE(mali_activity)); |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 301 | if (!GATOR_REGISTER_TRACE(mali_job_slots_event)) |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 302 | mali_job_slots_trace_registered = 1; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 303 | #endif |
| 304 | |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 305 | return 0; |
| 306 | } |
| 307 | |
Jon Medhurst | 15ce78d | 2014-04-10 09:02:02 +0100 | [diff] [blame] | 308 | static void gator_trace_gpu_stop(void) |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 309 | { |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 310 | #if defined(MALI_SUPPORT) && (MALI_SUPPORT != MALI_MIDGARD) |
| 311 | if (mali_timeline_trace_registered) |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 312 | GATOR_UNREGISTER_TRACE(mali_timeline_event); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 313 | #endif |
| 314 | |
Jon Medhurst | 96b5615 | 2014-10-30 18:01:15 +0000 | [diff] [blame] | 315 | #if defined(MALI_SUPPORT) && (MALI_SUPPORT == MALI_MIDGARD) |
| 316 | if (mali_job_slots_trace_registered) |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 317 | GATOR_UNREGISTER_TRACE(mali_job_slots_event); |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 318 | #endif |
| 319 | |
Jon Medhurst | e31266f | 2014-08-04 15:47:44 +0100 | [diff] [blame] | 320 | mali_timeline_trace_registered = mali_job_slots_trace_registered = 0; |
Jon Medhurst | aaf37a3 | 2013-06-11 12:10:56 +0100 | [diff] [blame] | 321 | } |