From patchwork Fri Jul 27 08:08:28 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chanho Park X-Patchwork-Id: 1247331 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) by patchwork1.kernel.org (Postfix) with ESMTP id 6BC883FDD9 for ; Fri, 27 Jul 2012 08:17:08 +0000 (UTC) Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1Sufcp-0005jH-MD; Fri, 27 Jul 2012 08:10:20 +0000 Received: from mailout3.samsung.com ([203.254.224.33]) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1Sufbj-0005aK-9W for linux-arm-kernel@lists.infradead.org; Fri, 27 Jul 2012 08:09:11 +0000 Received: from epcpsbgm1.samsung.com (mailout3.samsung.com [203.254.224.33]) by mailout3.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0M7T00B6E7YJ3EP0@mailout3.samsung.com> for linux-arm-kernel@lists.infradead.org; Fri, 27 Jul 2012 17:08:48 +0900 (KST) X-AuditID: cbfee61a-b7f616d000004b7e-c4-50124c90b165 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 20.C2.19326.09C42105; Fri, 27 Jul 2012 17:08:48 +0900 (KST) Received: from localhost.localdomain ([10.90.51.45]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0M7T007T07Y88OC0@mmp2.samsung.com> for linux-arm-kernel@lists.infradead.org; Fri, 27 Jul 2012 17:08:48 +0900 (KST) From: Chanho Park To: kgene.kim@samsung.com, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org Subject: [PATCHv2 2/3] ARM: EXYNOS: Correct combined IRQs for exynos4412 Date: Fri, 27 Jul 2012 17:08:28 +0900 Message-id: <1343376509-5881-3-git-send-email-chanho61.park@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1343376509-5881-1-git-send-email-chanho61.park@samsung.com> References: <1343376509-5881-1-git-send-email-chanho61.park@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrIJMWRmVeSWpSXmKPExsVy+t9jQd0JPkIBBpuvS1tsenyN1YHRY/OS +gDGKC6blNSczLLUIn27BK6Mx4vPsxQ8Eq+4uKWRrYHxuHAXIyeHhICJxOTF9xghbDGJC/fW s3UxcnEICUxnlLj1Zj0rhLOWSeJjzyxmkCo2AV2JLc9fgXWICKRIXLnRD2YzCyxglNj/JQTE FhbwkLiypg2snkVAVeL/lglsIDYvUHzu22ssXYwcQNsUJOZMsgEJcwp4Shza/wKsRAioZPLx KcwTGHkXMDKsYhRNLUguKE5KzzXUK07MLS7NS9dLzs/dxAj2+DOpHYwrGywOMQpwMCrx8E7k FQoQYk0sK67MPcQowcGsJML71RYoxJuSWFmVWpQfX1Sak1p8iFGag0VJnNfY+6u/kEB6Yklq dmpqQWoRTJaJg1OqgdFpS9utewy2kt8d65PC28yfCxyvZEzb/8t03qrtPeKvVoXM1Ilffv7O s9lXp0zZ8y1UMvdebzfbyQ7OmwKvmcozN/kvvsOccknWm10wc5bOpT6XjJ2l1Xda7uzfv2Nj X/JhpSAWu+1yiZkxPNsDDyqbr0nJ1OdkkmxeeWK/R+0SlcBEqYYd65RYijMSDbWYi4oTAffq VVr0AQAA X-TM-AS-MML: No X-Spam-Note: CRM114 invocation failed X-Spam-Note: SpamAssassin invocation failed Cc: sachin.kamat@linaro.org, will.deacon@arm.com, Chanho Park , linux@arm.linux.org.uk, Kyungmin Park X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: linux-arm-kernel-bounces@lists.infradead.org Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org This patch corrects combined IRQs for exynos4412 platform. The exynos4412 has four extra combined irq group. Each irq is mapped to IRQ_SPI(xx). Unfortunately, extra combined IRQs isn't sequential. So, we need to map the irq manually. Signed-off-by: Chanho Park Signed-off-by: Kyungmin Park --- arch/arm/mach-exynos/common.c | 42 +++++++++++++++++++++++++----- arch/arm/mach-exynos/include/mach/irqs.h | 3 ++- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index f194bbc..499791a 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c @@ -560,6 +560,32 @@ static struct irq_domain_ops combiner_irq_domain_ops = { .map = combiner_irq_domain_map, }; +static inline unsigned int get_combiner_max_nr(void) +{ + if (soc_is_exynos5250()) + return EXYNOS5_MAX_COMBINER_NR; + else if (soc_is_exynos4412()) + return EXYNOS4_MAX_COMBINER_NR; + else + return EXYNOS42XX_MAX_COMBINER_NR; +} + +static unsigned int get_combiner_extra_irq(int group) +{ + switch (group) { + case 16: + return IRQ_SPI(107); + case 17: + return IRQ_SPI(108); + case 18: + return IRQ_SPI(48); + case 19: + return IRQ_SPI(42); + default: + return 0; + } +} + static void __init combiner_init(void __iomem *combiner_base, struct device_node *np) { @@ -570,13 +596,12 @@ static void __init combiner_init(void __iomem *combiner_base, if (of_property_read_u32(np, "samsung,combiner-nr", &max_nr)) { pr_warning("%s: number of combiners not specified, " "setting default as %d.\n", - __func__, EXYNOS4_MAX_COMBINER_NR); - max_nr = EXYNOS4_MAX_COMBINER_NR; + __func__, get_combiner_max_nr()); + max_nr = get_combiner_max_nr(); } - } else { - max_nr = soc_is_exynos5250() ? EXYNOS5_MAX_COMBINER_NR : - EXYNOS4_MAX_COMBINER_NR; - } + } else + max_nr = get_combiner_max_nr(); + nr_irq = max_nr * MAX_IRQ_IN_COMBINER; irq_base = irq_alloc_descs(COMBINER_IRQ(0, 0), 1, nr_irq, 0); @@ -593,7 +618,10 @@ static void __init combiner_init(void __iomem *combiner_base, } for (i = 0; i < max_nr; i++) { - irq = IRQ_SPI(i); + if (soc_is_exynos4412() && i >= 16) + irq = get_combiner_extra_irq(i); + else + irq = IRQ_SPI(i); #ifdef CONFIG_OF if (np) irq = irq_of_parse_and_map(np, i); diff --git a/arch/arm/mach-exynos/include/mach/irqs.h b/arch/arm/mach-exynos/include/mach/irqs.h index 35bced6..12b4f48 100644 --- a/arch/arm/mach-exynos/include/mach/irqs.h +++ b/arch/arm/mach-exynos/include/mach/irqs.h @@ -165,7 +165,8 @@ #define EXYNOS4_IRQ_FIMD0_VSYNC COMBINER_IRQ(11, 1) #define EXYNOS4_IRQ_FIMD0_SYSTEM COMBINER_IRQ(11, 2) -#define EXYNOS4_MAX_COMBINER_NR 16 +#define EXYNOS42XX_MAX_COMBINER_NR 16 +#define EXYNOS4_MAX_COMBINER_NR 20 #define EXYNOS4_IRQ_GPIO1_NR_GROUPS 16 #define EXYNOS4_IRQ_GPIO2_NR_GROUPS 9