diff options
Diffstat (limited to 'arch/powerpc/sysdev/xics')
-rw-r--r-- | arch/powerpc/sysdev/xics/ics-rtas.c | 11 | ||||
-rw-r--r-- | arch/powerpc/sysdev/xics/xics-common.c | 12 |
2 files changed, 18 insertions, 5 deletions
diff --git a/arch/powerpc/sysdev/xics/ics-rtas.c b/arch/powerpc/sysdev/xics/ics-rtas.c index 5b3ee387e89d..610c148fedcc 100644 --- a/arch/powerpc/sysdev/xics/ics-rtas.c +++ b/arch/powerpc/sysdev/xics/ics-rtas.c @@ -26,12 +26,14 @@ static int ibm_int_off; static int ics_rtas_map(struct ics *ics, unsigned int virq); static void ics_rtas_mask_unknown(struct ics *ics, unsigned long vec); static long ics_rtas_get_server(struct ics *ics, unsigned long vec); +static int ics_rtas_host_match(struct ics *ics, struct device_node *node); /* Only one global & state struct ics */ static struct ics ics_rtas = { .map = ics_rtas_map, .mask_unknown = ics_rtas_mask_unknown, .get_server = ics_rtas_get_server, + .host_match = ics_rtas_host_match, }; static void ics_rtas_unmask_irq(struct irq_data *d) @@ -202,6 +204,15 @@ static long ics_rtas_get_server(struct ics *ics, unsigned long vec) return status[0]; } +static int ics_rtas_host_match(struct ics *ics, struct device_node *node) +{ + /* IBM machines have interrupt parents of various funky types for things + * like vdevices, events, etc... The trick we use here is to match + * everything here except the legacy 8259 which is compatible "chrp,iic" + */ + return !of_device_is_compatible(node, "chrp,iic"); +} + int ics_rtas_init(void) { ibm_get_xive = rtas_token("ibm,get-xive"); diff --git a/arch/powerpc/sysdev/xics/xics-common.c b/arch/powerpc/sysdev/xics/xics-common.c index e70175dfe322..c58844d72426 100644 --- a/arch/powerpc/sysdev/xics/xics-common.c +++ b/arch/powerpc/sysdev/xics/xics-common.c @@ -331,11 +331,13 @@ int xics_get_irq_server(unsigned int virq, const struct cpumask *cpumask, static int xics_host_match(struct irq_host *h, struct device_node *node) { - /* IBM machines have interrupt parents of various funky types for things - * like vdevices, events, etc... The trick we use here is to match - * everything here except the legacy 8259 which is compatible "chrp,iic" - */ - return !of_device_is_compatible(node, "chrp,iic"); + struct ics *ics; + + list_for_each_entry(ics, &ics_list, link) + if (ics->host_match(ics, node)) + return 1; + + return 0; } /* Dummies */ |