linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] irqchip: xilinx: Switch to generic domain handler
@ 2020-02-24 12:05 Michal Simek
  2020-02-24 12:05 ` [PATCH v2 1/2] irqchip: xilinx: Fill error code when irq domain registration fails Michal Simek
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Michal Simek @ 2020-02-24 12:05 UTC (permalink / raw)
  To: linux-kernel, monstr, michal.simek, git, maz
  Cc: Jason Cooper, Mubin Sayyed, Stefan Asserhall, Thomas Gleixner,
	linux-arm-kernel

Hi,

this series is based on cascade mode patch sent by Mubin
(https://lkml.org/lkml/2020/2/11/888 - v3 series).

The first patch is just fixing error patch. The second is converting microblaze
do_IRQ() to generic IRQ handler with appropriate changes in xilinx intc driver.

Also removes concurrent_irq global variable which wasn't wired
anywhere but it stores number of concurrent IRQs handled by one call. There
is option to get it back if needed but I haven't seen it in other archs
that's why I have removed it too.

Thanks,
Michal

Changes in v2:
- Merge generic irq multi handler(v1 2/3) and domain irq patch (v1 3/3) from together
- Add likely() suggested by Marc

Michal Simek (2):
  irqchip: xilinx: Fill error code when irq domain registration fails
  irqchip: xilinx: Enable generic irq multi handler

 arch/microblaze/Kconfig           |  2 ++
 arch/microblaze/include/asm/irq.h |  3 ---
 arch/microblaze/kernel/irq.c      | 21 +------------------
 drivers/irqchip/irq-xilinx-intc.c | 35 ++++++++++++++++++-------------
 4 files changed, 24 insertions(+), 37 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2 1/2] irqchip: xilinx: Fill error code when irq domain registration fails
  2020-02-24 12:05 [PATCH v2 0/2] irqchip: xilinx: Switch to generic domain handler Michal Simek
@ 2020-02-24 12:05 ` Michal Simek
  2020-02-24 12:05 ` [PATCH v2 2/2] irqchip: xilinx: Enable generic irq multi handler Michal Simek
  2020-03-08 14:01 ` [PATCH v2 0/2] irqchip: xilinx: Switch to generic domain handler Marc Zyngier
  2 siblings, 0 replies; 6+ messages in thread
From: Michal Simek @ 2020-02-24 12:05 UTC (permalink / raw)
  To: linux-kernel, monstr, michal.simek, git, maz
  Cc: Stefan Asserhall, Jason Cooper, Thomas Gleixner, linux-arm-kernel

There is no ret filled in case of irq_domain_add_linear() failure.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Stefan Asserhall <stefan.asserhall@xilinx.com>
---

Changes in v2: None

 drivers/irqchip/irq-xilinx-intc.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/irqchip/irq-xilinx-intc.c b/drivers/irqchip/irq-xilinx-intc.c
index 51f461d2934f..cf1bb470d7b5 100644
--- a/drivers/irqchip/irq-xilinx-intc.c
+++ b/drivers/irqchip/irq-xilinx-intc.c
@@ -230,6 +230,7 @@ static int __init xilinx_intc_of_init(struct device_node *intc,
 						  &xintc_irq_domain_ops, irqc);
 	if (!irqc->root_domain) {
 		pr_err("irq-xilinx: Unable to create IRQ domain\n");
+		ret = -EINVAL;
 		goto error;
 	}
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 2/2] irqchip: xilinx: Enable generic irq multi handler
  2020-02-24 12:05 [PATCH v2 0/2] irqchip: xilinx: Switch to generic domain handler Michal Simek
  2020-02-24 12:05 ` [PATCH v2 1/2] irqchip: xilinx: Fill error code when irq domain registration fails Michal Simek
@ 2020-02-24 12:05 ` Michal Simek
  2020-03-08 14:01 ` [PATCH v2 0/2] irqchip: xilinx: Switch to generic domain handler Marc Zyngier
  2 siblings, 0 replies; 6+ messages in thread
From: Michal Simek @ 2020-02-24 12:05 UTC (permalink / raw)
  To: linux-kernel, monstr, michal.simek, git, maz
  Cc: Stefan Asserhall, Jason Cooper, Mubin Sayyed, Thomas Gleixner,
	linux-arm-kernel

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 <michal.simek@xilinx.com>
Reviewed-by: Stefan Asserhall <stefan.asserhall@xilinx.com>

---

Changes in v2:
- Merge generic irq multi handler(v1 2/3) and domain irq patch (v1 3/3) from together
- Add likely() suggested by Marc

 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 6a331bd57ea8..242f58ec086b 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 eac2fb4b3fb9..5166f0893e2b 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 903dad822fad..0b37dde60a1e 100644
--- a/arch/microblaze/kernel/irq.c
+++ b/arch/microblaze/kernel/irq.c
@@ -20,29 +20,10 @@
 #include <linux/irqchip.h>
 #include <linux/of_irq.h>
 
-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 cf1bb470d7b5..2de573ee9764 100644
--- a/drivers/irqchip/irq-xilinx-intc.c
+++ b/drivers/irqchip/irq-xilinx-intc.c
@@ -125,20 +125,6 @@ static unsigned int xintc_get_irq_local(struct xintc_irq_chip *irqc)
 	return irq;
 }
 
-unsigned int xintc_get_irq(void)
-{
-	u32 hwirq;
-	unsigned int irq = -1;
-
-	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;
@@ -178,6 +164,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)
 {
@@ -248,6 +253,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;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 0/2] irqchip: xilinx: Switch to generic domain handler
  2020-02-24 12:05 [PATCH v2 0/2] irqchip: xilinx: Switch to generic domain handler Michal Simek
  2020-02-24 12:05 ` [PATCH v2 1/2] irqchip: xilinx: Fill error code when irq domain registration fails Michal Simek
  2020-02-24 12:05 ` [PATCH v2 2/2] irqchip: xilinx: Enable generic irq multi handler Michal Simek
@ 2020-03-08 14:01 ` Marc Zyngier
  2020-03-08 14:32   ` Marc Zyngier
  2 siblings, 1 reply; 6+ messages in thread
From: Marc Zyngier @ 2020-03-08 14:01 UTC (permalink / raw)
  To: Michal Simek
  Cc: linux-kernel, monstr, git, Jason Cooper, Mubin Sayyed,
	Stefan Asserhall, Thomas Gleixner, linux-arm-kernel

On Mon, 24 Feb 2020 13:05:12 +0100
Michal Simek <michal.simek@xilinx.com> wrote:

> Hi,
> 
> this series is based on cascade mode patch sent by Mubin
> (https://lkml.org/lkml/2020/2/11/888 - v3 series).
> 
> The first patch is just fixing error patch. The second is converting microblaze
> do_IRQ() to generic IRQ handler with appropriate changes in xilinx intc driver.
> 
> Also removes concurrent_irq global variable which wasn't wired
> anywhere but it stores number of concurrent IRQs handled by one call. There
> is option to get it back if needed but I haven't seen it in other archs
> that's why I have removed it too.

Queued for 5.7.

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny...

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 0/2] irqchip: xilinx: Switch to generic domain handler
  2020-03-08 14:01 ` [PATCH v2 0/2] irqchip: xilinx: Switch to generic domain handler Marc Zyngier
