diff options
| -rw-r--r-- | drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c index cdc3d59a659d..631257c297fd 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c | |||
| @@ -761,18 +761,21 @@ static unsigned long a6xx_gpu_busy(struct msm_gpu *gpu) | |||
| 761 | { | 761 | { |
| 762 | struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); | 762 | struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); |
| 763 | struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu); | 763 | struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu); |
| 764 | u64 busy_cycles; | 764 | u64 busy_cycles, busy_time; |
| 765 | unsigned long busy_time; | ||
| 766 | 765 | ||
| 767 | busy_cycles = gmu_read64(&a6xx_gpu->gmu, | 766 | busy_cycles = gmu_read64(&a6xx_gpu->gmu, |
| 768 | REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_0_L, | 767 | REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_0_L, |
| 769 | REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_0_H); | 768 | REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_0_H); |
| 770 | 769 | ||
| 771 | busy_time = ((busy_cycles - gpu->devfreq.busy_cycles) * 10) / 192; | 770 | busy_time = (busy_cycles - gpu->devfreq.busy_cycles) * 10; |
| 771 | do_div(busy_time, 192); | ||
| 772 | 772 | ||
| 773 | gpu->devfreq.busy_cycles = busy_cycles; | 773 | gpu->devfreq.busy_cycles = busy_cycles; |
| 774 | 774 | ||
| 775 | return busy_time; | 775 | if (WARN_ON(busy_time > ~0LU)) |
| 776 | return ~0LU; | ||
| 777 | |||
| 778 | return (unsigned long)busy_time; | ||
| 776 | } | 779 | } |
| 777 | 780 | ||
| 778 | static const struct adreno_gpu_funcs funcs = { | 781 | static const struct adreno_gpu_funcs funcs = { |
