From patchwork Wed Aug 31 16:35:44 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zubair Lutfullah Kakakhel X-Patchwork-Id: 664605 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3sPWJc6Bjwz9sCY for ; Thu, 1 Sep 2016 02:37:36 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030456AbcHaQh1 (ORCPT ); Wed, 31 Aug 2016 12:37:27 -0400 Received: from mailapp01.imgtec.com ([195.59.15.196]:39374 "EHLO mailapp01.imgtec.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935827AbcHaQhB (ORCPT ); Wed, 31 Aug 2016 12:37:01 -0400 Received: from HHMAIL01.hh.imgtec.org (unknown [10.100.10.19]) by Forcepoint Email with ESMTPS id 69DF25E5BA307; Wed, 31 Aug 2016 17:36:45 +0100 (IST) Received: from zkakakhel-linux.le.imgtec.org (192.168.154.45) by HHMAIL01.hh.imgtec.org (10.100.10.21) with Microsoft SMTP Server (TLS) id 14.3.294.0; Wed, 31 Aug 2016 17:36:48 +0100 From: Zubair Lutfullah Kakakhel To: , , , , CC: , , , , , Subject: [Patch v3 03/11] irqchip: axi-intc: Add support for parent intc Date: Wed, 31 Aug 2016 17:35:44 +0100 Message-ID: <1472661352-11983-4-git-send-email-Zubair.Kakakhel@imgtec.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1472661352-11983-1-git-send-email-Zubair.Kakakhel@imgtec.com> References: <1472661352-11983-1-git-send-email-Zubair.Kakakhel@imgtec.com> MIME-Version: 1.0 X-Originating-IP: [192.168.154.45] Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The MIPS based xilfpga platform has the following IRQ structure Peripherals --> xilinx_intcontroller -> mips_cpu_int controller Add support for the driver to chain the irq handler Signed-off-by: Zubair Lutfullah Kakakhel --- V2 -> V3 Reused existing parent node instead of finding again. Cleanup up handler based on review V1 -> V2 No change --- drivers/irqchip/irq-axi-intc.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/drivers/irqchip/irq-axi-intc.c b/drivers/irqchip/irq-axi-intc.c index cb69241..30bb084 100644 --- a/drivers/irqchip/irq-axi-intc.c +++ b/drivers/irqchip/irq-axi-intc.c @@ -15,6 +15,7 @@ #include #include #include +#include /* No one else should require these constants, so define them locally here. */ #define ISR 0x00 /* Interrupt Status Register */ @@ -154,11 +155,23 @@ static const struct irq_domain_ops xintc_irq_domain_ops = { .map = xintc_map, }; +static void xil_intc_irq_handler(struct irq_desc *desc) +{ + u32 pending; + + do { + pending = get_irq(); + if (pending == -1U) + break; + generic_handle_irq(pending); + } while (true); +} + static int __init xilinx_intc_of_init(struct device_node *intc, struct device_node *parent) { u32 nr_irq; - int ret; + int ret, irq; struct xintc_irq_chip *irqc; irqc = kzalloc(sizeof(*irqc), GFP_KERNEL); @@ -211,6 +224,15 @@ static int __init xilinx_intc_of_init(struct device_node *intc, root_domain = irq_domain_add_linear(intc, nr_irq, &xintc_irq_domain_ops, irqc); + if (parent) { + irq = irq_of_parse_and_map(intc, 0); + if (irq) + irq_set_chained_handler_and_data(irq, + xil_intc_irq_handler, + root_domain); + + } + irq_set_default_host(root_domain); return 0;