Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755083AbbHNMVj (ORCPT ); Fri, 14 Aug 2015 08:21:39 -0400 Received: from bear.ext.ti.com ([192.94.94.41]:38693 "EHLO bear.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754304AbbHNMV3 (ORCPT ); Fri, 14 Aug 2015 08:21:29 -0400 From: Grygorii Strashko To: , , CC: , , , , , , , Grygorii Strashko , Sudeep Holla Subject: [PATCH v3 6/6] irqchip: crossbar: fix set_wake functionality Date: Fri, 14 Aug 2015 15:20:30 +0300 Message-ID: <1439554830-19502-7-git-send-email-grygorii.strashko@ti.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1439554830-19502-1-git-send-email-grygorii.strashko@ti.com> References: <1439554830-19502-1-git-send-email-grygorii.strashko@ti.com> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2289 Lines: 65 The TI crossbar doesn't provides any facility to configure the wakeup sources, but it implements .irq_set_wake() callback: .irq_set_wake = irq_chip_set_wake_parent As result, the irq_chip_set_wake_parent() will try to execute .irq_set_wake() callback for parent IRQ domain, which is TI OMAP wakeupgen, but TI OMAP wakeupgen has IRQCHIP_SKIP_SET_WAKE flag set and do not implement .irq_set_wake() callback. Thus, irq_chip_set_wake_parent() will fail with -ENOSYS. In case of TI OMAP DRA7 the issue reproduced with following configuration: ARM GIC<-OMAP wakeupgen<-TI CBAR<-GPIO<-GPIO pcf857x<-gpio_key gpio_key is wakeup source Failure is reproduced during suspend/resume to RAM: suspend: - gpio_keys_suspend + enable_irq_wake + pcf857x_irq_set_wake + omap_gpio_wake_enable + TI CBAR irq_chip_set_wake_parent + OMAP wakeupgen has no .irq_set_wake() and -ENOSYS will be returned resume: - gpio_keys_resume + disable_irq_wake + irq_set_irq_wake + WARN(1, "Unbalanced IRQ %d wake disable\n", irq); Hence, fix it by adding IRQCHIP_SKIP_SET_WAKE flag to TI Crossbar and drop .irq_set_wake() at the same time. Cc: Sudeep Holla Signed-off-by: Grygorii Strashko --- drivers/irqchip/irq-crossbar.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/irqchip/irq-crossbar.c b/drivers/irqchip/irq-crossbar.c index f5a72cc..c12bb93 100644 --- a/drivers/irqchip/irq-crossbar.c +++ b/drivers/irqchip/irq-crossbar.c @@ -68,9 +68,9 @@ static struct irq_chip crossbar_chip = { .irq_mask = irq_chip_mask_parent, .irq_unmask = irq_chip_unmask_parent, .irq_retrigger = irq_chip_retrigger_hierarchy, - .irq_set_wake = irq_chip_set_wake_parent, .irq_set_type = irq_chip_set_type_parent, - .flags = IRQCHIP_MASK_ON_SUSPEND, + .flags = IRQCHIP_MASK_ON_SUSPEND | + IRQCHIP_SKIP_SET_WAKE, #ifdef CONFIG_SMP .irq_set_affinity = irq_chip_set_affinity_parent, #endif -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/