From patchwork Thu Jun 12 11:53:11 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sricharan R X-Patchwork-Id: 31823 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-ob0-f200.google.com (mail-ob0-f200.google.com [209.85.214.200]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 1FE8F20AE6 for ; Thu, 12 Jun 2014 11:58:37 +0000 (UTC) Received: by mail-ob0-f200.google.com with SMTP id wm4sf1709249obc.3 for ; Thu, 12 Jun 2014 04:58:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:subject:date:message-id :in-reply-to:references:mime-version:cc:precedence:list-id :list-unsubscribe:list-archive:list-post:list-help:list-subscribe :sender:errors-to:x-original-sender :x-original-authentication-results:mailing-list:content-type :content-transfer-encoding; bh=QstVBadiSP9blMAtNfONKCYMZpNiEL4CWgBfuUwiu7s=; b=QK/HKG0GYJHfMBGngshrce+AqG85GD4yc3vpzojxfggcUehWGNqJ0PkpOVUmZj1Lls sSFFrpq5351nymHPZdsCQbiXY47QoZggsCsLeZCeWMREGuwyhKcv+J6G/W9UkjdC7dQi 9B8itkJHe0D/ZloadlTCU2Y50FGwEDQABHChQFucbus9Br9WhhbINynTdE50jHBmiYh8 Jipc6WptJJfe3VLdLDYykW3p3N/9+C/VWCTsgHFAmp0VyS+uNBQZ+SEeErLXYzF6yvU5 Uy43VagdnhHHEhk3XYGDsJwaGfrSFSui3nm57ZU/3Joh9hrVAjXlnyJl0uPJ2Vf/WD2J a+Ig== X-Gm-Message-State: ALoCoQnVEt3XYwEJ9Hxtzu5Q7G1k4lmd70mptA6NJ/1OszleRhPfiSX1V8bA0oaJsqxdH1U4JFmo X-Received: by 10.182.166.36 with SMTP id zd4mr4859302obb.43.1402574316748; Thu, 12 Jun 2014 04:58:36 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.83.50 with SMTP id i47ls3070760qgd.38.gmail; Thu, 12 Jun 2014 04:58:36 -0700 (PDT) X-Received: by 10.52.185.72 with SMTP id fa8mr8045153vdc.12.1402574316620; Thu, 12 Jun 2014 04:58:36 -0700 (PDT) Received: from mail-vc0-f180.google.com (mail-vc0-f180.google.com [209.85.220.180]) by mx.google.com with ESMTPS id ek8si236022vdc.87.2014.06.12.04.58.36 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 12 Jun 2014 04:58:36 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.180 as permitted sender) client-ip=209.85.220.180; Received: by mail-vc0-f180.google.com with SMTP id im17so645235vcb.25 for ; Thu, 12 Jun 2014 04:58:36 -0700 (PDT) X-Received: by 10.58.229.101 with SMTP id sp5mr197896vec.42.1402574316479; Thu, 12 Jun 2014 04:58:36 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.221.54.6 with SMTP id vs6csp397236vcb; Thu, 12 Jun 2014 04:58:36 -0700 (PDT) X-Received: by 10.140.38.18 with SMTP id s18mr57822034qgs.88.1402574315986; Thu, 12 Jun 2014 04:58:35 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org. [2001:1868:205::9]) by mx.google.com with ESMTPS id w8si800841qaw.115.2014.06.12.04.58.35 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Jun 2014 04:58:35 -0700 (PDT) Received-SPF: none (google.com: linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org does not designate permitted sender hosts) client-ip=2001:1868:205::9; 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 1Wv3cI-0004xT-Kr; Thu, 12 Jun 2014 11:56:26 +0000 Received: from arroyo.ext.ti.com ([192.94.94.40]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Wv3c0-0004f7-U8 for linux-arm-kernel@lists.infradead.org; Thu, 12 Jun 2014 11:56:09 +0000 Received: from dlelxv90.itg.ti.com ([172.17.2.17]) by arroyo.ext.ti.com (8.13.7/8.13.7) with ESMTP id s5CBtbvZ016297; Thu, 12 Jun 2014 06:55:37 -0500 Received: from DFLE72.ent.ti.com (dfle72.ent.ti.com [128.247.5.109]) by dlelxv90.itg.ti.com (8.14.3/8.13.8) with ESMTP id s5CBtbCc029184; Thu, 12 Jun 2014 06:55:37 -0500 Received: from dflp32.itg.ti.com (10.64.6.15) by DFLE72.ent.ti.com (128.247.5.109) with Microsoft SMTP Server id 14.3.174.1; Thu, 12 Jun 2014 06:55:36 -0500 Received: from uda0393807.india.ti.com. (ileax41-snat.itg.ti.com [10.172.224.153]) by dflp32.itg.ti.com (8.14.3/8.13.8) with ESMTP id s5CBtEbq008910; Thu, 12 Jun 2014 06:55:33 -0500 From: Sricharan R To: , , , Subject: [PATCH V2 03/19] irqchip: crossbar: Skip some irqs from getting mapped to crossbar Date: Thu, 12 Jun 2014 17:23:11 +0530 Message-ID: <1402574007-13987-4-git-send-email-r.sricharan@ti.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1402574007-13987-1-git-send-email-r.sricharan@ti.com> References: <1402574007-13987-1-git-send-email-r.sricharan@ti.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20140612_045609_171658_7F5A718E X-CRM114-Status: GOOD ( 17.74 ) X-Spam-Score: -5.7 (-----) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-5.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at http://www.dnswl.org/, high trust [192.94.94.40 listed in list.dnswl.org] -0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [192.94.94.40 listed in wl.mailspike.net] -0.0 SPF_PASS SPF: sender matches SPF record -0.7 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain -0.0 RCVD_IN_MSPIKE_WL Mailspike good senders Cc: nm@ti.com, linux@arm.linux.org.uk, jason@lakedaemon.net, tony@atomide.com, rnayak@ti.com, r.sricharan@ti.com, santosh.shilimkar@ti.com, tglx@linutronix.de X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: r.sricharan@ti.com X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.180 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 From: Nishanth Menon When, in the system due to varied reasons, interrupts might be unusable due to hardware behavior, but register maps do exist, then those interrupts should be skipped while mapping irq to crossbars. Signed-off-by: Nishanth Menon Signed-off-by: Sricharan R Signed-off-by: Tony Lindgren --- drivers/irqchip/irq-crossbar.c | 47 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/drivers/irqchip/irq-crossbar.c b/drivers/irqchip/irq-crossbar.c index 51d4b87..847f6e3 100644 --- a/drivers/irqchip/irq-crossbar.c +++ b/drivers/irqchip/irq-crossbar.c @@ -13,11 +13,13 @@ #include #include #include +#include #include #include #define IRQ_FREE -1 #define IRQ_RESERVED -2 +#define IRQ_SKIP -3 #define GIC_IRQ_START 32 /* @@ -34,6 +36,16 @@ struct crossbar_device { void (*write) (int, int); }; +/** + * struct crossbar_data: Platform specific data + * @irqs_unused: array of irqs that cannot be used because of hw erratas + * @size: size of the irqs_unused array + */ +struct crossbar_data { + const uint *irqs_unused; + const uint size; +}; + static struct crossbar_device *cb; static inline void crossbar_writel(int irq_no, int cb_no) @@ -119,10 +131,12 @@ const struct irq_domain_ops routable_irq_domain_ops = { .xlate = crossbar_domain_xlate }; -static int __init crossbar_of_init(struct device_node *node) +static int __init crossbar_of_init(struct device_node *node, + const struct crossbar_data *data) { int i, size, max, reserved = 0, entry; const __be32 *irqsr; + const int *irqsk = NULL; cb = kzalloc(sizeof(*cb), GFP_KERNEL); @@ -194,6 +208,22 @@ static int __init crossbar_of_init(struct device_node *node) reserved += size; } + /* Skip the ones marked as unused */ + if (data) { + irqsk = data->irqs_unused; + size = data->size; + + for (i = 0; i < size; i++) { + entry = irqsk[i]; + + if (entry > max) { + pr_err("Invalid skip entry\n"); + goto err3; + } + cb->irq_map[entry] = IRQ_SKIP; + } + } + register_routable_domain_ops(&routable_irq_domain_ops); return 0; @@ -208,18 +238,27 @@ err1: return -ENOMEM; } +/* irq number 10 cannot be used because of hw bug */ +int dra_irqs_unused[] = { 10 }; +struct crossbar_data cb_dra_data = { dra_irqs_unused, + ARRAY_SIZE(dra_irqs_unused) }; + static const struct of_device_id crossbar_match[] __initconst = { - { .compatible = "ti,irq-crossbar" }, + { .compatible = "ti,irq-crossbar", .data = &cb_dra_data }, {} }; int __init irqcrossbar_init(void) { struct device_node *np; - np = of_find_matching_node(NULL, crossbar_match); + const struct of_device_id *of_id; + const struct crossbar_data *cdata; + + np = of_find_matching_node_and_match(NULL, crossbar_match, &of_id); if (!np) return -ENODEV; - crossbar_of_init(np); + cdata = of_id->data; + crossbar_of_init(np, cdata); return 0; }