summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorRajesh Kemisetti <rajeshk@codeaurora.org>2017-01-27 00:04:10 +0530
committerRajesh Kemisetti <rajeshk@codeaurora.org>2017-01-27 08:44:35 +0530
commit832c38f7301917a3d8cf3636495e357a13de7175 (patch)
treeaa26d1ccfab252b33d4f068e5e73a051d13bbd1b /drivers/gpu
parent314869eb56763d34f91d5483b0d510267894fadd (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.c11
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);