From patchwork Mon Jul 22 16:21:44 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guennadi Liakhovetski X-Patchwork-Id: 2831494 Return-Path: X-Original-To: patchwork-linux-sh@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 22D549F243 for ; Mon, 22 Jul 2013 16:22:03 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id CAC85202EE for ; Mon, 22 Jul 2013 16:22:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A35E5202E5 for ; Mon, 22 Jul 2013 16:22:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932748Ab3GVQVy (ORCPT ); Mon, 22 Jul 2013 12:21:54 -0400 Received: from moutng.kundenserver.de ([212.227.126.187]:49506 "EHLO moutng.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932518Ab3GVQVw (ORCPT ); Mon, 22 Jul 2013 12:21:52 -0400 Received: from axis700.grange (dslb-178-009-251-173.pools.arcor-ip.net [178.9.251.173]) by mrelayeu.kundenserver.de (node=mreu0) with ESMTP (Nemesis) id 0LjfP2-1UQ2Er46R6-00bwUg; Mon, 22 Jul 2013 18:21:46 +0200 Received: from 6a.grange (6a.grange [192.168.1.11]) by axis700.grange (Postfix) with ESMTPS id 8650340BB4; Mon, 22 Jul 2013 18:21:45 +0200 (CEST) Received: from lyakh by 6a.grange with local (Exim 4.72) (envelope-from ) id 1V1Irp-0005i6-9h; Mon, 22 Jul 2013 18:21:45 +0200 From: Guennadi Liakhovetski To: linux-sh@vger.kernel.org Cc: Magnus Damm , Simon Horman , Laurent Pinchart , Grant Likely , Guennadi Liakhovetski Subject: [PATCH v2 2/3] irqchip: intc-irqpin: pre-map all interrupts in the DT case Date: Mon, 22 Jul 2013 18:21:44 +0200 Message-Id: <1374510105-21896-3-git-send-email-g.liakhovetski@gmx.de> X-Mailer: git-send-email 1.7.2.5 In-Reply-To: <1374510105-21896-1-git-send-email-g.liakhovetski@gmx.de> References: <1374510105-21896-1-git-send-email-g.liakhovetski@gmx.de> X-Provags-ID: V02:K0:vNfoZ0cr2jQmYsnhYeG3CUdYSEK5Z8vmkqHcTLE4Djq eRSYzO8Y8VJRs08qBjZHEIBmQNWVkvwyqLKccvh0dD9ZU0hN+z cKybHT5o0HhHDnaYnXMGr+dDjpIJBS/OMAsK6WJ69zy72b1KqW rm8YqZ+MV5Cl1Ee0euQycyO+4LjwxpnEsqFaMM2CR1C3RBd4DO 4HNGG/1T+YbgmHj2zjNE53jBaKAuoCyktv9y5cE7r27zEV86bE La0a92ZxVNIeFe2ZXYBqkzA9d9bXD3MFC+l9jjclPOn02eN9n0 iBB4UXC5wMsAkQxc6aQmcVctBv2Ujz6PqBwQCGxH/v2W5/fqJo N093Jj409S0rIYNaHdAmyk1OGaSWCLuBQxbEuD7ksGyCqiSt21 nCQ8vsedpdr9A== Sender: linux-sh-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org X-Spam-Status: No, score=-8.3 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In the DT case interrupts in the irq-renesas-intc-irqpin.c driver are mapped dynamically only if requested by a user. This works fine, except on sh73a0, where masking of IRQPIN interrupts on the irqpin controller is broken and interrupts have to be masked on the parent instead. This forced masking can only be done, if interrupts are also mapped without being requested. This patch pre-maps interrupts in such a case during probing. Signed-off-by: Guennadi Liakhovetski --- v2: in v1 spurious interrupts were mapped in the interrupt handler upon their first occurrence. This version maps them all during probing instead. drivers/irqchip/irq-renesas-intc-irqpin.c | 10 +++++++++- 1 files changed, 9 insertions(+), 1 deletions(-) diff --git a/drivers/irqchip/irq-renesas-intc-irqpin.c b/drivers/irqchip/irq-renesas-intc-irqpin.c index 82cec63..ca5a8b63 100644 --- a/drivers/irqchip/irq-renesas-intc-irqpin.c +++ b/drivers/irqchip/irq-renesas-intc-irqpin.c @@ -336,7 +336,7 @@ static int intc_irqpin_probe(struct platform_device *pdev) void (*enable_fn)(struct irq_data *d); void (*disable_fn)(struct irq_data *d); const char *name = dev_name(&pdev->dev); - int ref_irq; + int ref_irq, min_irq = INT_MAX; int ret; int k; @@ -380,6 +380,8 @@ static int intc_irqpin_probe(struct platform_device *pdev) p->irq[k].p = p; p->irq[k].requested_irq = irq->start; + if (min_irq > irq->start) + min_irq = irq->start; } p->number_of_irqs = k; @@ -467,6 +469,12 @@ static int intc_irqpin_probe(struct platform_device *pdev) goto err0; } + if (pdev->dev.of_node && p->config.control_parent && + !p->config.irq_base) + for (k = 0; k < p->number_of_irqs; k++) + irq_create_mapping(p->irq_domain, + p->irq[k].requested_irq - min_irq); + if (p->shared_irqs) { /* request one shared interrupt */ if (devm_request_irq(&pdev->dev, p->irq[0].requested_irq,