summaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2013-05-06 14:19:19 -0600
committerStephen Warren <swarren@nvidia.com>2013-08-13 12:07:56 -0600
commitb4f173752a56187bd55752b0474429202f2ab1d3 (patch)
tree64b5936abc2c238f5114b42915ba3958c32890af /include/linux
parent0447cfd75a6bad561ebf2b393dcb2263c261b6c5 (diff)
downloadlinux-stable-b4f173752a56187bd55752b0474429202f2ab1d3.tar.gz
linux-stable-b4f173752a56187bd55752b0474429202f2ab1d3.tar.bz2
linux-stable-b4f173752a56187bd55752b0474429202f2ab1d3.zip
ARM: tegra: disable LP2 cpuidle state if PCIe is enabled
Tegra20 HW appears to have a bug such that PCIe device interrupts, whether they are legacy IRQs or MSI, are lost when LP2 is enabled. To work around this, simply disable LP2 if any PCIe devices with interrupts are present. Detect this via the IRQ domain map operation. This is slightly over-conservative; if a device with an interrupt is present but the driver does not actually use them, LP2 will still be disabled. However, this is a reasonable trade-off which enables a simpler workaround. Signed-off-by: Stephen Warren <swarren@nvidia.com> Tested-by: Thierry Reding <treding@nvidia.com> Acked-by: Thierry Reding <treding@nvidia.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/tegra-cpuidle.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/linux/tegra-cpuidle.h b/include/linux/tegra-cpuidle.h
new file mode 100644
index 000000000000..dda3647242a4
--- /dev/null
+++ b/include/linux/tegra-cpuidle.h
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2013, NVIDIA CORPORATION. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ */
+
+#ifndef __LINUX_TEGRA_CPUIDLE_H__
+#define __LINUX_TEGRA_CPUIDLE_H__
+
+void tegra_cpuidle_pcie_irqs_in_use(void);
+
+#endif