From patchwork Sat May 31 06:01:30 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Shiyan X-Patchwork-Id: 354385 Return-Path: X-Original-To: incoming-imx@patchwork.ozlabs.org Delivered-To: patchwork-incoming-imx@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2001:1868:205::9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id DD1B9140100 for ; Sat, 31 May 2014 16:05:34 +1000 (EST) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1WqcNC-0007fv-Sm; Sat, 31 May 2014 06:02:30 +0000 Received: from smtp29.i.mail.ru ([94.100.177.89]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1WqcMt-0007cS-Lw for linux-arm-kernel@lists.infradead.org; Sat, 31 May 2014 06:02:13 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.ru; s=mail2; h=Message-Id:Date:Subject:Cc:To:From; bh=hQzgIS2eILEBKUevFfpIc2ZLF8vHhInpGprD1xn1LF8=; b=bR4awQhY+0t9SKyYMIZTrnK4zFOGH45PGQo8dLvxuJ4IHNY9N8JQeRsaLKiyPU8vrIn4KIFiDdyWXZcerkN3xr1X3NbwQDVF3+SL6AmhWySAm8+vIPNdCi8eLIZw4wtTcsoVNPUfS57cRmPZEk6eRxqL2DCdTEQGBjzdaxUyHPY=; Received: from [5.18.98.7] (port=52298 helo=shc.zet) by smtp29.i.mail.ru with esmtpa (envelope-from ) id 1WqcMU-0007V2-5A; Sat, 31 May 2014 10:01:46 +0400 From: Alexander Shiyan To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 1/3] ARM: i.MX: avic: Use irqchip_init() for IRQ initialization in DT case Date: Sat, 31 May 2014 10:01:30 +0400 Message-Id: <1401516095-31020-1-git-send-email-shc_work@mail.ru> X-Mailer: git-send-email 1.8.5.5 X-Spam: Not detected X-Mras: Ok X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20140530_230212_362528_0B31A23A X-CRM114-Status: GOOD ( 15.46 ) X-Spam-Score: -0.1 (/) X-Spam-Report: SpamAssassin version 3.3.2 on bombadil.infradead.org summary: Content analysis details: (-0.1 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [94.100.177.89 listed in list.dnswl.org] 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (shc_work[at]mail.ru) -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain Cc: Alexander Shiyan , Sascha Hauer , Shawn Guo X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+incoming-imx=patchwork.ozlabs.org@lists.infradead.org List-Id: linux-imx-kernel.lists.patchwork.ozlabs.org Use generic irqchip_init() DT call to initialize IRQs, so after this patch, the mxc-avic driver is quite prepared to move to drivers/irqchip. As a temporary solution to do it, we use OF_DECLARE_2() instead of IRQCHIP_DECLARE(). Signed-off-by: Alexander Shiyan --- arch/arm/mach-imx/avic.c | 29 ++++++++++++++++++++++------- arch/arm/mach-imx/imx25-dt.c | 1 - arch/arm/mach-imx/imx27-dt.c | 1 - arch/arm/mach-imx/imx31-dt.c | 1 - arch/arm/mach-imx/imx35-dt.c | 3 ++- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/arch/arm/mach-imx/avic.c b/arch/arm/mach-imx/avic.c index 24b103c..9adcad2 100644 --- a/arch/arm/mach-imx/avic.c +++ b/arch/arm/mach-imx/avic.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -153,13 +154,10 @@ static void __exception_irq_entry avic_handle_irq(struct pt_regs *regs) * interrupts. It registers the interrupt enable and disable functions * to the kernel for each interrupt source. */ -void __init mxc_init_irq(void __iomem *irqbase) +static void __init _avic_init_irq(struct device_node *np) { - struct device_node *np; int irq_base; - int i; - - avic_base = irqbase; + unsigned i; /* put the AVIC into the reset value with * all interrupts disabled @@ -178,7 +176,6 @@ void __init mxc_init_irq(void __iomem *irqbase) irq_base = irq_alloc_descs(-1, 0, AVIC_NUM_IRQS, numa_node_id()); WARN_ON(irq_base < 0); - np = of_find_compatible_node(NULL, NULL, "fsl,avic"); domain = irq_domain_add_legacy(np, AVIC_NUM_IRQS, irq_base, 0, &irq_domain_simple_ops, NULL); WARN_ON(!domain); @@ -196,6 +193,24 @@ void __init mxc_init_irq(void __iomem *irqbase) /* Initialize FIQ */ init_FIQ(FIQ_START); #endif +} + +void __init mxc_init_irq(void __iomem *irqbase) +{ + avic_base = irqbase; + + _avic_init_irq(NULL); +} - printk(KERN_INFO "MXC IRQ initialized\n"); +static int __init avic_init_irq_dt(struct device_node *np, + struct device_node *parent) +{ + avic_base = of_iomap(np, 0); + if (!avic_base) + return -ENOMEM; + + _avic_init_irq(np); + + return 0; } +OF_DECLARE_2(irqchip, mxc_avic, "fsl,avic", avic_init_irq_dt); diff --git a/arch/arm/mach-imx/imx25-dt.c b/arch/arm/mach-imx/imx25-dt.c index 42a65e0..2f97743 100644 --- a/arch/arm/mach-imx/imx25-dt.c +++ b/arch/arm/mach-imx/imx25-dt.c @@ -37,7 +37,6 @@ static void __init imx25_timer_init(void) DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)") .map_io = mx25_map_io, .init_early = imx25_init_early, - .init_irq = mx25_init_irq, .init_time = imx25_timer_init, .init_machine = imx25_dt_init, .dt_compat = imx25_dt_board_compat, diff --git a/arch/arm/mach-imx/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c index 17bd405..09c577c 100644 --- a/arch/arm/mach-imx/imx27-dt.c +++ b/arch/arm/mach-imx/imx27-dt.c @@ -42,7 +42,6 @@ static void __init imx27_timer_init(void) DT_MACHINE_START(IMX27_DT, "Freescale i.MX27 (Device Tree Support)") .map_io = mx27_map_io, .init_early = imx27_init_early, - .init_irq = mx27_init_irq, .init_time = imx27_timer_init, .init_machine = imx27_dt_init, .dt_compat = imx27_dt_board_compat, diff --git a/arch/arm/mach-imx/imx31-dt.c b/arch/arm/mach-imx/imx31-dt.c index 581f4d6..6e7a4c2 100644 --- a/arch/arm/mach-imx/imx31-dt.c +++ b/arch/arm/mach-imx/imx31-dt.c @@ -38,7 +38,6 @@ static void __init imx31_dt_timer_init(void) DT_MACHINE_START(IMX31_DT, "Freescale i.MX31 (Device Tree Support)") .map_io = mx31_map_io, .init_early = imx31_init_early, - .init_irq = mx31_init_irq, .init_time = imx31_dt_timer_init, .init_machine = imx31_dt_init, .dt_compat = imx31_dt_board_compat, diff --git a/arch/arm/mach-imx/imx35-dt.c b/arch/arm/mach-imx/imx35-dt.c index a62854c..6b74123 100644 --- a/arch/arm/mach-imx/imx35-dt.c +++ b/arch/arm/mach-imx/imx35-dt.c @@ -9,6 +9,7 @@ */ #include +#include #include #include #include @@ -31,7 +32,7 @@ static void __init imx35_dt_init(void) static void __init imx35_irq_init(void) { imx_init_l2cache(); - mx35_init_irq(); + irqchip_init(); } static const char *imx35_dt_board_compat[] __initconst = {