Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp1789666ybb; Sun, 29 Mar 2020 13:29:19 -0700 (PDT) X-Google-Smtp-Source: ADFU+vvHH6HBMLk/69GdnfDUSxcgSI2gfLZL031il10NLorpld+jrpBpm81f0ltPSU4L0ZRrhymr X-Received: by 2002:a4a:e9fc:: with SMTP id w28mr7296947ooc.98.1585513759335; Sun, 29 Mar 2020 13:29:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585513759; cv=none; d=google.com; s=arc-20160816; b=VX8F6wKq1nv+bx6xuauczYIxL3KVAR6oRre9Y2J2wDO5iId3y9Ut9N2UOAv0ZuGno8 doHxJe7dQVFx4ePBbwZLMYrFLiI3iOHHVwTa6cTPGuIIzRB5XAHOdhvURAco4NAE0wLO 63AfDXm9FFuLLG8zXVn1O86K8iAOjoDhOJ8lorne3fUD1A+oV2XqDxYIGLhQ7FnM3r3j eBmxBfv1N7B/PFoc0l52I4CBJvxkVpnTboVHP6B5AUhLZ8YkDet7+wZxn+Ka9RBq+YGw lymLyrrvhZxAmGKkDJmezgSucUXNJFBmaR0YL9q75R4XetZ8hNSJryWoppmontz+lNVf /Zcg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :robot-unsubscribe:robot-id:message-id:mime-version:references :in-reply-to:cc:subject:to:reply-to:from:date; bh=M6xT0r9EKawI48LeB2kE0TIso0XNsKUDZXJqSZja0uo=; b=esCh4ExWlxI+Fb0zkuHxZ3fw1Gg4PxbH/JTfs+AaXIpbpSs2WkslZVi28bJAEI8Skz RMuqXbYwiJ5F9XyTiZz8gU31X3VoeBGlYv30Y5CzmGznxzMM95Rb0hPnwXkKiHN14HxG moTmqgqbccQ5foRdUarwv1TflPZgjXdEDQS6EK614zmIyqwJPJio7RLy1E0N165TMluH cZWaejCYSIVVHAsXdWROCpU1CHfgMUZzvXR26W2Jj1tUIC3hAczaOmC7rizBbdEh17Jh 0FuiXq99roED+Pvgdn2ndAS60cZC6yuqeo2d9Xb6sp1dMcabllfopDHIr0YEJTiR4+kv zfEg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s27si5497995otg.229.2020.03.29.13.29.06; Sun, 29 Mar 2020 13:29:19 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729003AbgC2U2V (ORCPT + 99 others); Sun, 29 Mar 2020 16:28:21 -0400 Received: from Galois.linutronix.de ([193.142.43.55]:56926 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728736AbgC2U0O (ORCPT ); Sun, 29 Mar 2020 16:26:14 -0400 Received: from [5.158.153.53] (helo=tip-bot2.lab.linutronix.de) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1jIeVX-0001M9-Je; Sun, 29 Mar 2020 22:26:11 +0200 Received: from [127.0.1.1] (localhost [IPv6:::1]) by tip-bot2.lab.linutronix.de (Postfix) with ESMTP id 2EEBC1C0451; Sun, 29 Mar 2020 22:26:11 +0200 (CEST) Date: Sun, 29 Mar 2020 20:26:10 -0000 From: "tip-bot2 for Michal Simek" Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: irq/core] irqchip/xilinx: Enable generic irq multi handler Cc: Michal Simek , Marc Zyngier , Stefan Asserhall , x86 , LKML In-Reply-To: <20200317125600.15913-4-mubin.usman.sayyed@xilinx.com> References: <20200317125600.15913-4-mubin.usman.sayyed@xilinx.com> MIME-Version: 1.0 Message-ID: <158551357076.28353.1716269552245308352.tip-bot2@tip-bot2> X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following commit has been merged into the irq/core branch of tip: Commit-ID: a0789993bf8266e62fea6b4613945ba081c71e7d Gitweb: https://git.kernel.org/tip/a0789993bf8266e62fea6b4613945ba081c71e7d Author: Michal Simek AuthorDate: Tue, 17 Mar 2020 18:25:59 +05:30 Committer: Marc Zyngier CommitterDate: Sun, 22 Mar 2020 11:52:53 irqchip/xilinx: Enable generic irq multi handler Register default arch handler via driver instead of directly pointing to xilinx intc controller. This patch makes architecture code more generic. Driver calls generic domain specific irq handler which does the most of things self. Also get rid of concurrent_irq counting which hasn't been exported anywhere. Based on this loop was also optimized by using do/while loop instead of goto loop. Signed-off-by: Michal Simek Signed-off-by: Marc Zyngier Reviewed-by: Stefan Asserhall Link: https://lore.kernel.org/r/20200317125600.15913-4-mubin.usman.sayyed@xilinx.com --- arch/microblaze/Kconfig | 2 ++- arch/microblaze/include/asm/irq.h | 3 +--- arch/microblaze/kernel/irq.c | 21 +------------------- drivers/irqchip/irq-xilinx-intc.c | 34 +++++++++++++++++------------- 4 files changed, 23 insertions(+), 37 deletions(-) diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index 6a331bd..242f58e 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig @@ -47,6 +47,8 @@ config MICROBLAZE select CPU_NO_EFFICIENT_FFS select MMU_GATHER_NO_RANGE if MMU select SPARSE_IRQ + select GENERIC_IRQ_MULTI_HANDLER + select HANDLE_DOMAIN_IRQ # Endianness selection choice diff --git a/arch/microblaze/include/asm/irq.h b/arch/microblaze/include/asm/irq.h index eac2fb4..5166f08 100644 --- a/arch/microblaze/include/asm/irq.h +++ b/arch/microblaze/include/asm/irq.h @@ -14,7 +14,4 @@ struct pt_regs; extern void do_IRQ(struct pt_regs *regs); -/* should be defined in each interrupt controller driver */ -extern unsigned int xintc_get_irq(void); - #endif /* _ASM_MICROBLAZE_IRQ_H */ diff --git a/arch/microblaze/kernel/irq.c b/arch/microblaze/kernel/irq.c index 903dad8..0b37dde 100644 --- a/arch/microblaze/kernel/irq.c +++ b/arch/microblaze/kernel/irq.c @@ -20,29 +20,10 @@ #include #include -static u32 concurrent_irq; - void __irq_entry do_IRQ(struct pt_regs *regs) { - unsigned int irq; - struct pt_regs *old_regs = set_irq_regs(regs); trace_hardirqs_off(); - - irq_enter(); - irq = xintc_get_irq(); -next_irq: - BUG_ON(!irq); - generic_handle_irq(irq); - - irq = xintc_get_irq(); - if (irq != -1U) { - pr_debug("next irq: %d\n", irq); - ++concurrent_irq; - goto next_irq; - } - - irq_exit(); - set_irq_regs(old_regs); + handle_arch_irq(regs); trace_hardirqs_on(); } diff --git a/drivers/irqchip/irq-xilinx-intc.c b/drivers/irqchip/irq-xilinx-intc.c index 1d3d273..ea74181 100644 --- a/drivers/irqchip/irq-xilinx-intc.c +++ b/drivers/irqchip/irq-xilinx-intc.c @@ -124,20 +124,6 @@ static unsigned int xintc_get_irq_local(struct xintc_irq_chip *irqc) return irq; } -unsigned int xintc_get_irq(void) -{ - unsigned int irq = -1; - u32 hwirq; - - hwirq = xintc_read(primary_intc, IVR); - if (hwirq != -1U) - irq = irq_find_mapping(primary_intc->root_domain, hwirq); - - pr_debug("irq-xilinx: hwirq=%d, irq=%d\n", hwirq, irq); - - return irq; -} - static int xintc_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw) { struct xintc_irq_chip *irqc = d->host_data; @@ -177,6 +163,25 @@ static void xil_intc_irq_handler(struct irq_desc *desc) chained_irq_exit(chip, desc); } +static void xil_intc_handle_irq(struct pt_regs *regs) +{ + u32 hwirq; + struct xintc_irq_chip *irqc = primary_intc; + + do { + hwirq = xintc_read(irqc, IVR); + if (likely(hwirq != -1U)) { + int ret; + + ret = handle_domain_irq(irqc->root_domain, hwirq, regs); + WARN_ONCE(ret, "Unhandled HWIRQ %d\n", hwirq); + continue; + } + + break; + } while (1); +} + static int __init xilinx_intc_of_init(struct device_node *intc, struct device_node *parent) { @@ -246,6 +251,7 @@ static int __init xilinx_intc_of_init(struct device_node *intc, } else { primary_intc = irqc; irq_set_default_host(primary_intc->root_domain); + set_handle_irq(xil_intc_handle_irq); } return 0;