The is a prerequisite patch to support parsing three-cell interrupts which encoded as <instance hwirq irqflag>, the translate function will always retrieve irq number and flag from last two cells. Signed-off-by: Yixun Lan <dlan@xxxxxxxxxx> --- kernel/irq/irqdomain.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index ec6d8e72d980f604ded2bfa2143420e0e0095920..cb874ab5e54a4763d601122becd63b6d759e55d2 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -1208,10 +1208,17 @@ int irq_domain_translate_twocell(struct irq_domain *d, unsigned long *out_hwirq, unsigned int *out_type) { + u32 irq, type; + if (WARN_ON(fwspec->param_count < 2)) return -EINVAL; - *out_hwirq = fwspec->param[0]; - *out_type = fwspec->param[1] & IRQ_TYPE_SENSE_MASK; + + irq = fwspec->param_count - 2; + type = fwspec->param_count - 1; + + *out_hwirq = fwspec->param[irq]; + *out_type = fwspec->param[type] & IRQ_TYPE_SENSE_MASK; + return 0; } EXPORT_SYMBOL_GPL(irq_domain_translate_twocell); -- 2.48.1