|
16 | 16 |
|
17 | 17 | #define GPU_PAS_ID 13 |
18 | 18 |
|
| 19 | +static u64 read_gmu_ao_counter(struct a6xx_gpu *a6xx_gpu) |
| 20 | +{ |
| 21 | + u64 count_hi, count_lo, temp; |
| 22 | + |
| 23 | + do { |
| 24 | + count_hi = gmu_read(&a6xx_gpu->gmu, REG_A6XX_GMU_ALWAYS_ON_COUNTER_H); |
| 25 | + count_lo = gmu_read(&a6xx_gpu->gmu, REG_A6XX_GMU_ALWAYS_ON_COUNTER_L); |
| 26 | + temp = gmu_read(&a6xx_gpu->gmu, REG_A6XX_GMU_ALWAYS_ON_COUNTER_H); |
| 27 | + } while (unlikely(count_hi != temp)); |
| 28 | + |
| 29 | + return (count_hi << 32) | count_lo; |
| 30 | +} |
| 31 | + |
19 | 32 | static bool fence_status_check(struct msm_gpu *gpu, u32 offset, u32 value, u32 status, u32 mask) |
20 | 33 | { |
21 | 34 | /* Success if !writedropped0/1 */ |
@@ -376,8 +389,7 @@ static void a6xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit) |
376 | 389 | OUT_RING(ring, upper_32_bits(rbmemptr(ring, fence))); |
377 | 390 | OUT_RING(ring, submit->seqno); |
378 | 391 |
|
379 | | - trace_msm_gpu_submit_flush(submit, |
380 | | - gpu_read64(gpu, REG_A6XX_CP_ALWAYS_ON_COUNTER)); |
| 392 | + trace_msm_gpu_submit_flush(submit, read_gmu_ao_counter(a6xx_gpu)); |
381 | 393 |
|
382 | 394 | a6xx_flush(gpu, ring); |
383 | 395 | } |
@@ -577,8 +589,7 @@ static void a7xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit) |
577 | 589 | } |
578 | 590 |
|
579 | 591 |
|
580 | | - trace_msm_gpu_submit_flush(submit, |
581 | | - gpu_read64(gpu, REG_A6XX_CP_ALWAYS_ON_COUNTER)); |
| 592 | + trace_msm_gpu_submit_flush(submit, read_gmu_ao_counter(a6xx_gpu)); |
582 | 593 |
|
583 | 594 | a6xx_flush(gpu, ring); |
584 | 595 |
|
@@ -2268,16 +2279,7 @@ static int a6xx_gmu_get_timestamp(struct msm_gpu *gpu, uint64_t *value) |
2268 | 2279 | struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); |
2269 | 2280 | struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu); |
2270 | 2281 |
|
2271 | | - mutex_lock(&a6xx_gpu->gmu.lock); |
2272 | | - |
2273 | | - /* Force the GPU power on so we can read this register */ |
2274 | | - a6xx_gmu_set_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET); |
2275 | | - |
2276 | | - *value = gpu_read64(gpu, REG_A6XX_CP_ALWAYS_ON_COUNTER); |
2277 | | - |
2278 | | - a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET); |
2279 | | - |
2280 | | - mutex_unlock(&a6xx_gpu->gmu.lock); |
| 2282 | + *value = read_gmu_ao_counter(a6xx_gpu); |
2281 | 2283 |
|
2282 | 2284 | return 0; |
2283 | 2285 | } |
|
0 commit comments