@ 2020-03-08 14:32   ` Marc Zyngier
  2020-03-09  8:20     ` Michal Simek
  0 siblings, 1 reply; 6+ messages in thread
From: Marc Zyngier @ 2020-03-08 14:32 UTC (permalink / raw)
  To: Michal Simek
  Cc: linux-kernel, monstr, git, Jason Cooper, Mubin Sayyed,
	Stefan Asserhall, Thomas Gleixner, linux-arm-kernel

On Sun, 8 Mar 2020 14:01:26 +0000
Marc Zyngier <maz@kernel.org> wrote:

> On Mon, 24 Feb 2020 13:05:12 +0100
> Michal Simek <michal.simek@xilinx.com> wrote:
> 
> > Hi,
> > 
> > this series is based on cascade mode patch sent by Mubin
> > (https://lkml.org/lkml/2020/2/11/888 - v3 series).
> > 
> > The first patch is just fixing error patch. The second is converting microblaze
> > do_IRQ() to generic IRQ handler with appropriate changes in xilinx intc driver.
> > 
> > Also removes concurrent_irq global variable which wasn't wired
> > anywhere but it stores number of concurrent IRQs handled by one call. There
> > is option to get it back if needed but I haven't seen it in other archs
> > that's why I have removed it too.  
> 
> Queued for 5.7.

Scratch that, this doesn't apply to mainline because of the above
dependency (and said dependency hasn't been reposted after Thomas'
review). I've now dropped it. Please resubmit a full series that
contains all the pre-requisite to be applied on mainline.

	M.
-- 
Jazz is not dead. It just smells funny...

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 0/2] irqchip: xilinx: Switch to generic domain handler
  2020-03-08 14:32   ` Marc Zyngier
@ 2020-03-09  8:20     ` Michal Simek
  0 siblings, 0 replies; 6+ messages in thread
From: Michal Simek @ 2020-03-09  8:20 UTC (permalink / raw)
  To: Marc Zyngier, Michal Simek
  Cc: linux-kernel, monstr, git, Jason Cooper, Mubin Sayyed,
	Stefan Asserhall, Thomas Gleixner, linux-arm-kernel

On 08. 03. 20 15:32, Marc Zyngier wrote:
> On Sun, 8 Mar 2020 14:01:26 +0000
> Marc Zyngier <maz@kernel.org> wrote:
> 
>> On Mon, 24 Feb 2020 13:05:12 +0100
>> Michal Simek <michal.simek@xilinx.com> wrote:
>>
>>> Hi,
>>>
>>> this series is based on cascade mode patch sent by Mubin
>>> (https://lkml.org/lkml/2020/2/11/888 - v3 series).
>>>
>>> The first patch is just fixing error patch. The second is converting microblaze
>>> do_IRQ() to generic IRQ handler with appropriate changes in xilinx intc driver.
>>>
>>> Also removes concurrent_irq global variable which wasn't wired
>>> anywhere but it stores number of concurrent IRQs handled by one call. There
>>> is option to get it back if needed but I haven't seen it in other archs
>>> that's why I have removed it too.  
>>
>> Queued for 5.7.
> 
> Scratch that, this doesn't apply to mainline because of the above
> dependency (and said dependency hasn't been reposted after Thomas'
> review). I've now dropped it. Please resubmit a full series that
> contains all the pre-requisite to be applied on mainline.

I have asked Mubin to send these two patches as series with cascade mode
support.

Thanks,
Michal


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-03-09  8:21 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-24 12:05 [PATCH v2 0/2] irqchip: xilinx: Switch to generic domain handler Michal Simek
2020-02-24 12:05 ` [PATCH v2 1/2] irqchip: xilinx: Fill error code when irq domain registration fails Michal Simek
2020-02-24 12:05 ` [PATCH v2 2/2] irqchip: xilinx: Enable generic irq multi handler Michal Simek
2020-03-08 14:01 ` [PATCH v2 0/2] irqchip: xilinx: Switch to generic domain handler Marc Zyngier
2020-03-08 14:32   ` Marc Zyngier
2020-03-09  8:20     ` Michal Simek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).