From 75ec9ed0ef4f74ac3cc4109d9ea76d41ff82f4f8 Mon Sep 17 00:00:00 2001 From: Saravana Kannan Date: Thu, 11 Jun 2015 15:33:03 -0700 Subject: [PATCH] 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 --- drivers/devfreq/bimc-bwmon.c | 6 ++++++ 1 file changed, 6 insertions(+) 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)