| From 11b8d39376e9bc2dd14119444034e8b17fd244ed Mon Sep 17 00:00:00 2001 |
| From: Christian Gmeiner <christian.gmeiner@gmail.com> |
| Date: Wed, 31 Jul 2019 23:30:34 +0200 |
| Subject: [PATCH] etnaviv: perfmon: fix total and idle HI cyleces readout |
| |
| commit 15ff4a7b584163b12b118a2c381529f05ff3a94d upstream. |
| |
| As seen at CodeAurora's linux-imx git repo in imx_4.19.35_1.0.0 branch. |
| |
| Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> |
| Signed-off-by: Lucas Stach <l.stach@pengutronix.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/gpu/drm/etnaviv/etnaviv_perfmon.c b/drivers/gpu/drm/etnaviv/etnaviv_perfmon.c |
| index 4227a4006c34..db1a341c0d49 100644 |
| --- a/drivers/gpu/drm/etnaviv/etnaviv_perfmon.c |
| +++ b/drivers/gpu/drm/etnaviv/etnaviv_perfmon.c |
| @@ -4,6 +4,7 @@ |
| * Copyright (C) 2017 Zodiac Inflight Innovations |
| */ |
| |
| +#include "common.xml.h" |
| #include "etnaviv_gpu.h" |
| #include "etnaviv_perfmon.h" |
| #include "state_hi.xml.h" |
| @@ -35,13 +36,6 @@ struct etnaviv_pm_domain_meta { |
| u32 nr_domains; |
| }; |
| |
| -static u32 simple_reg_read(struct etnaviv_gpu *gpu, |
| - const struct etnaviv_pm_domain *domain, |
| - const struct etnaviv_pm_signal *signal) |
| -{ |
| - return gpu_read(gpu, signal->data); |
| -} |
| - |
| static u32 perf_reg_read(struct etnaviv_gpu *gpu, |
| const struct etnaviv_pm_domain *domain, |
| const struct etnaviv_pm_signal *signal) |
| @@ -75,6 +69,34 @@ static u32 pipe_reg_read(struct etnaviv_gpu *gpu, |
| return value; |
| } |
| |
| +static u32 hi_total_cycle_read(struct etnaviv_gpu *gpu, |
| + const struct etnaviv_pm_domain *domain, |
| + const struct etnaviv_pm_signal *signal) |
| +{ |
| + u32 reg = VIVS_HI_PROFILE_TOTAL_CYCLES; |
| + |
| + if (gpu->identity.model == chipModel_GC880 || |
| + gpu->identity.model == chipModel_GC2000 || |
| + gpu->identity.model == chipModel_GC2100) |
| + reg = VIVS_MC_PROFILE_CYCLE_COUNTER; |
| + |
| + return gpu_read(gpu, reg); |
| +} |
| + |
| +static u32 hi_total_idle_cycle_read(struct etnaviv_gpu *gpu, |
| + const struct etnaviv_pm_domain *domain, |
| + const struct etnaviv_pm_signal *signal) |
| +{ |
| + u32 reg = VIVS_HI_PROFILE_IDLE_CYCLES; |
| + |
| + if (gpu->identity.model == chipModel_GC880 || |
| + gpu->identity.model == chipModel_GC2000 || |
| + gpu->identity.model == chipModel_GC2100) |
| + reg = VIVS_HI_PROFILE_TOTAL_CYCLES; |
| + |
| + return gpu_read(gpu, reg); |
| +} |
| + |
| static const struct etnaviv_pm_domain doms_3d[] = { |
| { |
| .name = "HI", |
| @@ -84,13 +106,13 @@ static const struct etnaviv_pm_domain doms_3d[] = { |
| .signal = (const struct etnaviv_pm_signal[]) { |
| { |
| "TOTAL_CYCLES", |
| - VIVS_HI_PROFILE_TOTAL_CYCLES, |
| - &simple_reg_read |
| + 0, |
| + &hi_total_cycle_read |
| }, |
| { |
| "IDLE_CYCLES", |
| - VIVS_HI_PROFILE_IDLE_CYCLES, |
| - &simple_reg_read |
| + 0, |
| + &hi_total_idle_cycle_read |
| }, |
| { |
| "AXI_CYCLES_READ_REQUEST_STALLED", |
| -- |
| 2.7.4 |
| |