Commit 68158006 authored by Michael Ellerman's avatar Michael Ellerman Committed by Paul Mackerras

[POWERPC] Provide a default irq_host match, which matches on an exact of_node

The most common match semantic is an exact match based on the device node.
So provide a default implementation that does this, and hook it up if no
match routine is specified.
Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 8528ab84
...@@ -418,6 +418,11 @@ irq_hw_number_t virq_to_hw(unsigned int virq) ...@@ -418,6 +418,11 @@ irq_hw_number_t virq_to_hw(unsigned int virq)
} }
EXPORT_SYMBOL_GPL(virq_to_hw); EXPORT_SYMBOL_GPL(virq_to_hw);
static int default_irq_host_match(struct irq_host *h, struct device_node *np)
{
return h->of_node != NULL && h->of_node == np;
}
__init_refok struct irq_host *irq_alloc_host(struct device_node *of_node, __init_refok struct irq_host *irq_alloc_host(struct device_node *of_node,
unsigned int revmap_type, unsigned int revmap_type,
unsigned int revmap_arg, unsigned int revmap_arg,
...@@ -449,6 +454,9 @@ __init_refok struct irq_host *irq_alloc_host(struct device_node *of_node, ...@@ -449,6 +454,9 @@ __init_refok struct irq_host *irq_alloc_host(struct device_node *of_node,
host->ops = ops; host->ops = ops;
host->of_node = of_node; host->of_node = of_node;
if (host->ops->match == NULL)
host->ops->match = default_irq_host_match;
spin_lock_irqsave(&irq_big_lock, flags); spin_lock_irqsave(&irq_big_lock, flags);
/* If it's a legacy controller, check for duplicates and /* If it's a legacy controller, check for duplicates and
...@@ -523,7 +531,7 @@ struct irq_host *irq_find_host(struct device_node *node) ...@@ -523,7 +531,7 @@ struct irq_host *irq_find_host(struct device_node *node)
*/ */
spin_lock_irqsave(&irq_big_lock, flags); spin_lock_irqsave(&irq_big_lock, flags);
list_for_each_entry(h, &irq_hosts, link) list_for_each_entry(h, &irq_hosts, link)
if (h->ops->match != NULL && h->ops->match(h, node)) { if (h->ops->match(h, node)) {
found = h; found = h;
break; break;
} }
......
...@@ -241,12 +241,6 @@ static struct irq_chip mpc52xx_sdma_irqchip = { ...@@ -241,12 +241,6 @@ static struct irq_chip mpc52xx_sdma_irqchip = {
* irq_host * irq_host
*/ */
static int mpc52xx_irqhost_match(struct irq_host *h, struct device_node *node)
{
pr_debug("%s: node=%p\n", __func__, node);
return h->of_node == node;
}
static int mpc52xx_irqhost_xlate(struct irq_host *h, struct device_node *ct, static int mpc52xx_irqhost_xlate(struct irq_host *h, struct device_node *ct,
u32 * intspec, unsigned int intsize, u32 * intspec, unsigned int intsize,
irq_hw_number_t * out_hwirq, irq_hw_number_t * out_hwirq,
...@@ -367,7 +361,6 @@ static int mpc52xx_irqhost_map(struct irq_host *h, unsigned int virq, ...@@ -367,7 +361,6 @@ static int mpc52xx_irqhost_map(struct irq_host *h, unsigned int virq,
} }
static struct irq_host_ops mpc52xx_irqhost_ops = { static struct irq_host_ops mpc52xx_irqhost_ops = {
.match = mpc52xx_irqhost_match,
.xlate = mpc52xx_irqhost_xlate, .xlate = mpc52xx_irqhost_xlate,
.map = mpc52xx_irqhost_map, .map = mpc52xx_irqhost_map,
}; };
......
...@@ -398,11 +398,6 @@ m82xx_pci_irq_demux(unsigned int irq, struct irq_desc *desc) ...@@ -398,11 +398,6 @@ m82xx_pci_irq_demux(unsigned int irq, struct irq_desc *desc)
} }
} }
static int pci_pic_host_match(struct irq_host *h, struct device_node *node)
{
return h->of_node == node;
}
static int pci_pic_host_map(struct irq_host *h, unsigned int virq, static int pci_pic_host_map(struct irq_host *h, unsigned int virq,
irq_hw_number_t hw) irq_hw_number_t hw)
{ {
...@@ -418,7 +413,6 @@ static void pci_host_unmap(struct irq_host *h, unsigned int virq) ...@@ -418,7 +413,6 @@ static void pci_host_unmap(struct irq_host *h, unsigned int virq)
} }
static struct irq_host_ops pci_pic_host_ops = { static struct irq_host_ops pci_pic_host_ops = {
.match = pci_pic_host_match,
.map = pci_pic_host_map, .map = pci_pic_host_map,
.unmap = pci_host_unmap, .unmap = pci_host_unmap,
}; };
......
...@@ -294,13 +294,7 @@ static int msic_host_map(struct irq_host *h, unsigned int virq, ...@@ -294,13 +294,7 @@ static int msic_host_map(struct irq_host *h, unsigned int virq,
return 0; return 0;
} }
static int msic_host_match(struct irq_host *host, struct device_node *dn)
{
return host->of_node == dn;
}
static struct irq_host_ops msic_host_ops = { static struct irq_host_ops msic_host_ops = {
.match = msic_host_match,
.map = msic_host_map, .map = msic_host_map,
}; };
......
...@@ -175,11 +175,6 @@ static struct irq_chip spider_pic = { ...@@ -175,11 +175,6 @@ static struct irq_chip spider_pic = {
.set_type = spider_set_irq_type, .set_type = spider_set_irq_type,
}; };
static int spider_host_match(struct irq_host *h, struct device_node *node)
{
return h->of_node == node;
}
static int spider_host_map(struct irq_host *h, unsigned int virq, static int spider_host_map(struct irq_host *h, unsigned int virq,
irq_hw_number_t hw) irq_hw_number_t hw)
{ {
...@@ -206,7 +201,6 @@ static int spider_host_xlate(struct irq_host *h, struct device_node *ct, ...@@ -206,7 +201,6 @@ static int spider_host_xlate(struct irq_host *h, struct device_node *ct,
} }
static struct irq_host_ops spider_host_ops = { static struct irq_host_ops spider_host_ops = {
.match = spider_host_match,
.map = spider_host_map, .map = spider_host_map,
.xlate = spider_host_xlate, .xlate = spider_host_xlate,
}; };
......
...@@ -94,11 +94,6 @@ int cpm_get_irq(void) ...@@ -94,11 +94,6 @@ int cpm_get_irq(void)
return irq_linear_revmap(cpm_pic_host, cpm_vec); return irq_linear_revmap(cpm_pic_host, cpm_vec);
} }
static int cpm_pic_host_match(struct irq_host *h, struct device_node *node)
{
return h->of_node == node;
}
static int cpm_pic_host_map(struct irq_host *h, unsigned int virq, static int cpm_pic_host_map(struct irq_host *h, unsigned int virq,
irq_hw_number_t hw) irq_hw_number_t hw)
{ {
...@@ -126,7 +121,6 @@ static struct irqaction cpm_error_irqaction = { ...@@ -126,7 +121,6 @@ static struct irqaction cpm_error_irqaction = {
}; };
static struct irq_host_ops cpm_pic_host_ops = { static struct irq_host_ops cpm_pic_host_ops = {
.match = cpm_pic_host_match,
.map = cpm_pic_host_map, .map = cpm_pic_host_map,
}; };
......
...@@ -205,11 +205,6 @@ unsigned int cpm2_get_irq(void) ...@@ -205,11 +205,6 @@ unsigned int cpm2_get_irq(void)
return irq_linear_revmap(cpm2_pic_host, irq); return irq_linear_revmap(cpm2_pic_host, irq);
} }
static int cpm2_pic_host_match(struct irq_host *h, struct device_node *node)
{
return h->of_node == node;
}
static int cpm2_pic_host_map(struct irq_host *h, unsigned int virq, static int cpm2_pic_host_map(struct irq_host *h, unsigned int virq,
irq_hw_number_t hw) irq_hw_number_t hw)
{ {
...@@ -233,7 +228,6 @@ static int cpm2_pic_host_xlate(struct irq_host *h, struct device_node *ct, ...@@ -233,7 +228,6 @@ static int cpm2_pic_host_xlate(struct irq_host *h, struct device_node *ct,
} }
static struct irq_host_ops cpm2_pic_host_ops = { static struct irq_host_ops cpm2_pic_host_ops = {
.match = cpm2_pic_host_match,
.map = cpm2_pic_host_map, .map = cpm2_pic_host_map,
.xlate = cpm2_pic_host_xlate, .xlate = cpm2_pic_host_xlate,
}; };
......
...@@ -119,11 +119,6 @@ unsigned int mpc8xx_get_irq(void) ...@@ -119,11 +119,6 @@ unsigned int mpc8xx_get_irq(void)
} }
static int mpc8xx_pic_host_match(struct irq_host *h, struct device_node *node)
{
return h->of_node == node;
}
static int mpc8xx_pic_host_map(struct irq_host *h, unsigned int virq, static int mpc8xx_pic_host_map(struct irq_host *h, unsigned int virq,
irq_hw_number_t hw) irq_hw_number_t hw)
{ {
...@@ -157,7 +152,6 @@ static int mpc8xx_pic_host_xlate(struct irq_host *h, struct device_node *ct, ...@@ -157,7 +152,6 @@ static int mpc8xx_pic_host_xlate(struct irq_host *h, struct device_node *ct,
static struct irq_host_ops mpc8xx_pic_host_ops = { static struct irq_host_ops mpc8xx_pic_host_ops = {
.match = mpc8xx_pic_host_match,
.map = mpc8xx_pic_host_map, .map = mpc8xx_pic_host_map,
.xlate = mpc8xx_pic_host_xlate, .xlate = mpc8xx_pic_host_xlate,
}; };
......
...@@ -202,11 +202,6 @@ static struct irq_chip mv64x60_chip_gpp = { ...@@ -202,11 +202,6 @@ static struct irq_chip mv64x60_chip_gpp = {
* mv64x60_host_ops functions * mv64x60_host_ops functions
*/ */
static int mv64x60_host_match(struct irq_host *h, struct device_node *np)
{
return h->of_node == np;
}
static struct irq_chip *mv64x60_chips[] = { static struct irq_chip *mv64x60_chips[] = {
[MV64x60_LEVEL1_LOW] = &mv64x60_chip_low, [MV64x60_LEVEL1_LOW] = &mv64x60_chip_low,
[MV64x60_LEVEL1_HIGH] = &mv64x60_chip_high, [MV64x60_LEVEL1_HIGH] = &mv64x60_chip_high,
...@@ -228,7 +223,6 @@ static int mv64x60_host_map(struct irq_host *h, unsigned int virq, ...@@ -228,7 +223,6 @@ static int mv64x60_host_map(struct irq_host *h, unsigned int virq,
} }
static struct irq_host_ops mv64x60_host_ops = { static struct irq_host_ops mv64x60_host_ops = {
.match = mv64x60_host_match,
.map = mv64x60_host_map, .map = mv64x60_host_map,
}; };
......
...@@ -404,13 +404,7 @@ static int pci_irq_host_map(struct irq_host *h, unsigned int virq, ...@@ -404,13 +404,7 @@ static int pci_irq_host_map(struct irq_host *h, unsigned int virq,
return 0; return 0;
} }
static int pci_irq_host_match(struct irq_host *h, struct device_node *node)
{
return h->of_node == node;
}
static struct irq_host_ops pci_irq_host_ops = { static struct irq_host_ops pci_irq_host_ops = {
.match = pci_irq_host_match,
.map = pci_irq_host_map, .map = pci_irq_host_map,
.xlate = pci_irq_host_xlate, .xlate = pci_irq_host_xlate,
}; };
......
...@@ -215,11 +215,6 @@ void fastcall handle_uic_irq(unsigned int irq, struct irq_desc *desc) ...@@ -215,11 +215,6 @@ void fastcall handle_uic_irq(unsigned int irq, struct irq_desc *desc)
spin_unlock(&desc->lock); spin_unlock(&desc->lock);
} }
static int uic_host_match(struct irq_host *h, struct device_node *node)
{
return h->of_node == node;
}
static int uic_host_map(struct irq_host *h, unsigned int virq, static int uic_host_map(struct irq_host *h, unsigned int virq,
irq_hw_number_t hw) irq_hw_number_t hw)
{ {
...@@ -249,7 +244,6 @@ static int uic_host_xlate(struct irq_host *h, struct device_node *ct, ...@@ -249,7 +244,6 @@ static int uic_host_xlate(struct irq_host *h, struct device_node *ct,
} }
static struct irq_host_ops uic_host_ops = { static struct irq_host_ops uic_host_ops = {
.match = uic_host_match,
.map = uic_host_map, .map = uic_host_map,
.xlate = uic_host_xlate, .xlate = uic_host_xlate,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment