diff options
Diffstat (limited to 'drivers/sh/intc/core.c')
| -rw-r--r-- | drivers/sh/intc/core.c | 27 | 
1 files changed, 23 insertions, 4 deletions
diff --git a/drivers/sh/intc/core.c b/drivers/sh/intc/core.c index 2374468615ed..32c26d795ed0 100644 --- a/drivers/sh/intc/core.c +++ b/drivers/sh/intc/core.c @@ -324,8 +324,16 @@ int __init register_intc_controller(struct intc_desc *desc)  		res = irq_create_identity_mapping(d->domain, irq);  		if (unlikely(res)) { -			pr_err("can't get irq_desc for %d\n", irq); -			continue; +			if (res == -EEXIST) { +				res = irq_domain_associate(d->domain, irq, irq); +				if (unlikely(res)) { +					pr_err("domain association failure\n"); +					continue; +				} +			} else { +				pr_err("can't identity map IRQ %d\n", irq); +				continue; +			}  		}  		intc_irq_xlate_set(irq, vect->enum_id, d); @@ -345,8 +353,19 @@ int __init register_intc_controller(struct intc_desc *desc)  			 */  			res = irq_create_identity_mapping(d->domain, irq2);  			if (unlikely(res)) { -				pr_err("can't get irq_desc for %d\n", irq2); -				continue; +				if (res == -EEXIST) { +					res = irq_domain_associate(d->domain, +								   irq, irq); +					if (unlikely(res)) { +						pr_err("domain association " +						       "failure\n"); +						continue; +					} +				} else { +					pr_err("can't identity map IRQ %d\n", +					       irq); +					continue; +				}  			}  			vect2->enum_id = 0;  |