提交 4d2f0ef1 编写于 作者: L Linus Torvalds

Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq fixes from Thomas Gleixner:
 "From the irqchip departement you get:

   - regression fix for omap-intc

   - regression fix for atmel-aic-common

   - functional correctness fix for hip04

   - type mismatch fix for gic-v3-its

   - proper error pointer check for mtd-sysirq

  Mostly one and two liners except for the omap regression fix which is
  slightly larger than desired"

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  irqchip: atmel-aic-common: Prevent clobbering of priority when changing IRQ type
  irqchip: omap-intc: Fix legacy DMA regression
  irqchip: gic-v3-its: Fix use of max with decimal constant
  irqchip: hip04: Initialize hip04_cpu_map to 0xffff
  irqchip: mtk-sysirq: Use IS_ERR() instead of NULL pointer check
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#define AT91_AIC_IRQ_MIN_PRIORITY 0 #define AT91_AIC_IRQ_MIN_PRIORITY 0
#define AT91_AIC_IRQ_MAX_PRIORITY 7 #define AT91_AIC_IRQ_MAX_PRIORITY 7
#define AT91_AIC_SRCTYPE GENMASK(7, 6) #define AT91_AIC_SRCTYPE GENMASK(6, 5)
#define AT91_AIC_SRCTYPE_LOW (0 << 5) #define AT91_AIC_SRCTYPE_LOW (0 << 5)
#define AT91_AIC_SRCTYPE_FALLING (1 << 5) #define AT91_AIC_SRCTYPE_FALLING (1 << 5)
#define AT91_AIC_SRCTYPE_HIGH (2 << 5) #define AT91_AIC_SRCTYPE_HIGH (2 << 5)
...@@ -74,7 +74,7 @@ int aic_common_set_type(struct irq_data *d, unsigned type, unsigned *val) ...@@ -74,7 +74,7 @@ int aic_common_set_type(struct irq_data *d, unsigned type, unsigned *val)
return -EINVAL; return -EINVAL;
} }
*val &= AT91_AIC_SRCTYPE; *val &= ~AT91_AIC_SRCTYPE;
*val |= aic_type; *val |= aic_type;
return 0; return 0;
......
...@@ -1053,7 +1053,7 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id, ...@@ -1053,7 +1053,7 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id,
* of two entries. No, the architecture doesn't let you * of two entries. No, the architecture doesn't let you
* express an ITT with a single entry. * express an ITT with a single entry.
*/ */
nr_ites = max(2, roundup_pow_of_two(nvecs)); nr_ites = max(2UL, roundup_pow_of_two(nvecs));
sz = nr_ites * its->ite_size; sz = nr_ites * its->ite_size;
sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1; sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1;
itt = kmalloc(sz, GFP_KERNEL); itt = kmalloc(sz, GFP_KERNEL);
......
...@@ -381,7 +381,7 @@ hip04_of_init(struct device_node *node, struct device_node *parent) ...@@ -381,7 +381,7 @@ hip04_of_init(struct device_node *node, struct device_node *parent)
* It will be refined as each CPU probes its ID. * It will be refined as each CPU probes its ID.
*/ */
for (i = 0; i < NR_HIP04_CPU_IF; i++) for (i = 0; i < NR_HIP04_CPU_IF; i++)
hip04_cpu_map[i] = 0xff; hip04_cpu_map[i] = 0xffff;
/* /*
* Find out how many interrupts are supported. * Find out how many interrupts are supported.
......
...@@ -137,9 +137,9 @@ static int __init mtk_sysirq_of_init(struct device_node *node, ...@@ -137,9 +137,9 @@ static int __init mtk_sysirq_of_init(struct device_node *node,
return -ENOMEM; return -ENOMEM;
chip_data->intpol_base = of_io_request_and_map(node, 0, "intpol"); chip_data->intpol_base = of_io_request_and_map(node, 0, "intpol");
if (!chip_data->intpol_base) { if (IS_ERR(chip_data->intpol_base)) {
pr_err("mtk_sysirq: unable to map sysirq register\n"); pr_err("mtk_sysirq: unable to map sysirq register\n");
ret = -ENOMEM; ret = PTR_ERR(chip_data->intpol_base);
goto out_free; goto out_free;
} }
......
...@@ -263,7 +263,7 @@ static int __init omap_init_irq_of(struct device_node *node) ...@@ -263,7 +263,7 @@ static int __init omap_init_irq_of(struct device_node *node)
return ret; return ret;
} }
static int __init omap_init_irq_legacy(u32 base) static int __init omap_init_irq_legacy(u32 base, struct device_node *node)
{ {
int j, irq_base; int j, irq_base;
...@@ -277,7 +277,7 @@ static int __init omap_init_irq_legacy(u32 base) ...@@ -277,7 +277,7 @@ static int __init omap_init_irq_legacy(u32 base)
irq_base = 0; irq_base = 0;
} }
domain = irq_domain_add_legacy(NULL, omap_nr_irqs, irq_base, 0, domain = irq_domain_add_legacy(node, omap_nr_irqs, irq_base, 0,
&irq_domain_simple_ops, NULL); &irq_domain_simple_ops, NULL);
omap_irq_soft_reset(); omap_irq_soft_reset();
...@@ -301,10 +301,26 @@ static int __init omap_init_irq(u32 base, struct device_node *node) ...@@ -301,10 +301,26 @@ static int __init omap_init_irq(u32 base, struct device_node *node)
{ {
int ret; int ret;
if (node) /*
* FIXME legacy OMAP DMA driver sitting under arch/arm/plat-omap/dma.c
* depends is still not ready for linear IRQ domains; because of that
* we need to temporarily "blacklist" OMAP2 and OMAP3 devices from using
* linear IRQ Domain until that driver is finally fixed.
*/
if (of_device_is_compatible(node, "ti,omap2-intc") ||
of_device_is_compatible(node, "ti,omap3-intc")) {
struct resource res;
if (of_address_to_resource(node, 0, &res))
return -ENOMEM;
base = res.start;
ret = omap_init_irq_legacy(base, node);
} else if (node) {
ret = omap_init_irq_of(node); ret = omap_init_irq_of(node);
else } else {
ret = omap_init_irq_legacy(base); ret = omap_init_irq_legacy(base, NULL);
}
if (ret == 0) if (ret == 0)
omap_irq_enable_protection(); omap_irq_enable_protection();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册