summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/tegra3_actmon.c
diff options
context:
space:
mode:
authorKarthik Ramakrishnan <karthikr@nvidia.com>2013-09-23 21:47:26 -0700
committerAjay Nandakumar <anandakumarm@nvidia.com>2013-10-03 19:17:50 +0530
commit69eccd644e454f459436c7601180a789a5bd50bb (patch)
tree6647067dbb44ed6824b60ceea8a1524929f87d0e /arch/arm/mach-tegra/tegra3_actmon.c
parentbd65c015c97c87454e9dc0988485cd4191fe4d0c (diff)
arm: tegra: Handle down interrupt of actmon
When the cpu load starts going down, the down interrupt is disabled. This stops further interrupts and if missed, the emc frequency is locked to high. The change re-enables down watermark interrupts if gets disabled due to emc lock. Bug 1338326 Change-Id: I838eb05b313f9ddc287226c25f23e115fe117599 Signed-off-by: Karthik Ramakrishnan <karthikr@nvidia.com> Reviewed-on: http://git-master/r/278131 (cherry picked from commit bbc6fff3b3fc0f964dba1ed6a22280d45119bd16) Reviewed-on: http://git-master/r/280205 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Puneet Saxena <puneets@nvidia.com> Tested-by: Puneet Saxena <puneets@nvidia.com> Reviewed-by: Sachin Nikam <snikam@nvidia.com> (cherry picked from commit fc68f39f4010db692892723086f4ae00622140ac) Signed-off-by: Ajay Nandakumar <anandakumarm@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/tegra3_actmon.c')
-rw-r--r--arch/arm/mach-tegra/tegra3_actmon.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/tegra3_actmon.c b/arch/arm/mach-tegra/tegra3_actmon.c
index 4960146a9f33..f76554dd3fc5 100644
--- a/arch/arm/mach-tegra/tegra3_actmon.c
+++ b/arch/arm/mach-tegra/tegra3_actmon.c
@@ -257,6 +257,14 @@ irqreturn_t actmon_dev_isr(int irq, void *dev_id)
}
actmon_writel(val, offs(ACTMON_DEV_CTRL));
}
+ if (dev->avg_dependency_threshold) {
+ val = actmon_readl(offs(ACTMON_DEV_CTRL));
+ if (dev->avg_count >= dev->avg_dependency_threshold)
+ val |= ACTMON_DEV_CTRL_DOWN_WMARK_ENB;
+ else if (dev->boost_freq == 0)
+ val &= ~ACTMON_DEV_CTRL_DOWN_WMARK_ENB;
+ actmon_writel(val, offs(ACTMON_DEV_CTRL));
+ }
actmon_writel(0xffffffff, offs(ACTMON_DEV_INTR_STATUS)); /* clr all */
actmon_wmb();