mirror of https://gitee.com/openkylin/linux.git
xtensa: don't use linux IRQ #0
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 #. Cc: stable@vger.kernel.org Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
This commit is contained in:
parent
6bf28969f6
commit
e5c86679d5
|
@ -29,7 +29,8 @@ static inline void variant_irq_disable(unsigned int irq) { }
|
||||||
# define PLATFORM_NR_IRQS 0
|
# define PLATFORM_NR_IRQS 0
|
||||||
#endif
|
#endif
|
||||||
#define XTENSA_NR_IRQS XCHAL_NUM_INTERRUPTS
|
#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
|
#if VARIANT_NR_IRQS == 0
|
||||||
static inline void variant_init_irq(void) { }
|
static inline void variant_init_irq(void) { }
|
||||||
|
|
|
@ -34,11 +34,6 @@ asmlinkage void do_IRQ(int hwirq, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int irq = irq_find_mapping(NULL, hwirq);
|
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
|
#ifdef CONFIG_DEBUG_STACKOVERFLOW
|
||||||
/* Debugging check for stack overflow: is there less than 1KB free? */
|
/* Debugging check for stack overflow: is there less than 1KB free? */
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,16 +24,18 @@
|
||||||
|
|
||||||
/* Interrupt configuration. */
|
/* Interrupt configuration. */
|
||||||
|
|
||||||
#define PLATFORM_NR_IRQS 10
|
#define PLATFORM_NR_IRQS 0
|
||||||
|
|
||||||
/* Default assignment of LX60 devices to external interrupts. */
|
/* Default assignment of LX60 devices to external interrupts. */
|
||||||
|
|
||||||
#ifdef CONFIG_XTENSA_MX
|
#ifdef CONFIG_XTENSA_MX
|
||||||
#define DUART16552_INTNUM XCHAL_EXTINT3_NUM
|
#define DUART16552_INTNUM XCHAL_EXTINT3_NUM
|
||||||
#define OETH_IRQ XCHAL_EXTINT4_NUM
|
#define OETH_IRQ XCHAL_EXTINT4_NUM
|
||||||
|
#define C67X00_IRQ XCHAL_EXTINT8_NUM
|
||||||
#else
|
#else
|
||||||
#define DUART16552_INTNUM XCHAL_EXTINT0_NUM
|
#define DUART16552_INTNUM XCHAL_EXTINT0_NUM
|
||||||
#define OETH_IRQ XCHAL_EXTINT1_NUM
|
#define OETH_IRQ XCHAL_EXTINT1_NUM
|
||||||
|
#define C67X00_IRQ XCHAL_EXTINT5_NUM
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -63,5 +65,5 @@
|
||||||
|
|
||||||
#define C67X00_PADDR (XCHAL_KIO_PADDR + 0x0D0D0000)
|
#define C67X00_PADDR (XCHAL_KIO_PADDR + 0x0D0D0000)
|
||||||
#define C67X00_SIZE 0x10
|
#define C67X00_SIZE 0x10
|
||||||
#define C67X00_IRQ 5
|
|
||||||
#endif /* __XTENSA_XTAVNET_HARDWARE_H */
|
#endif /* __XTENSA_XTAVNET_HARDWARE_H */
|
||||||
|
|
|
@ -175,8 +175,8 @@ static struct resource ethoc_res[] = {
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[2] = { /* IRQ number */
|
[2] = { /* IRQ number */
|
||||||
.start = OETH_IRQ,
|
.start = XTENSA_PIC_LINUX_IRQ(OETH_IRQ),
|
||||||
.end = OETH_IRQ,
|
.end = XTENSA_PIC_LINUX_IRQ(OETH_IRQ),
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -213,8 +213,8 @@ static struct resource c67x00_res[] = {
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = { /* IRQ number */
|
[1] = { /* IRQ number */
|
||||||
.start = C67X00_IRQ,
|
.start = XTENSA_PIC_LINUX_IRQ(C67X00_IRQ),
|
||||||
.end = C67X00_IRQ,
|
.end = XTENSA_PIC_LINUX_IRQ(C67X00_IRQ),
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -247,7 +247,7 @@ static struct resource serial_resource = {
|
||||||
static struct plat_serial8250_port serial_platform_data[] = {
|
static struct plat_serial8250_port serial_platform_data[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.mapbase = DUART16552_PADDR,
|
.mapbase = DUART16552_PADDR,
|
||||||
.irq = DUART16552_INTNUM,
|
.irq = XTENSA_PIC_LINUX_IRQ(DUART16552_INTNUM),
|
||||||
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
|
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
|
||||||
UPF_IOREMAP,
|
UPF_IOREMAP,
|
||||||
.iotype = XCHAL_HAVE_BE ? UPIO_MEM32BE : UPIO_MEM32,
|
.iotype = XCHAL_HAVE_BE ? UPIO_MEM32BE : UPIO_MEM32,
|
||||||
|
|
|
@ -142,7 +142,7 @@ static struct irq_chip xtensa_mx_irq_chip = {
|
||||||
int __init xtensa_mx_init_legacy(struct device_node *interrupt_parent)
|
int __init xtensa_mx_init_legacy(struct device_node *interrupt_parent)
|
||||||
{
|
{
|
||||||
struct irq_domain *root_domain =
|
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_domain_ops,
|
||||||
&xtensa_mx_irq_chip);
|
&xtensa_mx_irq_chip);
|
||||||
irq_set_default_host(root_domain);
|
irq_set_default_host(root_domain);
|
||||||
|
|
|
@ -89,7 +89,7 @@ static struct irq_chip xtensa_irq_chip = {
|
||||||
int __init xtensa_pic_init_legacy(struct device_node *interrupt_parent)
|
int __init xtensa_pic_init_legacy(struct device_node *interrupt_parent)
|
||||||
{
|
{
|
||||||
struct irq_domain *root_domain =
|
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);
|
&xtensa_irq_domain_ops, &xtensa_irq_chip);
|
||||||
irq_set_default_host(root_domain);
|
irq_set_default_host(root_domain);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue