diff options
| author | Rajesh Kemisetti <rajeshk@codeaurora.org> | 2017-01-27 00:04:10 +0530 |
|---|---|---|
| committer | Rajesh Kemisetti <rajeshk@codeaurora.org> | 2017-01-27 08:44:35 +0530 |
| commit | 832c38f7301917a3d8cf3636495e357a13de7175 (patch) | |
| tree | aa26d1ccfab252b33d4f068e5e73a051d13bbd1b /drivers/gpu | |
| parent | 314869eb56763d34f91d5483b0d510267894fadd (diff) | |
msm: kgsl: Check GPMU presence before accessing power counters
Some targets do not have GPMU block in GPU and register read
or write into those registers is not valid.
To prevent this, check GPMU presence and then proceed.
Change-Id: I0992125af8cda4b8235aedb64f6ef8868ae95f20
Signed-off-by: Rajesh Kemisetti <rajeshk@codeaurora.org>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/msm/adreno_perfcounter.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/gpu/msm/adreno_perfcounter.c b/drivers/gpu/msm/adreno_perfcounter.c index f5f99c3ebb4a..5fecdcfb6364 100644 --- a/drivers/gpu/msm/adreno_perfcounter.c +++ b/drivers/gpu/msm/adreno_perfcounter.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2002,2007-2016, The Linux Foundation. All rights reserved. +/* Copyright (c) 2002,2007-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -638,6 +638,9 @@ static void _perfcounter_enable_vbif_pwr(struct adreno_device *adreno_dev, static void _power_counter_enable_alwayson(struct adreno_device *adreno_dev, struct adreno_perfcounters *counters) { + if (!ADRENO_FEATURE(adreno_dev, ADRENO_GPMU)) + return; + kgsl_regwrite(KGSL_DEVICE(adreno_dev), A5XX_GPMU_ALWAYS_ON_COUNTER_RESET, 1); counters->groups[KGSL_PERFCOUNTER_GROUP_ALWAYSON_PWR].regs[0].value = 0; @@ -674,6 +677,9 @@ static void _power_counter_enable_default(struct adreno_device *adreno_dev, struct kgsl_device *device = KGSL_DEVICE(adreno_dev); struct adreno_perfcount_register *reg; + if (!ADRENO_FEATURE(adreno_dev, ADRENO_GPMU)) + return; + reg = &counters->groups[group].regs[counter]; kgsl_regwrite(device, reg->select, countable); kgsl_regwrite(device, A5XX_GPMU_POWER_COUNTER_ENABLE, 1); @@ -927,6 +933,9 @@ static uint64_t _perfcounter_read_pwrcntr(struct adreno_device *adreno_dev, struct adreno_perfcount_register *reg; unsigned int lo = 0, hi = 0; + if (!ADRENO_FEATURE(adreno_dev, ADRENO_GPMU)) + return 0; + reg = &group->regs[counter]; kgsl_regread(device, reg->offset, &lo); |
