diff options
| author | Saravana Kannan <skannan@codeaurora.org> | 2015-06-11 15:33:03 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:04:23 -0700 |
| commit | 75ec9ed0ef4f74ac3cc4109d9ea76d41ff82f4f8 (patch) | |
| tree | ea25ffeb12d0799269e100c17e21989ca13ae4a4 /drivers/devfreq | |
| parent | 00c37970704aa8ff0f9000263f5a0fd47b34843c (diff) | |
PM / devfreq: bimc-bwmon: Fix counter clearing
The counter needs to be cleared and acknowledged before clearing the IRQ
bits. Otherwise, the HW could set the IRQ bit again if the old counter
value was higher than the threshold. So, add a memory barrier after
clearing the counter.
Change-Id: I35f9f7905b05b8a185eb94d04d9c0a8ccfc2db51
Signed-off-by: Saravana Kannan <skannan@codeaurora.org>
Diffstat (limited to 'drivers/devfreq')
| -rw-r--r-- | drivers/devfreq/bimc-bwmon.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/devfreq/bimc-bwmon.c b/drivers/devfreq/bimc-bwmon.c index f40899be539a..f3ec5d140a6c 100644 --- a/drivers/devfreq/bimc-bwmon.c +++ b/drivers/devfreq/bimc-bwmon.c @@ -78,6 +78,12 @@ static void mon_disable(struct bwmon *m) static void mon_clear(struct bwmon *m) { writel_relaxed(0x1, MON_CLEAR(m)); + /* + * The counter clear and IRQ clear bits are not in the same 4KB + * region. So, we need to make sure the counter clear is completed + * before we try to clear the IRQ or do any other counter operations. + */ + mb(); } static void mon_irq_enable(struct bwmon *m) |
