summaryrefslogtreecommitdiff
path: root/drivers/irqchip/irq-gic.c
diff options
context:
space:
mode:
authorAbhijeet Dharmapurikar <adharmap@codeaurora.org>2010-12-13 12:04:27 -0800
committerYimin Peng <yiminp@codeaurora.org>2018-05-03 14:54:03 +0800
commit391e49f093de826af05db6583be86590c4c83610 (patch)
treef3a58cf75b5921bd51a32683569119528972f28a /drivers/irqchip/irq-gic.c
parent76330c4c308dfb9d89942737b21047d3260bfa3a (diff)
GIC: Show interrupts that triggered wakeup
This change is to satisfy the logging requirement of wakeup interrupts. Add code to log the trigger status of wakeup interrupts. This helps in debugging the cause of wakeup when the system is suspended Change-Id: I0f724296f9133433cdbc3271a9b91c6fa992a2ff Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Diffstat (limited to 'drivers/irqchip/irq-gic.c')
-rw-r--r--drivers/irqchip/irq-gic.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
index 2ca62ef5ff36..20800b1c93d5 100644
--- a/drivers/irqchip/irq-gic.c
+++ b/drivers/irqchip/irq-gic.c
@@ -258,11 +258,35 @@ static int gic_suspend(void)
return 0;
}
+static void gic_show_resume_irq(struct gic_chip_data *gic)
+{
+ unsigned int i;
+ u32 enabled;
+ u32 pending[32];
+ void __iomem *base = gic_data_dist_base(gic);
+
+ raw_spin_lock(&irq_controller_lock);
+ for (i = 0; i * 32 < gic->gic_irqs; i++) {
+ enabled = readl_relaxed(base + GIC_DIST_ENABLE_CLEAR + i * 4);
+ pending[i] = readl_relaxed(base + GIC_DIST_PENDING_SET + i * 4);
+ pending[i] &= enabled;
+ }
+ raw_spin_unlock(&irq_controller_lock);
+
+ for (i = find_first_bit((unsigned long *)pending, gic->gic_irqs);
+ i < gic->gic_irqs;
+ i = find_next_bit((unsigned long *)pending,
+ gic->gic_irqs, i+1)) {
+ pr_warn("%s: %d triggered", __func__, i + gic->irq_offset);
+ }
+}
+
static void gic_resume_one(struct gic_chip_data *gic)
{
unsigned int i;
void __iomem *base = gic_data_dist_base(gic);
+ gic_show_resume_irq(gic);
for (i = 0; i * 32 < gic->gic_irqs; i++) {
/* disable all of them */
writel_relaxed(0xffffffff,