Patch "xtensa: don't use linux IRQ #0" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
xtensa: don't use linux IRQ #0
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
xtensa-don-t-use-linux-irq-0.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
e5c86679d5e864947a52fb31e45a425dea3e7fa9Mon Sep 17 00:00:00 2001
From: Max Filippov <[email protected]>
Date: Mon, 5 Jun 2017 02:43:51 -0700
Subject: xtensa: don't use linux IRQ #0
From: Max Filippov <[email protected]>
commit e5c86679d5e864947a52fb31e45a425dea3e7fa9 upstream.
Linux IRQ #0 is reserved for error reporting and may not be used. Increase NR_IRQS for one additional slot and increase irq_domain_add_legacy parameter first_irq value to 1, so that linux IRQ #0 is not associated with hardware IRQ #0 in legacy IRQ domains. Introduce macro XTENSA_PIC_LINUX_IRQ for static translation of xtensa PIC hardware IRQ # to linux IRQ #. Use this macro in XTFPGA platform data definitions.
This fixes inability to use hardware IRQ #0 in configurations that don't use device tree and allows for non-identity mapping between linux IRQ # and hardware IRQ #.
--- arch/xtensa/include/asm/irq.h | 3 ++- arch/xtensa/kernel/irq.c | 5 ----- arch/xtensa/platforms/xtfpga/include/platform/hardware.h | 6 ++++-- arch/xtensa/platforms/xtfpga/setup.c | 10 +++++----- drivers/irqchip/irq-xtensa-mx.c | 2 +- drivers/irqchip/irq-xtensa-pic.c | 2 +- 6 files changed, 13 insertions(+), 15 deletions(-)
arch/xtensa/include/asm/irq.h +2 -1
@@ -29,7 +29,8 @@ static inline void variant_irq_disable(u# define PLATFORM_NR_IRQS 0#endif #define XTENSA_NR_IRQS XCHAL_NUM_INTERRUPTS -#define NR_IRQS (XTENSA_NR_IRQS + VARIANT_NR_IRQS + PLATFORM_NR_IRQS) +#define NR_IRQS (XTENSA_NR_IRQS + VARIANT_NR_IRQS + PLATFORM_NR_IRQS + 1) +#define XTENSA_PIC_LINUX_IRQ (hwirq) ((hwirq) + 1)#if VARIANT_NR_IRQS ==0 static inline void variant_init_irq (void ) { }
arch/xtensa/kernel/irq.c +0 -5
@@ -34,11 +34,6 @@ asmlinkage void do_IRQ(int hwirq, struct {int irq =irq_find_mapping (NULL , hwirq); -if (hwirq >=NR_IRQS ) { -printk (KERN_EMERG "%s: cannot handle IRQ %d\n" , - __func__, hwirq); - } -#ifdef CONFIG_DEBUG_STACKOVERFLOW /* Debugging check for stack overflow: is there less than 1KB free? */ {
arch/xtensa/platforms/xtfpga/include/platform/hardware.h +4 -2
@@ -24,16 +24,18 @@/* Interrupt configuration. */ -#define PLATFORM_NR_IRQS 10 +#define PLATFORM_NR_IRQS 0/* Default assignment of LX60 devices to external interrupts. */ #ifdef CONFIG_XTENSA_MX #define DUART16552_INTNUM XCHAL_EXTINT3_NUM#define OETH_IRQ XCHAL_EXTINT4_NUM +#define C67X00_IRQ XCHAL_EXTINT8_NUM#else #define DUART16552_INTNUM XCHAL_EXTINT0_NUM#define OETH_IRQ XCHAL_EXTINT1_NUM +#define C67X00_IRQ XCHAL_EXTINT5_NUM#endif /*
@@ -63,5 +65,5 @@#define C67X00_PADDR (XCHAL_KIO_PADDR + 0x0D0D0000)#define C67X00_SIZE 0x10 -#define C67X00_IRQ 5 +#endif /* __XTENSA_XTAVNET_HARDWARE_H */
arch/xtensa/platforms/xtfpga/setup.c +5 -5
@@ -175,8 +175,8 @@ static struct resource ethoc_res[] = { .flags = IORESOURCE_MEM, }, [2] = { /* IRQ number */ - .start = OETH_IRQ, - .end = OETH_IRQ, + .start = XTENSA_PIC_LINUX_IRQ(OETH_IRQ), + .end = XTENSA_PIC_LINUX_IRQ(OETH_IRQ), .flags = IORESOURCE_IRQ, }, };
@@ -213,8 +213,8 @@ static struct resource c67x00_res[] = { .flags = IORESOURCE_MEM, }, [1] = { /* IRQ number */ - .start = C67X00_IRQ, - .end = C67X00_IRQ, + .start = XTENSA_PIC_LINUX_IRQ(C67X00_IRQ), + .end = XTENSA_PIC_LINUX_IRQ(C67X00_IRQ), .flags = IORESOURCE_IRQ, }, };
@@ -247,7 +247,7 @@ static struct resource serial_resource =static struct plat_serial8250_port serial_platform_data[] = { [0 ] = { .mapbase =DUART16552_PADDR , - .irq =DUART16552_INTNUM , + .irq =XTENSA_PIC_LINUX_IRQ (DUART16552_INTNUM ), .flags =UPF_BOOT_AUTOCONF |UPF_SKIP_TEST |UPF_IOREMAP , .iotype =XCHAL_HAVE_BE ?UPIO_MEM32BE :UPIO_MEM32 ,
drivers/irqchip/irq-xtensa-mx.c +1 -1
@@ -142,7 +142,7 @@ static struct irq_chip xtensa_mx_irq_chiint __init xtensa_mx_init_legacy (struct device_node *interrupt_parent) {struct irq_domain *root_domain = -irq_domain_add_legacy (NULL ,NR_IRQS ,0 ,0 , +irq_domain_add_legacy (NULL ,NR_IRQS -1 ,1 ,0 , &xtensa_mx_irq_domain_ops, &xtensa_mx_irq_chip);irq_set_default_host (root_domain);
drivers/irqchip/irq-xtensa-pic.c +1 -1
@@ -89,7 +89,7 @@ static struct irq_chip xtensa_irq_chip =int __init xtensa_pic_init_legacy (struct device_node *interrupt_parent) {struct irq_domain *root_domain = -irq_domain_add_legacy (NULL ,NR_IRQS ,0 ,0 , +irq_domain_add_legacy (NULL ,NR_IRQS -1 ,1 ,0 , &xtensa_irq_domain_ops, &xtensa_irq_chip);irq_set_default_host (root_domain);return 0 ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/xtensa-don-t-use-linux-irq-0.patch