summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJunjie Wu <junjiew@codeaurora.org>2015-08-12 17:48:46 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:04:30 -0700
commit3c83b5f06c702fbc4f6672f0cb4b9e4e60b84975 (patch)
tree040babd001f3aab88f2fd5a00beaa0e51248bb27 /drivers
parent6b034b3c5f9995e61a7c0d5b41f84b9d3b2e4ff9 (diff)
PM / devfreq: m4m-hwmon: Fix counter limit calculation
M4M counters are only 28-bit instead of 32-bit. Fix limit calculation to use the right max value. Change-Id: I91078842b72da80f6b6755bf8d808ff4b4142f10 Signed-off-by: Junjie Wu <junjiew@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/devfreq/m4m-hwmon.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/devfreq/m4m-hwmon.c b/drivers/devfreq/m4m-hwmon.c
index ceb99575b67c..51b077119cf3 100644
--- a/drivers/devfreq/m4m-hwmon.c
+++ b/drivers/devfreq/m4m-hwmon.c
@@ -50,6 +50,9 @@
#define CYC_CNTR_IDX 0
#define WASTED_CYC_CNTR_IDX 1
+/* counter is 28-bit */
+#define CNT_MAX 0x0FFFFFFFU
+
struct m4m_counter {
int idx;
u32 event_mask;
@@ -144,7 +147,7 @@ static unsigned long _mon_get_count(struct m4m_hwmon *m,
}
if (ov)
- cnt = U32_MAX - start + cur_cnt;
+ cnt = CNT_MAX - start + cur_cnt;
else
cnt = cur_cnt - start;
@@ -160,7 +163,11 @@ static unsigned long mon_get_count(struct m4m_hwmon *m,
static inline void mon_set_limit(struct m4m_hwmon *m, enum request_group grp,
unsigned int limit)
{
- u32 start = U32_MAX - limit;
+ u32 start;
+
+ if (limit >= CNT_MAX)
+ limit = CNT_MAX;
+ start = CNT_MAX - limit;
writel_relaxed(start, EVCNTR(m, m->cntr[grp].idx));
m->cntr[grp].last_start = start;