handle_IRQ(irq, regs);
 }
 
-static int nvic_irq_domain_translate(struct irq_domain *d,
-                                    struct irq_fwspec *fwspec,
-                                    unsigned long *hwirq, unsigned int *type)
-{
-       if (WARN_ON(fwspec->param_count < 1))
-               return -EINVAL;
-       *hwirq = fwspec->param[0];
-       *type = IRQ_TYPE_NONE;
-       return 0;
-}
-
 static int nvic_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
                                unsigned int nr_irqs, void *arg)
 {
        unsigned int type = IRQ_TYPE_NONE;
        struct irq_fwspec *fwspec = arg;
 
-       ret = nvic_irq_domain_translate(domain, fwspec, &hwirq, &type);
+       ret = irq_domain_translate_onecell(domain, fwspec, &hwirq, &type);
        if (ret)
                return ret;
 
 }
 
 static const struct irq_domain_ops nvic_irq_domain_ops = {
-       .translate = nvic_irq_domain_translate,
+       .translate = irq_domain_translate_onecell,
        .alloc = nvic_irq_domain_alloc,
        .free = irq_domain_free_irqs_top,
 };